From 5b225876dfef35c98a28568e2aee054e08d7bbb4 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Fri, 18 Oct 2024 17:56:38 -0400 Subject: [PATCH 01/39] build(compress-stringify): use pixi for python wasm --- packages/compress-stringify/.gitattributes | 2 + packages/compress-stringify/.gitignore | 7 +- packages/compress-stringify/environment.yml | 9 - packages/compress-stringify/package.json | 2 - packages/compress-stringify/pixi.lock | 1640 +++++++++++++++++ packages/compress-stringify/pixi.toml | 70 + .../test_compress_stringify_emscripten.py | 2 +- .../test/test_compress_stringify_wasi.py | 2 +- 8 files changed, 1719 insertions(+), 15 deletions(-) create mode 100644 packages/compress-stringify/.gitattributes delete mode 100644 packages/compress-stringify/environment.yml create mode 100644 packages/compress-stringify/pixi.lock create mode 100644 packages/compress-stringify/pixi.toml diff --git a/packages/compress-stringify/.gitattributes b/packages/compress-stringify/.gitattributes new file mode 100644 index 000000000..07fe41c52 --- /dev/null +++ b/packages/compress-stringify/.gitattributes @@ -0,0 +1,2 @@ +# GitHub syntax highlighting +pixi.lock linguist-language=YAML linguist-generated=true diff --git a/packages/compress-stringify/.gitignore b/packages/compress-stringify/.gitignore index 0afedebdb..5e4368e1b 100644 --- a/packages/compress-stringify/.gitignore +++ b/packages/compress-stringify/.gitignore @@ -1,5 +1,8 @@ typescript/src/version.ts micromamba/ -test/pyodide-dispatch.tar.bz2 -test/pyodide-emscripten.tar.bz2 +pyodide/ .hypothesis + +# pixi environments +.pixi +*.egg-info diff --git a/packages/compress-stringify/environment.yml b/packages/compress-stringify/environment.yml deleted file mode 100644 index 30c6b3f1b..000000000 --- a/packages/compress-stringify/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: compress-stringify -channels: - - conda-forge -dependencies: - - pytest - - python=3.11 - - pip - - pip: - - hatch diff --git a/packages/compress-stringify/package.json b/packages/compress-stringify/package.json index 816ee2102..199ed881a 100644 --- a/packages/compress-stringify/package.json +++ b/packages/compress-stringify/package.json @@ -28,7 +28,6 @@ "bindgen:python": "itk-wasm pnpm-script bindgen:python", "build:gen:typescript": "itk-wasm pnpm-script build:gen:typescript", "build:gen:python": "itk-wasm pnpm-script build:gen:python", - "build:micromamba": "itk-wasm pnpm-script build:micromamba", "build:python:versionSync": "itk-wasm pnpm-script build:python:versionSync", "publish:python": "itk-wasm pnpm-script publish:python", "test": "pnpm test:data:download && pnpm build:gen:python && pnpm test:python", @@ -43,7 +42,6 @@ "license": "Apache-2.0", "devDependencies": { "@itk-wasm/dam": "^1.1.0", - "@thewtex/setup-micromamba": "^1.9.7", "itk-wasm": "workspace:^", "@itk-wasm/mesh-io-build": "workspace:^", "@itk-wasm/image-io-build": "workspace:^", diff --git a/packages/compress-stringify/pixi.lock b/packages/compress-stringify/pixi.lock new file mode 100644 index 000000000..e68b55e9b --- /dev/null +++ b/packages/compress-stringify/pixi.lock @@ -0,0 +1,1640 @@ +version: 5 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + python: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/37/56b0da468a85e7704f3b2bc045015301bdf4be2184a44868c71f6dca6fe2/greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/05/8c42705a563e74fe42d2bb31fd7e0e1d887cbb43106f121d3b8e1c8a43f2/itkwasm_compare_images-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/91/ab9c4ed1e095f218c7f17ccf691d1ebe0991250d0c55d64fa7ef5e3ce070/itkwasm_compare_images_wasi-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/d1/345595666c6b9539390aafb3bafcd5afae5088df73301b6490fd66a28c6e/itkwasm_compare_meshes-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/61/56/489eb0fb5c52527d7d245b596c1b76e5165d05e1d04ec787552963b6ac8a/itkwasm_compare_meshes_wasi-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/6e/6854a090da846f5a23d2d8276a3c0bc9f2e53a1eb8729c21f84401ccb09c/itkwasm_mesh_io-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/23/6f6798c7533bb6d0a1ec653b58bb0114d17514b53db6240588ff52c58830/itkwasm_mesh_io_wasi-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/41/5d58fd387a44af577ca708df6976ccc60da3a0357baae64b9e997b2d4661/itkwasm_mesh_to_poly_data-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5e/12/c3803828cbaa733fecfbbdd495f6c0aa695e5e12d83ef80c20bfc1c0dfcf/itkwasm_mesh_to_poly_data_wasi-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/a6/c5152c817db664d75c439c2bd99d51f906a31c1df4a04e673ef51008b12f/playwright-1.47.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/67/91/5474b84e505a6ccc295b2d322d90ff6aa0746745717839ee0c5fb4fdcceb/rich-13.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/a0/dd773135ca0f7227e8257555fd2f7a0c88672bfd111a400361f10c09face/trove_classifiers-2024.10.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/2d/cab3cc5529bb05ea7f4e54e308fa889ab626df45c0e2da5ab546e17ad876/uv-0.4.24-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fc/79/edeb217c57fe1bf16d890aa91a1c2c96b28c07b46afed54a5dcf310c3f6f/zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: python/itkwasm-compress-stringify + - pypi: python/itkwasm-compress-stringify-wasi +packages: +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23621 + timestamp: 1650670423406 +- kind: pypi + name: anyio + version: 4.6.2.post1 + url: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + sha256: 6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d + requires_dist: + - idna>=2.8 + - sniffio>=1.1 + - exceptiongroup>=1.0.2 ; python_full_version < '3.11' + - typing-extensions>=4.1 ; python_full_version < '3.11' + - packaging ; extra == 'doc' + - sphinx~=7.4 ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - sphinx-autodoc-typehints>=1.2.0 ; extra == 'doc' + - anyio[trio] ; extra == 'test' + - coverage[toml]>=7 ; extra == 'test' + - exceptiongroup>=1.2.0 ; extra == 'test' + - hypothesis>=4.0 ; extra == 'test' + - psutil>=5.9 ; extra == 'test' + - pytest>=7.0 ; extra == 'test' + - pytest-mock>=3.6.1 ; extra == 'test' + - trustme ; extra == 'test' + - uvloop>=0.21.0b1 ; platform_python_implementation == 'CPython' and platform_system != 'Windows' and extra == 'test' + - truststore>=0.9.1 ; python_full_version >= '3.10' and extra == 'test' + - trio>=0.26.1 ; extra == 'trio' + requires_python: '>=3.9' +- kind: pypi + name: attrs + version: 24.2.0 + url: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + sha256: 81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'benchmark' + - hypothesis ; extra == 'benchmark' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pympler ; extra == 'benchmark' + - pytest-codspeed ; extra == 'benchmark' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pytest-xdist[psutil] ; extra == 'benchmark' + - pytest>=4.3.0 ; extra == 'benchmark' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'cov' + - coverage[toml]>=5.3 ; extra == 'cov' + - hypothesis ; extra == 'cov' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'cov' + - pympler ; extra == 'cov' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'cov' + - pytest-xdist[psutil] ; extra == 'cov' + - pytest>=4.3.0 ; extra == 'cov' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'dev' + - hypothesis ; extra == 'dev' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'dev' + - pre-commit ; extra == 'dev' + - pympler ; extra == 'dev' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'dev' + - pytest-xdist[psutil] ; extra == 'dev' + - pytest>=4.3.0 ; extra == 'dev' + - cogapp ; extra == 'docs' + - furo ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-notfound-page ; extra == 'docs' + - sphinxcontrib-towncrier ; extra == 'docs' + - towncrier<24.7 ; extra == 'docs' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'tests' + - hypothesis ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests' + - pympler ; extra == 'tests' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests' + - pytest-xdist[psutil] ; extra == 'tests' + - pytest>=4.3.0 ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + requires_python: '>=3.7' +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 + license: ISC + purls: [] + size: 159003 + timestamp: 1725018903918 +- kind: pypi + name: certifi + version: 2024.8.30 + url: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl + sha256: 922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 + requires_python: '>=3.6' +- kind: pypi + name: cffi + version: 1.17.1 + url: https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 + requires_dist: + - pycparser + requires_python: '>=3.8' +- kind: pypi + name: click + version: 8.1.7 + url: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl + sha256: ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 + requires_dist: + - colorama ; platform_system == 'Windows' + - importlib-metadata ; python_full_version < '3.8' + requires_python: '>=3.7' +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 25170 + timestamp: 1666700778190 +- kind: pypi + name: cryptography + version: 43.0.3 + url: https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl + sha256: c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405 + requires_dist: + - cffi>=1.12 ; platform_python_implementation != 'PyPy' + - bcrypt>=3.1.5 ; extra == 'ssh' + - nox ; extra == 'nox' + - cryptography-vectors==43.0.3 ; extra == 'test' + - pytest>=6.2.0 ; extra == 'test' + - pytest-benchmark ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pretend ; extra == 'test' + - certifi ; extra == 'test' + - pytest-randomly ; extra == 'test-randomorder' + - sphinx>=5.3.0 ; extra == 'docs' + - sphinx-rtd-theme>=1.1.1 ; extra == 'docs' + - pyenchant>=1.6.11 ; extra == 'docstest' + - readme-renderer ; extra == 'docstest' + - sphinxcontrib-spelling>=4.0.1 ; extra == 'docstest' + - build ; extra == 'sdist' + - ruff ; extra == 'pep8test' + - mypy ; extra == 'pep8test' + - check-sdist ; extra == 'pep8test' + - click ; extra == 'pep8test' + requires_python: '>=3.7' +- kind: pypi + name: distlib + version: 0.3.9 + url: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl + sha256: 47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 20418 + timestamp: 1720869435725 +- kind: pypi + name: filelock + version: 3.16.1 + url: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl + sha256: 2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 + requires_dist: + - furo>=2024.8.6 ; extra == 'docs' + - sphinx-autodoc-typehints>=2.4.1 ; extra == 'docs' + - sphinx>=8.0.2 ; extra == 'docs' + - covdefaults>=2.3 ; extra == 'testing' + - coverage>=7.6.1 ; extra == 'testing' + - diff-cover>=9.2 ; extra == 'testing' + - pytest-asyncio>=0.24 ; extra == 'testing' + - pytest-cov>=5 ; extra == 'testing' + - pytest-mock>=3.14 ; extra == 'testing' + - pytest-timeout>=2.3.1 ; extra == 'testing' + - pytest>=8.3.3 ; extra == 'testing' + - virtualenv>=20.26.4 ; extra == 'testing' + - typing-extensions>=4.12.2 ; python_full_version < '3.11' and extra == 'typing' + requires_python: '>=3.8' +- kind: pypi + name: greenlet + version: 3.0.3 + url: https://files.pythonhosted.org/packages/bd/37/56b0da468a85e7704f3b2bc045015301bdf4be2184a44868c71f6dca6fe2/greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + sha256: fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: h11 + version: 0.14.0 + url: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl + sha256: e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 + requires_dist: + - typing-extensions ; python_full_version < '3.8' + requires_python: '>=3.7' +- kind: pypi + name: hatch + version: 1.13.0 + url: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl + sha256: bb1a18558a626279cae338b4d8a9d3ca4226d5e06d50de600608c57acd131b67 + requires_dist: + - click>=8.0.6 + - hatchling>=1.24.2 + - httpx>=0.22.0 + - hyperlink>=21.0.0 + - keyring>=23.5.0 + - packaging>=23.2 + - pexpect~=4.8 + - platformdirs>=2.5.0 + - rich>=11.2.0 + - shellingham>=1.4.0 + - tomli-w>=1.0 + - tomlkit>=0.11.1 + - userpath~=1.7 + - uv>=0.1.35 + - virtualenv>=20.26.1 + - zstandard<1 + requires_python: '>=3.8' +- kind: pypi + name: hatchling + version: 1.25.0 + url: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl + sha256: b47948e45d4d973034584dd4cb39c14b6a70227cf287ab7ec0ad7983408a882c + requires_dist: + - packaging>=23.2 + - pathspec>=0.10.1 + - pluggy>=1.0.0 + - tomli>=1.2.2 ; python_full_version < '3.11' + - trove-classifiers + requires_python: '>=3.8' +- kind: pypi + name: httpcore + version: 1.0.6 + url: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl + sha256: 27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f + requires_dist: + - certifi + - h11<0.15,>=0.13 + - anyio<5.0,>=4.0 ; extra == 'asyncio' + - h2<5,>=3 ; extra == 'http2' + - socksio==1.* ; extra == 'socks' + - trio<1.0,>=0.22.0 ; extra == 'trio' + requires_python: '>=3.8' +- kind: pypi + name: httpx + version: 0.27.2 + url: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl + sha256: 7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0 + requires_dist: + - anyio + - certifi + - httpcore==1.* + - idna + - sniffio + - brotli ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'brotli' + - click==8.* ; extra == 'cli' + - pygments==2.* ; extra == 'cli' + - rich<14,>=10 ; extra == 'cli' + - h2<5,>=3 ; extra == 'http2' + - socksio==1.* ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- kind: pypi + name: hyperlink + version: 21.0.0 + url: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl + sha256: e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4 + requires_dist: + - idna>=2.5 + - typing ; python_full_version < '3.5' + requires_python: '>=2.6,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: pypi + name: hypothesis + version: 6.115.3 + url: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl + sha256: d2770b0db08ad666fe6ff36027910039ab681084d13bcf9c057449c2e27099c4 + requires_dist: + - attrs>=22.2.0 + - sortedcontainers<3.0.0,>=2.1.0 + - exceptiongroup>=1.0.0 ; python_full_version < '3.11' + - black>=19.10b0 ; extra == 'all' + - click>=7.0 ; extra == 'all' + - crosshair-tool>=0.0.74 ; extra == 'all' + - django>=4.2 ; extra == 'all' + - dpcontracts>=0.4 ; extra == 'all' + - hypothesis-crosshair>=0.0.16 ; extra == 'all' + - lark>=0.10.1 ; extra == 'all' + - libcst>=0.3.16 ; extra == 'all' + - numpy>=1.19.3 ; extra == 'all' + - pandas>=1.1 ; extra == 'all' + - pytest>=4.6 ; extra == 'all' + - python-dateutil>=1.4 ; extra == 'all' + - pytz>=2014.1 ; extra == 'all' + - redis>=3.0.0 ; extra == 'all' + - rich>=9.0.0 ; extra == 'all' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'all') or (sys_platform == 'win32' and extra == 'all') + - click>=7.0 ; extra == 'cli' + - black>=19.10b0 ; extra == 'cli' + - rich>=9.0.0 ; extra == 'cli' + - libcst>=0.3.16 ; extra == 'codemods' + - hypothesis-crosshair>=0.0.16 ; extra == 'crosshair' + - crosshair-tool>=0.0.74 ; extra == 'crosshair' + - python-dateutil>=1.4 ; extra == 'dateutil' + - django>=4.2 ; extra == 'django' + - dpcontracts>=0.4 ; extra == 'dpcontracts' + - black>=19.10b0 ; extra == 'ghostwriter' + - lark>=0.10.1 ; extra == 'lark' + - numpy>=1.19.3 ; extra == 'numpy' + - pandas>=1.1 ; extra == 'pandas' + - pytest>=4.6 ; extra == 'pytest' + - pytz>=2014.1 ; extra == 'pytz' + - redis>=3.0.0 ; extra == 'redis' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'zoneinfo') or (sys_platform == 'win32' and extra == 'zoneinfo') + requires_python: '>=3.9' +- kind: pypi + name: idna + version: '3.10' + url: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + sha256: 946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 + requires_dist: + - ruff>=0.6.2 ; extra == 'all' + - mypy>=1.11.2 ; extra == 'all' + - pytest>=8.3.2 ; extra == 'all' + - flake8>=7.1.1 ; extra == 'all' + requires_python: '>=3.6' +- kind: pypi + name: importlib-resources + version: 6.4.5 + url: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl + sha256: ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717 + requires_dist: + - zipp>=3.1.0 ; python_full_version < '3.10' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest!=8.1.*,>=6 ; extra == 'test' + - zipp>=3.17 ; extra == 'test' + - jaraco-test>=5.4 ; extra == 'test' + - pytest-mypy ; extra == 'type' + requires_python: '>=3.8' +- kind: conda + name: iniconfig + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 + md5: f800d2da156d08e289b14e87e43c1ae5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=hash-mapping + size: 11101 + timestamp: 1673103208955 +- kind: pypi + name: itkwasm + version: 1.0b179 + url: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + sha256: 43558ccd082f3dc3c9b3b2379cdb197635b33620d41dbc6c1fa9186d03c22a7e + requires_dist: + - importlib-metadata ; python_full_version < '3.10' + - numpy + - platformdirs ; sys_platform != 'emscripten' + - typing-extensions + - wasmtime>=13.0.2 ; sys_platform != 'emscripten' + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-compare-images + version: 5.2.0 + url: https://files.pythonhosted.org/packages/52/05/8c42705a563e74fe42d2bb31fd7e0e1d887cbb43106f121d3b8e1c8a43f2/itkwasm_compare_images-5.2.0-py3-none-any.whl + sha256: a449e5a6a0868b446213e4dc266c4563e2d349f7dd89fc18cb8c4e7f1074dd0b + requires_dist: + - itkwasm-compare-images-emscripten>=1.0.1 ; sys_platform == 'emscripten' + - itkwasm-compare-images-wasi>=1.0.1 ; sys_platform != 'emscripten' + - itkwasm>=1.0b171 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-compare-images-wasi + version: 5.2.0 + url: https://files.pythonhosted.org/packages/a0/91/ab9c4ed1e095f218c7f17ccf691d1ebe0991250d0c55d64fa7ef5e3ce070/itkwasm_compare_images_wasi-5.2.0-py3-none-any.whl + sha256: 4959281f04b0b7da9a730f9883ef4dbe2f36e94c7837d05bdc7273fd43741ff3 + requires_dist: + - importlib-resources + - itkwasm>=1.0b171 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-compare-meshes + version: 0.4.0 + url: https://files.pythonhosted.org/packages/f3/d1/345595666c6b9539390aafb3bafcd5afae5088df73301b6490fd66a28c6e/itkwasm_compare_meshes-0.4.0-py3-none-any.whl + sha256: 883e1c799f82b7ebebb2f27571478e442e17293989ae0b5ccb5211b9de56d14f + requires_dist: + - itkwasm-compare-meshes-emscripten ; sys_platform == 'emscripten' + - itkwasm-compare-meshes-wasi ; sys_platform != 'emscripten' + - itkwasm>=1.0b171 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-compare-meshes-wasi + version: 0.4.0 + url: https://files.pythonhosted.org/packages/61/56/489eb0fb5c52527d7d245b596c1b76e5165d05e1d04ec787552963b6ac8a/itkwasm_compare_meshes_wasi-0.4.0-py3-none-any.whl + sha256: dfa140a303dce2eb3748b43b9b419bbf253097f4678325c56b56d63444ba8aa5 + requires_dist: + - importlib-resources + - itkwasm>=1.0b171 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-compress-stringify + version: 3.3.0 + path: python/itkwasm-compress-stringify + sha256: c02f3169d3c0706165b2a36c79f478ae91e47c922973f1fc77793c5fb555ea9b + requires_dist: + - itkwasm-compress-stringify-emscripten ; sys_platform == 'emscripten' + - itkwasm-compress-stringify-wasi ; sys_platform != 'emscripten' + - itkwasm>=1.0b171 + requires_python: '>=3.8' + editable: true +- kind: pypi + name: itkwasm-compress-stringify-wasi + version: 3.3.0 + path: python/itkwasm-compress-stringify-wasi + sha256: 49d016bd896fc324c6ef317200ca34408ee972d2dacc395194c1bd6ff1d84885 + requires_dist: + - importlib-resources + - itkwasm>=1.0b171 + requires_python: '>=3.8' + editable: true +- kind: pypi + name: itkwasm-image-io + version: 1.3.0 + url: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + sha256: 121ef7e942f1f6c25ef428a0a39944a0a9eb9bce226d6ee7466df1e2d8fc9a56 + requires_dist: + - itkwasm-image-io-emscripten ; sys_platform == 'emscripten' + - itkwasm-image-io-wasi ; sys_platform != 'emscripten' + - itkwasm>=1.0b145 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-image-io-wasi + version: 1.3.0 + url: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + sha256: 13fe5cad7942dc9fc94ece5711d5b342b5cb90dc93f764558de195674a2b183b + requires_dist: + - importlib-resources + - itkwasm>=1.0b131 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-mesh-io + version: 1.4.1 + url: https://files.pythonhosted.org/packages/65/6e/6854a090da846f5a23d2d8276a3c0bc9f2e53a1eb8729c21f84401ccb09c/itkwasm_mesh_io-1.4.1-py3-none-any.whl + sha256: 02c894009f368ba665cfc624fbdf2255cf4880bcf7b7ba958c0fb3b208b22e22 + requires_dist: + - itkwasm-mesh-io-emscripten ; sys_platform == 'emscripten' + - itkwasm-mesh-io-wasi ; sys_platform != 'emscripten' + - itkwasm>=1.0b179 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-mesh-io-wasi + version: 1.4.1 + url: https://files.pythonhosted.org/packages/c6/23/6f6798c7533bb6d0a1ec653b58bb0114d17514b53db6240588ff52c58830/itkwasm_mesh_io_wasi-1.4.1-py3-none-any.whl + sha256: 60cc17cb7525b56e697e24a0483614de4a4639af0791f5ea9ade6b61a443df8e + requires_dist: + - importlib-resources + - itkwasm>=1.0b145 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-mesh-to-poly-data + version: 1.1.0 + url: https://files.pythonhosted.org/packages/92/41/5d58fd387a44af577ca708df6976ccc60da3a0357baae64b9e997b2d4661/itkwasm_mesh_to_poly_data-1.1.0-py3-none-any.whl + sha256: 0e0a15fb9a5462e9b9bb2813ccf7df1c83988a54d18fb6ae194d2e3a0b131e63 + requires_dist: + - itkwasm-mesh-to-poly-data-emscripten ; sys_platform == 'emscripten' + - itkwasm-mesh-to-poly-data-wasi ; sys_platform != 'emscripten' + - itkwasm>=1.0b145 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-mesh-to-poly-data-wasi + version: 1.1.0 + url: https://files.pythonhosted.org/packages/5e/12/c3803828cbaa733fecfbbdd495f6c0aa695e5e12d83ef80c20bfc1c0dfcf/itkwasm_mesh_to_poly_data_wasi-1.1.0-py3-none-any.whl + sha256: 8c429da75be6fb5c5bd85885cdfa78dc6e4aab91ed17b4ee20106aba804636e6 + requires_dist: + - importlib-resources + - itkwasm>=1.0b145 + requires_python: '>=3.8' +- kind: pypi + name: jaraco-classes + version: 3.4.0 + url: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + sha256: f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 + requires_dist: + - more-itertools + - sphinx>=3.5 ; extra == 'docs' + - jaraco-packaging>=9.3 ; extra == 'docs' + - rst-linker>=1.9 ; extra == 'docs' + - furo ; extra == 'docs' + - sphinx-lint ; extra == 'docs' + - jaraco-tidelift>=1.4 ; extra == 'docs' + - pytest>=6 ; extra == 'testing' + - pytest-checkdocs>=2.4 ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - pytest-enabler>=2.2 ; extra == 'testing' + - pytest-ruff>=0.2.1 ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: jaraco-context + version: 6.0.1 + url: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + sha256: f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4 + requires_dist: + - backports-tarfile ; python_full_version < '3.12' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest!=8.1.*,>=6 ; extra == 'test' + - pytest-checkdocs>=2.4 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mypy ; extra == 'test' + - pytest-enabler>=2.2 ; extra == 'test' + - portend ; extra == 'test' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'test' + requires_python: '>=3.8' +- kind: pypi + name: jaraco-functools + version: 4.1.0 + url: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl + sha256: ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649 + requires_dist: + - more-itertools + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest!=8.1.*,>=6 ; extra == 'test' + - jaraco-classes ; extra == 'test' + - pytest-mypy ; extra == 'type' + requires_python: '>=3.8' +- kind: pypi + name: jeepney + version: 0.8.0 + url: https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl + sha256: c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755 + requires_dist: + - pytest ; extra == 'test' + - pytest-trio ; extra == 'test' + - pytest-asyncio>=0.17 ; extra == 'test' + - testpath ; extra == 'test' + - trio ; extra == 'test' + - async-timeout ; extra == 'test' + - trio ; extra == 'trio' + - async-generator ; python_full_version == '3.6.*' and extra == 'trio' + requires_python: '>=3.7' +- kind: pypi + name: keyring + version: 25.4.1 + url: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl + sha256: 5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf + requires_dist: + - jaraco-classes + - jaraco-functools + - jaraco-context + - importlib-metadata>=4.11.4 ; python_full_version < '3.12' + - importlib-resources ; python_full_version < '3.9' + - secretstorage>=3.2 ; sys_platform == 'linux' + - jeepney>=0.4.2 ; sys_platform == 'linux' + - pywin32-ctypes>=0.2.0 ; sys_platform == 'win32' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - shtab>=1.1.0 ; extra == 'completion' + - pytest-cov ; extra == 'cover' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest!=8.1.*,>=6 ; extra == 'test' + - pyfakefs ; extra == 'test' + - pytest-mypy ; extra == 'type' + - pygobject-stubs ; extra == 'type' + - shtab ; extra == 'type' + - types-pywin32 ; extra == 'type' + requires_python: '>=3.8' +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda + sha256: 0c21387f9a411e3d1f7f2969026bacfece133c8f1e72faea9cde29c0c19e1f3a + md5: 83e1364586ceb8d0739fbc85b5c95837 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 669616 + timestamp: 1727304687962 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + sha256: 4bb47bb2cd09898737a5211e2992d63c555d63715a07ba56eae0aff31fb89c22 + md5: 59f4c43bb1b5ef1c71946ff2cbf59524 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 73616 + timestamp: 1725568742634 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libsqlite + version: 3.46.1 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda + sha256: 9851c049abafed3ee329d6c7c2033407e2fc269d33a75c071110ab52300002b0 + md5: 36f79405ab16bf271edb55b213836dac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 865214 + timestamp: 1725353659783 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 +- kind: pypi + name: markdown-it-py + version: 3.0.0 + url: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl + sha256: 355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 + requires_dist: + - mdurl~=0.1 + - psutil ; extra == 'benchmarking' + - pytest ; extra == 'benchmarking' + - pytest-benchmark ; extra == 'benchmarking' + - pre-commit~=3.0 ; extra == 'code-style' + - commonmark~=0.9 ; extra == 'compare' + - markdown~=3.4 ; extra == 'compare' + - mistletoe~=1.0 ; extra == 'compare' + - mistune~=2.0 ; extra == 'compare' + - panflute~=2.3 ; extra == 'compare' + - linkify-it-py>=1,<3 ; extra == 'linkify' + - mdit-py-plugins ; extra == 'plugins' + - gprof2dot ; extra == 'profiling' + - mdit-py-plugins ; extra == 'rtd' + - myst-parser ; extra == 'rtd' + - pyyaml ; extra == 'rtd' + - sphinx ; extra == 'rtd' + - sphinx-copybutton ; extra == 'rtd' + - sphinx-design ; extra == 'rtd' + - sphinx-book-theme ; extra == 'rtd' + - jupyter-sphinx ; extra == 'rtd' + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-regressions ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: mdurl + version: 0.1.2 + url: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 + requires_python: '>=3.7' +- kind: pypi + name: more-itertools + version: 10.5.0 + url: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl + sha256: 037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef + requires_python: '>=3.8' +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 889086 + timestamp: 1724658547447 +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df + requires_python: '>=3.10' +- kind: conda + name: openssl + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + sha256: cee91036686419f6dd6086902acf7142b4916e1c4ba042e9ca23e151da012b6d + md5: 4d638782050ab6faa27275bed57e9b4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2891789 + timestamp: 1725410790053 +- kind: pypi + name: outcome + version: 1.3.0.post0 + url: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + sha256: e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b + requires_dist: + - attrs>=19.2.0 + requires_python: '>=3.7' +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 50290 + timestamp: 1718189540074 +- kind: pypi + name: pathspec + version: 0.12.1 + url: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + sha256: a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 + requires_python: '>=3.8' +- kind: pypi + name: pexpect + version: 4.9.0 + url: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + sha256: 7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 + requires_dist: + - ptyprocess>=0.5 +- kind: conda + name: pip + version: '24.2' + build: pyh8b19718_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + sha256: d820e5358bcb117fa6286e55d4550c60b0332443df62121df839eab2d11c890b + md5: 6c78fbb8ddfd64bcb55b5cbafd2d2c43 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=hash-mapping + size: 1237976 + timestamp: 1724954490262 +- kind: pypi + name: platformdirs + version: 4.3.6 + url: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl + sha256: 73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb + requires_dist: + - furo>=2024.8.6 ; extra == 'docs' + - proselint>=0.14 ; extra == 'docs' + - sphinx-autodoc-typehints>=2.4 ; extra == 'docs' + - sphinx>=8.0.2 ; extra == 'docs' + - appdirs==1.4.4 ; extra == 'test' + - covdefaults>=2.3 ; extra == 'test' + - pytest-cov>=5 ; extra == 'test' + - pytest-mock>=3.14 ; extra == 'test' + - pytest>=8.3.2 ; extra == 'test' + - mypy>=1.11.2 ; extra == 'type' + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.47.0 + url: https://files.pythonhosted.org/packages/80/a6/c5152c817db664d75c439c2bd99d51f906a31c1df4a04e673ef51008b12f/playwright-1.47.0-py3-none-manylinux1_x86_64.whl + sha256: a1935672531963e4b2a321de5aa59b982fb92463ee6e1032dd7326378e462955 + requires_dist: + - greenlet==3.0.3 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 23815 + timestamp: 1713667175451 +- kind: pypi + name: ptyprocess + version: 0.7.0 + url: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + sha256: 4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 +- kind: pypi + name: pycparser + version: '2.22' + url: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl + sha256: c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc + requires_python: '>=3.8' +- kind: pypi + name: pyee + version: 12.0.0 + url: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + sha256: 7b14b74320600049ccc7d0e0b1becd3b4bd0a03c745758225e31a59f4095c990 + requires_dist: + - typing-extensions + - build ; extra == 'dev' + - flake8 ; extra == 'dev' + - flake8-black ; extra == 'dev' + - pytest ; extra == 'dev' + - black ; extra == 'dev' + - isort ; extra == 'dev' + - jupyter-console ; extra == 'dev' + - mkdocs ; extra == 'dev' + - mkdocs-include-markdown-plugin ; extra == 'dev' + - mkdocstrings[python] ; extra == 'dev' + - sphinx ; extra == 'dev' + - toml ; extra == 'dev' + - tox ; extra == 'dev' + - trio ; extra == 'dev' + - twine ; extra == 'dev' + - twisted ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - trio ; python_full_version >= '3.7' and extra == 'dev' + - trio-typing ; python_full_version >= '3.7' and extra == 'dev' + - pytest-asyncio ; python_full_version >= '3.4' and extra == 'dev' + - pytest-trio ; python_full_version >= '3.7' and extra == 'dev' + requires_python: '>=3.8' +- kind: pypi + name: pygments + version: 2.18.0 + url: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + sha256: b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a + requires_dist: + - colorama>=0.4.6 ; extra == 'windows-terminal' + requires_python: '>=3.8' +- kind: pypi + name: pyodide-py + version: 0.26.3 + url: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + sha256: b63b6847c8906aa8f3c17df362135d0407aabf1d4b023557aed721d822e347a8 + requires_python: '>=3.12' +- kind: pypi + name: pysocks + version: 1.7.1 + url: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + sha256: 2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: conda + name: pytest + version: 8.3.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + sha256: e99376d0068455712109d233f5790458ff861aeceb458bfda74e353338e4d815 + md5: c03d61f31f38fdb9facf70c29958bf7a + depends: + - colorama + - exceptiongroup >=1.0.0rc8 + - iniconfig + - packaging + - pluggy <2,>=1.5 + - python >=3.8 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 258293 + timestamp: 1725977334143 +- kind: pypi + name: pytest-asyncio + version: 0.24.0 + url: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + sha256: a811296ed596b69bf0b6f3dc40f83bcaf341b155a269052d82efa2b25ac7037b + requires_dist: + - pytest<9,>=8.2 + - sphinx>=5.3 ; extra == 'docs' + - sphinx-rtd-theme>=1.0 ; extra == 'docs' + - coverage>=6.2 ; extra == 'testing' + - hypothesis>=5.7.1 ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: pytest-pyodide + version: 0.58.3 + url: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + sha256: 6425d8ac868090da70337bdef33bd8a082a353a4ecdb89f5371bcf58ac7390e7 + requires_dist: + - hypothesis + - pexpect + - playwright + - pytest + - pytest-asyncio + - selenium + - tblib>=3 + - build ; extra == 'test' + - pytest-cov ; extra == 'test' + - requests ; extra == 'test' + requires_python: '>=3.10' +- kind: conda + name: python + version: 3.12.7 + build: hc5c86c4_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d + md5: 0515111a9cdf69f83278f7c197db9807 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31574780 + timestamp: 1728059777603 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 281456 + timestamp: 1679532220005 +- kind: pypi + name: rich + version: 13.9.2 + url: https://files.pythonhosted.org/packages/67/91/5474b84e505a6ccc295b2d322d90ff6aa0746745717839ee0c5fb4fdcceb/rich-13.9.2-py3-none-any.whl + sha256: 8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1 + requires_dist: + - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' + - markdown-it-py>=2.2.0 + - pygments>=2.13.0,<3.0.0 + - typing-extensions>=4.0.0,<5.0 ; python_full_version < '3.11' + requires_python: '>=3.8.0' +- kind: pypi + name: secretstorage + version: 3.3.3 + url: https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl + sha256: f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99 + requires_dist: + - cryptography>=2.0 + - jeepney>=0.6 + requires_python: '>=3.6' +- kind: pypi + name: selenium + version: 4.25.0 + url: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + sha256: 3798d2d12b4a570bc5790163ba57fef10b2afee958bf1d80f2a3cf07c4141f33 + requires_dist: + - urllib3[socks]>=1.26,<3 + - trio~=0.17 + - trio-websocket~=0.9 + - certifi>=2021.10.8 + - typing-extensions~=4.9 + - websocket-client~=1.8 + requires_python: '>=3.8' +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 777462 + timestamp: 1727249510532 +- kind: pypi + name: shellingham + version: 1.5.4 + url: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + sha256: 7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 + requires_python: '>=3.7' +- kind: pypi + name: sniffio + version: 1.3.1 + url: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + sha256: 2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 + requires_python: '>=3.7' +- kind: pypi + name: sortedcontainers + version: 2.4.0 + url: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- kind: pypi + name: tblib + version: 3.0.0 + url: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + sha256: 80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129 + requires_python: '>=3.8' +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tomli + version: 2.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 18203 + timestamp: 1727974767524 +- kind: pypi + name: tomli-w + version: 1.1.0 + url: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl + sha256: 1403179c78193e3184bfaade390ddbd071cba48a32a2e62ba11aae47490c63f7 + requires_python: '>=3.9' +- kind: pypi + name: tomlkit + version: 0.13.2 + url: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl + sha256: 7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde + requires_python: '>=3.8' +- kind: pypi + name: trio + version: 0.27.0 + url: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + sha256: 68eabbcf8f457d925df62da780eff15ff5dc68fd6b367e2dde59f7aaf2a0b884 + requires_dist: + - attrs>=23.2.0 + - sortedcontainers + - idna + - outcome + - sniffio>=1.3.0 + - cffi>=1.14 ; implementation_name != 'pypy' and os_name == 'nt' + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.8' +- kind: pypi + name: trio-websocket + version: 0.11.1 + url: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + sha256: 520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638 + requires_dist: + - trio>=0.11 + - wsproto>=0.14 + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.7' +- kind: pypi + name: trove-classifiers + version: 2024.10.16 + url: https://files.pythonhosted.org/packages/75/a0/dd773135ca0f7227e8257555fd2f7a0c88672bfd111a400361f10c09face/trove_classifiers-2024.10.16-py3-none-any.whl + sha256: 9b02a4cb49bd2e85c13e728ee461f4f332d6334736b18d61254c964643687144 +- kind: pypi + name: typing-extensions + version: 4.12.2 + url: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl + sha256: 04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d + requires_python: '>=3.8' +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + purls: [] + size: 122354 + timestamp: 1728047496079 +- kind: pypi + name: urllib3 + version: 2.2.3 + url: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + sha256: ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2<5,>=4 ; extra == 'h2' + - pysocks!=1.5.7,<2.0,>=1.5.6 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- kind: pypi + name: userpath + version: 1.9.2 + url: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl + sha256: 2cbf01a23d655a1ff8fc166dfb78da1b641d1ceabf0fe5f970767d380b14e89d + requires_dist: + - click + requires_python: '>=3.7' +- kind: pypi + name: uv + version: 0.4.24 + url: https://files.pythonhosted.org/packages/af/2d/cab3cc5529bb05ea7f4e54e308fa889ab626df45c0e2da5ab546e17ad876/uv-0.4.24-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 2a3ea6780e3451c81ce1635656abcd8a47e43f1b0f02542c433b4b6dd459df8e + requires_python: '>=3.8' +- kind: pypi + name: virtualenv + version: 20.27.0 + url: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl + sha256: 44a72c29cceb0ee08f300b314848c86e57bf8d1f13107a5e671fb9274138d655 + requires_dist: + - distlib<1,>=0.3.7 + - filelock<4,>=3.12.2 + - importlib-metadata>=6.6 ; python_full_version < '3.8' + - platformdirs<5,>=3.9.1 + - furo>=2023.7.26 ; extra == 'docs' + - proselint>=0.13 ; extra == 'docs' + - sphinx!=7.3,>=7.1.2 ; extra == 'docs' + - sphinx-argparse>=0.4 ; extra == 'docs' + - sphinxcontrib-towncrier>=0.2.1a0 ; extra == 'docs' + - towncrier>=23.6 ; extra == 'docs' + - covdefaults>=2.3 ; extra == 'test' + - coverage-enable-subprocess>=1 ; extra == 'test' + - coverage>=7.2.7 ; extra == 'test' + - flaky>=3.7 ; extra == 'test' + - packaging>=23.1 ; extra == 'test' + - pytest-env>=0.8.2 ; extra == 'test' + - pytest-freezer>=0.4.8 ; (python_full_version >= '3.13' and platform_python_implementation == 'CPython' and sys_platform == 'win32' and extra == 'test') or (platform_python_implementation == 'PyPy' and extra == 'test') + - pytest-mock>=3.11.1 ; extra == 'test' + - pytest-randomly>=3.12 ; extra == 'test' + - pytest-timeout>=2.1 ; extra == 'test' + - pytest>=7.4 ; extra == 'test' + - setuptools>=68 ; extra == 'test' + - time-machine>=2.10 ; platform_python_implementation == 'CPython' and extra == 'test' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + sha256: b4364e14d44e3b7afe6a40bf608e9d0d2c40b09dece441d20f4f6e31906b729c + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: websocket-client + version: 1.8.0 + url: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + sha256: 17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526 + requires_dist: + - sphinx>=6.0 ; extra == 'docs' + - sphinx-rtd-theme>=1.1.0 ; extra == 'docs' + - myst-parser>=2.0.0 ; extra == 'docs' + - python-socks ; extra == 'optional' + - wsaccel ; extra == 'optional' + - websockets ; extra == 'test' + requires_python: '>=3.8' +- kind: conda + name: wheel + version: 0.44.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping + size: 58585 + timestamp: 1722797131787 +- kind: pypi + name: wsproto + version: 1.2.0 + url: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + sha256: b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736 + requires_dist: + - h11<1,>=0.9.0 + requires_python: '>=3.7.0' +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 418368 + timestamp: 1660346797927 +- kind: pypi + name: zstandard + version: 0.23.0 + url: https://files.pythonhosted.org/packages/fc/79/edeb217c57fe1bf16d890aa91a1c2c96b28c07b46afed54a5dcf310c3f6f/zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373 + requires_dist: + - cffi>=1.11 ; platform_python_implementation == 'PyPy' + - cffi>=1.11 ; extra == 'cffi' + requires_python: '>=3.8' diff --git a/packages/compress-stringify/pixi.toml b/packages/compress-stringify/pixi.toml new file mode 100644 index 000000000..d04f3708a --- /dev/null +++ b/packages/compress-stringify/pixi.toml @@ -0,0 +1,70 @@ +[project] +authors = ["Matt McCormick "] +channels = ["conda-forge"] +description = "Zstandard compression and decompression and base64 encoding and decoding in WebAssembly." +name = "compress-stringify" +platforms = ["linux-64"] +version = "0.1.0" + +[tasks] + +[dependencies] +python = "3.12.*" + +[feature.python.dependencies] +pytest = ">=8.3.3,<9" +pip = ">=24.2,<25" + +[feature.python.pypi-dependencies] +hatch = ">=1.13.0, <2" +pyodide-py = ">=0.26.3, <0.27" +itkwasm-compress-stringify-wasi = { path = "python/itkwasm-compress-stringify-wasi", editable = true } +itkwasm-compress-stringify = { path = "python/itkwasm-compress-stringify", editable = true } +pytest-pyodide = ">=0.58.3, <0.59" +itkwasm-compare-images = ">=5.2.0, <6" +itkwasm-image-io = ">=1.3.0, <2" +itkwasm-compare-meshes = ">=0.4.0, <0.5" +itkwasm-mesh-io = ">=1.4.1, <2" +itkwasm-mesh-to-poly-data = ">=1.1.0, <2" + +[feature.python.tasks.test-wasi] +cmd = "pytest" +cwd = "python/itkwasm-compress-stringify-wasi" +description = "Run tests for itkwasm-compress-stringify-wasi" + +[feature.python.tasks.download-pyodide] +cmd = "curl -L https://github.com/pyodide/pyodide/releases/download/0.26.3/pyodide-0.26.3.tar.bz2 -o pyodide.tar.bz2 && tar xjf pyodide.tar.bz2 && rm pyodide.tar.bz2" +outputs = ["pyodide"] +description = "Download Pyodide" + +[feature.python.tasks.test-emscripten] +cmd = "mkdir -p dist/pyodide && cp -r ../../pyodide dist/ && hatch build -t wheel ./dist/pyodide/ && pytest --dist-dir=./dist/pyodide --rt=chrome" +cwd = "python/itkwasm-compress-stringify-emscripten" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-compress-stringify-emscripten" + +[feature.python.tasks.serve-emscripten] +cmd = "mkdir -p dist/pyodide && cp -r ../../pyodide dist/ && hatch build -t wheel ./dist/pyodide/ && echo \"\nVisit http://localhost:8877/console.html\n\" && python -m http.server --directory=./dist/pyodide 8877" +cwd = "python/itkwasm-compress-stringify-emscripten" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-compress-stringify-emscripten for development" + +[feature.python.tasks.test-dispatch] +cmd = "mkdir -p dist/pyodide && cp -r ../../pyodide dist/ && hatch build -t wheel ./dist/pyodide/ && pytest --dist-dir=./dist/pyodide --rt=chrome" +cwd = "python/itkwasm-compress-stringify" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-compress-stringify" + +[feature.python.tasks.serve-dispatch] +cmd = "mkdir -p dist/pyodide && cp -r ../../pyodide dist/ && hatch build -t wheel ./dist/pyodide/ && echo \"\nVisit http://localhost:8877/console.html\n\" && python -m http.server --directory=./dist/pyodide 8877" +cwd = "python/itkwasm-compress-stringify" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-compress-stringify for development" + +[feature.python.tasks.test-python] +cmd = "echo 'Testing all Python packages'" +depends-on = ["test-wasi", "test-emscripten", "test-dispatch"] +description = "Run tests for all Python packages" + +[environments] +python = ["python"] diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify/test/test_compress_stringify_emscripten.py b/packages/compress-stringify/python/itkwasm-compress-stringify/test/test_compress_stringify_emscripten.py index 29b9130d3..dcafb72e2 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify/test/test_compress_stringify_emscripten.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify/test/test_compress_stringify_emscripten.py @@ -38,7 +38,7 @@ async def test_we_can_stringify_during_compression(selenium, package_wheel): data = bytes([222, 173, 190, 239]) compressed_data = await compress_stringify_async(data, compression_level=8, stringify=True) decoded = compressed_data.decode() - assert decoded.lower() == 'data:base64,kluv/saeiqaa3q2+7w==' + assert decoded.lower() == 'data:application/zstd;base64,kluv/saeiqaa3q2+7w==' decompressed_data = await parse_string_decompress_async(compressed_data, parse_string=True) assert decompressed_data[0] == 222 diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify/test/test_compress_stringify_wasi.py b/packages/compress-stringify/python/itkwasm-compress-stringify/test/test_compress_stringify_wasi.py index 0b0e7f7d8..50d2f3e0f 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify/test/test_compress_stringify_wasi.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify/test/test_compress_stringify_wasi.py @@ -13,7 +13,7 @@ def test_decompress_returns_what_was_compressed(): def test_we_can_stringify_during_compression(): data = bytes([222, 173, 190, 239]) compressed_data = compress_stringify(data, compression_level=8, stringify=True) - assert compressed_data.decode() == 'data:application/zstd,KLUv/SAEIQAA3q2+7w==' + assert compressed_data.decode() == 'data:application/zstd;base64,KLUv/SAEIQAA3q2+7w==' decompressed_data = parse_string_decompress(compressed_data, parse_string=True) assert decompressed_data[0] == 222 From 3d6df1e4abcec3dbf1d81e26c8e518cc47fe7013 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Tue, 22 Oct 2024 16:19:11 -0400 Subject: [PATCH 02/39] build(compress-stringify): test python with pixi --- packages/compress-stringify/package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/compress-stringify/package.json b/packages/compress-stringify/package.json index 199ed881a..fd8ca3304 100644 --- a/packages/compress-stringify/package.json +++ b/packages/compress-stringify/package.json @@ -33,10 +33,10 @@ "test": "pnpm test:data:download && pnpm build:gen:python && pnpm test:python", "test:data:download": "dam download test/data test/data.tar.gz bafkreiha6oye3fd5cxfadnua5r2jlkaco2xuyeek454d2ihiffsx7rauqe https://placeholder", "test:data:pack": "dam pack test/data test/data.tar.gz", - "test:python:wasi": "itk-wasm pnpm-script test:python:wasi", - "test:python:emscripten": "itk-wasm pnpm-script test:python:emscripten", - "test:python:dispatch": "itk-wasm pnpm-script test:python:emscripten", - "test:python": "itk-wasm pnpm-script test:python", + "test:python:wasi": "pixi run test-wasi", + "test:python:emscripten": "pixi run test-emscripten", + "test:python:dispatch": "pixi run test-dispatch", + "test:python": "pixi run test-python", "test:wasi": "itk-wasm pnpm-script test:wasi" }, "license": "Apache-2.0", From 3639b4b47ed213881645c8e1a31eb4880591eafe Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Tue, 22 Oct 2024 16:22:03 -0400 Subject: [PATCH 03/39] ci(python-wasm): add setup-pixi step --- .github/workflows/python-wasm.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/python-wasm.yml b/.github/workflows/python-wasm.yml index a060eb0bc..febeeb431 100644 --- a/.github/workflows/python-wasm.yml +++ b/.github/workflows/python-wasm.yml @@ -31,6 +31,8 @@ jobs: - name: Checkout uses: actions/checkout@v4 + - uses: prefix-dev/setup-pixi@v0.8.1 + - name: Set up Python ${{ env.python-version }} uses: actions/setup-python@v5 with: From 7cd34c5f49571ead3eed5ac7c42a31b9ca7f9987 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Tue, 22 Oct 2024 16:49:19 -0400 Subject: [PATCH 04/39] chore(pnpm): update lockfile --- pnpm-lock.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 78baffb42..5fe184a8e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -264,9 +264,6 @@ importers: '@itk-wasm/mesh-io-build': specifier: workspace:^ version: link:../mesh-io - '@thewtex/setup-micromamba': - specifier: ^1.9.7 - version: 1.9.7 itk-wasm: specifier: workspace:^ version: link:../core/typescript/itk-wasm From 3842627490078b1475f12e44b8ce2fbbc64226c8 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Tue, 22 Oct 2024 17:23:51 -0400 Subject: [PATCH 05/39] build(pnpm-script): run without existing environment.yml --- packages/core/typescript/itk-wasm/src/cli/pnpm-script.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/typescript/itk-wasm/src/cli/pnpm-script.js b/packages/core/typescript/itk-wasm/src/cli/pnpm-script.js index 8d9ad0b08..d7791c746 100644 --- a/packages/core/typescript/itk-wasm/src/cli/pnpm-script.js +++ b/packages/core/typescript/itk-wasm/src/cli/pnpm-script.js @@ -60,12 +60,12 @@ async function pnpmScript(name, extraArgs, options) { ) const micromambaRootPath = path.resolve('micromamba') const environmentFile = path.resolve('environment.yml') - const environmentFileContents = fs.readFileSync(environmentFile, 'utf8') - const environmentName = environmentFileContents + const environmentFileContents = fs.existsSync(environmentFile) ? fs.readFileSync(environmentFile, 'utf8') : null + const environmentName = fs.existsSync(environmentFile) ? environmentFileContents .split('\n') .filter((l) => l.includes('name:'))[0] .split(':')[1] - .trim() + .trim() : null const pnpmRootCommand = ['root'] const pnpmRootProcess = spawnSync('pnpm', pnpmRootCommand, { From 4e30ba3f5c128c8e0509b27772ce0b2c0e08a212 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Tue, 22 Oct 2024 17:30:00 -0400 Subject: [PATCH 06/39] build(compress-stringify): build:gen:python without micromamba This calls build:micromamba and build:python:wasi. The latter only performs an editable install for wasi, which we no longer need with pixi. --- packages/compress-stringify/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compress-stringify/package.json b/packages/compress-stringify/package.json index fd8ca3304..941e4735f 100644 --- a/packages/compress-stringify/package.json +++ b/packages/compress-stringify/package.json @@ -27,7 +27,7 @@ "bindgen:typescript": "itk-wasm pnpm-script bindgen:typescript", "bindgen:python": "itk-wasm pnpm-script bindgen:python", "build:gen:typescript": "itk-wasm pnpm-script build:gen:typescript", - "build:gen:python": "itk-wasm pnpm-script build:gen:python", + "build:gen:python": "pnpm build:wasi && pnpm bindgen:python", "build:python:versionSync": "itk-wasm pnpm-script build:python:versionSync", "publish:python": "itk-wasm pnpm-script publish:python", "test": "pnpm test:data:download && pnpm build:gen:python && pnpm test:python", From 4043ef5aa05c857179689e2f38ee5942316d286b Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Tue, 22 Oct 2024 17:48:44 -0400 Subject: [PATCH 07/39] build(compress-stringify): no build:python:wasi required with pixi --- packages/compress-stringify/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compress-stringify/package.json b/packages/compress-stringify/package.json index 941e4735f..0f4653c76 100644 --- a/packages/compress-stringify/package.json +++ b/packages/compress-stringify/package.json @@ -23,7 +23,7 @@ "build:emscripten:debug": "itk-wasm pnpm-script build:emscripten:debug", "build:wasi": "itk-wasm pnpm-script build:wasi", "build:wasi:debug": "itk-wasm pnpm-script build:wasi:debug", - "build:python:wasi": "itk-wasm pnpm-script build:python:wasi", + "build:python:wasi": "echo 'No build:python:wasi script required with pixi'", "bindgen:typescript": "itk-wasm pnpm-script bindgen:typescript", "bindgen:python": "itk-wasm pnpm-script bindgen:python", "build:gen:typescript": "itk-wasm pnpm-script build:gen:typescript", From 4bc5734194d5a72690d92f844c86eccc87f8f555 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Tue, 22 Oct 2024 17:49:16 -0400 Subject: [PATCH 08/39] build(compress-stringify): add pnpm to pixi --- packages/compress-stringify/pixi.lock | 253 ++++++++++++++++++++++++++ packages/compress-stringify/pixi.toml | 1 + 2 files changed, 254 insertions(+) diff --git a/packages/compress-stringify/pixi.lock b/packages/compress-stringify/pixi.lock index e68b55e9b..c8961de8b 100644 --- a/packages/compress-stringify/pixi.lock +++ b/packages/compress-stringify/pixi.lock @@ -9,6 +9,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 @@ -17,16 +18,22 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.1-h6417eb3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda python: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -40,6 +47,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda @@ -49,14 +57,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.1-h6417eb3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda @@ -66,6 +79,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl @@ -523,6 +537,39 @@ packages: - redis>=3.0.0 ; extra == 'redis' - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'zoneinfo') or (sys_platform == 'win32' and extra == 'zoneinfo') requires_python: '>=3.9' +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 12129203 + timestamp: 1720853576813 +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12129203 + timestamp: 1720853576813 - kind: pypi name: idna version: '3.10' @@ -945,6 +992,68 @@ packages: purls: [] size: 865214 timestamp: 1725353659783 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54105 + timestamp: 1729027780628 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54105 + timestamp: 1729027780628 - kind: conda name: libuuid version: 2.38.1 @@ -960,6 +1069,37 @@ packages: purls: [] size: 33601 timestamp: 1680112270483 +- kind: conda + name: libuv + version: 1.49.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 + md5: 070e3c9ddab77e38799d5c30b109c633 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 884647 + timestamp: 1729322566955 +- kind: conda + name: libuv + version: 1.49.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 + md5: 070e3c9ddab77e38799d5c30b109c633 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 884647 + timestamp: 1729322566955 - kind: conda name: libxcrypt version: 4.4.36 @@ -1054,6 +1194,49 @@ packages: purls: [] size: 889086 timestamp: 1724658547447 +- kind: conda + name: nodejs + version: 22.9.0 + build: hf235a45_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 + md5: 40255c9ffb722d614b02ca7aaee6abcb + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 21198038 + timestamp: 1726661026112 +- kind: conda + name: nodejs + version: 22.9.0 + build: hf235a45_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 + md5: 40255c9ffb722d614b02ca7aaee6abcb + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21198038 + timestamp: 1726661026112 - kind: pypi name: numpy version: 2.1.2 @@ -1178,6 +1361,41 @@ packages: - pkg:pypi/pluggy?source=hash-mapping size: 23815 timestamp: 1713667175451 +- kind: conda + name: pnpm + version: 9.12.1 + build: h6417eb3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.1-h6417eb3_0.conda + sha256: df09af5bdb6a0647622c1b279150a47ffe334ce7699846ea7c8d3bf6eac628de + md5: 239997028f3c4f9f8d3e147203bab5a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + size: 3432886 + timestamp: 1728326068924 +- kind: conda + name: pnpm + version: 9.12.1 + build: h6417eb3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.1-h6417eb3_0.conda + sha256: df09af5bdb6a0647622c1b279150a47ffe334ce7699846ea7c8d3bf6eac628de + md5: 239997028f3c4f9f8d3e147203bab5a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3432886 + timestamp: 1728326068924 - kind: pypi name: ptyprocess version: 0.7.0 @@ -1629,6 +1847,41 @@ packages: purls: [] size: 418368 timestamp: 1660346797927 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + size: 92286 + timestamp: 1727963153079 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + purls: [] + size: 92286 + timestamp: 1727963153079 - kind: pypi name: zstandard version: 0.23.0 diff --git a/packages/compress-stringify/pixi.toml b/packages/compress-stringify/pixi.toml index d04f3708a..42781f835 100644 --- a/packages/compress-stringify/pixi.toml +++ b/packages/compress-stringify/pixi.toml @@ -10,6 +10,7 @@ version = "0.1.0" [dependencies] python = "3.12.*" +pnpm = ">=9.12.1,<10" [feature.python.dependencies] pytest = ">=8.3.3,<9" From 8e72187afe3da1a2e070ee20f80c0a33b0cd3df4 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Tue, 22 Oct 2024 20:07:17 -0400 Subject: [PATCH 09/39] build(compress-stringify): extend supported pixi platforms --- packages/compress-stringify/pixi.lock | 2791 +++++++++++++++++++++++-- packages/compress-stringify/pixi.toml | 2 +- 2 files changed, 2650 insertions(+), 143 deletions(-) diff --git a/packages/compress-stringify/pixi.lock b/packages/compress-stringify/pixi.lock index c8961de8b..3b39f291c 100644 --- a/packages/compress-stringify/pixi.lock +++ b/packages/compress-stringify/pixi.lock @@ -34,6 +34,73 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.1-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.1-h8d36dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.1-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 python: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -154,6 +221,318 @@ environments: - pypi: https://files.pythonhosted.org/packages/fc/79/edeb217c57fe1bf16d890aa91a1c2c96b28c07b46afed54a5dcf310c3f6f/zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: python/itkwasm-compress-stringify - pypi: python/itkwasm-compress-stringify-wasi + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.1-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/05/8c42705a563e74fe42d2bb31fd7e0e1d887cbb43106f121d3b8e1c8a43f2/itkwasm_compare_images-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/91/ab9c4ed1e095f218c7f17ccf691d1ebe0991250d0c55d64fa7ef5e3ce070/itkwasm_compare_images_wasi-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/d1/345595666c6b9539390aafb3bafcd5afae5088df73301b6490fd66a28c6e/itkwasm_compare_meshes-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/61/56/489eb0fb5c52527d7d245b596c1b76e5165d05e1d04ec787552963b6ac8a/itkwasm_compare_meshes_wasi-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/6e/6854a090da846f5a23d2d8276a3c0bc9f2e53a1eb8729c21f84401ccb09c/itkwasm_mesh_io-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/23/6f6798c7533bb6d0a1ec653b58bb0114d17514b53db6240588ff52c58830/itkwasm_mesh_io_wasi-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/41/5d58fd387a44af577ca708df6976ccc60da3a0357baae64b9e997b2d4661/itkwasm_mesh_to_poly_data-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5e/12/c3803828cbaa733fecfbbdd495f6c0aa695e5e12d83ef80c20bfc1c0dfcf/itkwasm_mesh_to_poly_data_wasi-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/05/b97fb8c828a070e8291826922b2712d1146b11563b4860bc9ba80f5635d1/uv-0.4.25-py3-none-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/af/36d89aae0c1f95a0a98e50711bc5d92c144939efc1f81a2fcd3e78d7f4c1/zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: python/itkwasm-compress-stringify + - pypi: python/itkwasm-compress-stringify-wasi + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.1-h8d36dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/05/8c42705a563e74fe42d2bb31fd7e0e1d887cbb43106f121d3b8e1c8a43f2/itkwasm_compare_images-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/91/ab9c4ed1e095f218c7f17ccf691d1ebe0991250d0c55d64fa7ef5e3ce070/itkwasm_compare_images_wasi-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/d1/345595666c6b9539390aafb3bafcd5afae5088df73301b6490fd66a28c6e/itkwasm_compare_meshes-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/61/56/489eb0fb5c52527d7d245b596c1b76e5165d05e1d04ec787552963b6ac8a/itkwasm_compare_meshes_wasi-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/6e/6854a090da846f5a23d2d8276a3c0bc9f2e53a1eb8729c21f84401ccb09c/itkwasm_mesh_io-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/23/6f6798c7533bb6d0a1ec653b58bb0114d17514b53db6240588ff52c58830/itkwasm_mesh_io_wasi-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/41/5d58fd387a44af577ca708df6976ccc60da3a0357baae64b9e997b2d4661/itkwasm_mesh_to_poly_data-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5e/12/c3803828cbaa733fecfbbdd495f6c0aa695e5e12d83ef80c20bfc1c0dfcf/itkwasm_mesh_to_poly_data_wasi-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e8/c9/2f924bb29bd53c51b839c1c6126bd2cf4c451d4a7d8f34be078f9e31c57e/uv-0.4.25-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: python/itkwasm-compress-stringify + - pypi: python/itkwasm-compress-stringify-wasi + win-64: + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.1-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/05/8c42705a563e74fe42d2bb31fd7e0e1d887cbb43106f121d3b8e1c8a43f2/itkwasm_compare_images-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/91/ab9c4ed1e095f218c7f17ccf691d1ebe0991250d0c55d64fa7ef5e3ce070/itkwasm_compare_images_wasi-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/d1/345595666c6b9539390aafb3bafcd5afae5088df73301b6490fd66a28c6e/itkwasm_compare_meshes-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/61/56/489eb0fb5c52527d7d245b596c1b76e5165d05e1d04ec787552963b6ac8a/itkwasm_compare_meshes_wasi-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/6e/6854a090da846f5a23d2d8276a3c0bc9f2e53a1eb8729c21f84401ccb09c/itkwasm_mesh_io-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/23/6f6798c7533bb6d0a1ec653b58bb0114d17514b53db6240588ff52c58830/itkwasm_mesh_io_wasi-1.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/41/5d58fd387a44af577ca708df6976ccc60da3a0357baae64b9e997b2d4661/itkwasm_mesh_to_poly_data-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5e/12/c3803828cbaa733fecfbbdd495f6c0aa695e5e12d83ef80c20bfc1c0dfcf/itkwasm_mesh_to_poly_data_wasi-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/e9/c00d2bb4a286b13fad0f06488ea9cbe9e76d0efcd81e7a907f72195d5b83/uv-0.4.25-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/37/872d74bd7739639c4553bf94c84af7d54d8211b626b352bc57f0fd8d1e3f/zstandard-0.23.0-cp312-cp312-win_amd64.whl + - pypi: python/itkwasm-compress-stringify + - pypi: python/itkwasm-compress-stringify-wasi packages: - kind: conda name: _libgcc_mutex @@ -186,6 +565,41 @@ packages: purls: [] size: 23621 timestamp: 1650670423406 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + size: 23712 + timestamp: 1650670790230 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23712 + timestamp: 1650670790230 - kind: pypi name: anyio version: 4.6.2.post1 @@ -263,20 +677,140 @@ packages: - kind: conda name: bzip2 version: 1.0.8 - build: h4bc722e_7 + build: h2466b09_7 build_number: 7 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d - md5: 62ee74e96c5ebb0af99386de58cf9553 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: bzip2-1.0.6 license_family: BSD - purls: [] - size: 252783 - timestamp: 1720974456583 + size: 54927 + timestamp: 1720974860185 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h2466b09_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 54927 + timestamp: 1720974860185 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h68df207_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb + md5: 56398c28220513b9ea13d7b450acfb20 + depends: + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + size: 189884 + timestamp: 1720974504976 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h68df207_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb + md5: 56398c28220513b9ea13d7b450acfb20 + depends: + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 189884 + timestamp: 1720974504976 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + size: 122909 + timestamp: 1720974522888 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 122909 + timestamp: 1720974522888 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: h56e8100_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 + md5: 4c4fd67c18619be5aa65dc5b6c72e490 + license: ISC + size: 158773 + timestamp: 1725019107649 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: h56e8100_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 + md5: 4c4fd67c18619be5aa65dc5b6c72e490 + license: ISC + purls: [] + size: 158773 + timestamp: 1725019107649 - kind: conda name: ca-certificates version: 2024.8.30 @@ -289,12 +823,74 @@ packages: purls: [] size: 159003 timestamp: 1725018903918 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hcefe29a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + sha256: 2a2d827bee3775a85f0f1b2f2089291475c4416336d1b3a8cbce2964db547af8 + md5: 70e57e8f59d2c98f86b49c69e5074be5 + license: ISC + size: 159106 + timestamp: 1725020043153 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hcefe29a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + sha256: 2a2d827bee3775a85f0f1b2f2089291475c4416336d1b3a8cbce2964db547af8 + md5: 70e57e8f59d2c98f86b49c69e5074be5 + license: ISC + purls: [] + size: 159106 + timestamp: 1725020043153 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + size: 158482 + timestamp: 1725019034582 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + purls: [] + size: 158482 + timestamp: 1725019034582 - kind: pypi name: certifi version: 2024.8.30 url: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl sha256: 922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 requires_python: '>=3.6' +- kind: pypi + name: cffi + version: 1.17.1 + url: https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 + requires_dist: + - pycparser + requires_python: '>=3.8' +- kind: pypi + name: cffi + version: 1.17.1 + url: https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl + sha256: 51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 + requires_dist: + - pycparser + requires_python: '>=3.8' - kind: pypi name: cffi version: 1.17.1 @@ -329,6 +925,34 @@ packages: - pkg:pypi/colorama?source=hash-mapping size: 25170 timestamp: 1666700778190 +- kind: pypi + name: cryptography + version: 43.0.3 + url: https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl + sha256: f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7 + requires_dist: + - cffi>=1.12 ; platform_python_implementation != 'PyPy' + - bcrypt>=3.1.5 ; extra == 'ssh' + - nox ; extra == 'nox' + - cryptography-vectors==43.0.3 ; extra == 'test' + - pytest>=6.2.0 ; extra == 'test' + - pytest-benchmark ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pretend ; extra == 'test' + - certifi ; extra == 'test' + - pytest-randomly ; extra == 'test-randomorder' + - sphinx>=5.3.0 ; extra == 'docs' + - sphinx-rtd-theme>=1.1.1 ; extra == 'docs' + - pyenchant>=1.6.11 ; extra == 'docstest' + - readme-renderer ; extra == 'docstest' + - sphinxcontrib-spelling>=4.0.1 ; extra == 'docstest' + - build ; extra == 'sdist' + - ruff ; extra == 'pep8test' + - mypy ; extra == 'pep8test' + - check-sdist ; extra == 'pep8test' + - click ; extra == 'pep8test' + requires_python: '>=3.7' - kind: pypi name: cryptography version: 43.0.3 @@ -409,6 +1033,39 @@ packages: - objgraph ; extra == 'test' - psutil ; extra == 'test' requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + sha256: 7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + sha256: 4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' - kind: pypi name: h11 version: 0.14.0 @@ -551,25 +1208,69 @@ packages: - libstdcxx-ng >=12 license: MIT license_family: MIT + purls: [] size: 12129203 timestamp: 1720853576813 - kind: conda name: icu version: '75.1' - build: he02047a_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e - md5: 8b189310083baabfb622af68fd9d3ae3 + build: hf9b3779_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 + md5: 268203e8b983fddb6412b36f2024e75c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 12282786 + timestamp: 1720853454991 +- kind: conda + name: icu + version: '75.1' + build: hf9b3779_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 + md5: 268203e8b983fddb6412b36f2024e75c depends: - - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 - libstdcxx-ng >=12 license: MIT license_family: MIT purls: [] - size: 12129203 - timestamp: 1720853576813 + size: 12282786 + timestamp: 1720853454991 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 11857802 + timestamp: 1720853997952 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 11857802 + timestamp: 1720853997952 - kind: pypi name: idna version: '3.10' @@ -681,6 +1382,27 @@ packages: - itkwasm>=1.0b171 requires_python: '>=3.8' editable: true +- kind: pypi + name: itkwasm-compress-stringify + version: 3.3.0 + path: python/itkwasm-compress-stringify + sha256: c02f3169d3c0706165b2a36c79f478ae91e47c922973f1fc77793c5fb555ea9b + requires_dist: + - itkwasm-compress-stringify-emscripten ; sys_platform == 'emscripten' + - itkwasm-compress-stringify-wasi ; sys_platform != 'emscripten' + - itkwasm>=1.0b171 + requires_python: '>=3.8' + editable: true +- kind: pypi + name: itkwasm-compress-stringify-wasi + version: 3.3.0 + path: python/itkwasm-compress-stringify-wasi + sha256: 49d016bd896fc324c6ef317200ca34408ee972d2dacc395194c1bd6ff1d84885 + requires_dist: + - importlib-resources + - itkwasm>=1.0b171 + requires_python: '>=3.8' + editable: true - kind: pypi name: itkwasm-compress-stringify-wasi version: 3.3.0 @@ -875,6 +1597,66 @@ packages: purls: [] size: 669616 timestamp: 1727304687962 +- kind: conda + name: ld_impl_linux-aarch64 + version: '2.43' + build: h80caac9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_1.conda + sha256: cc4ad280a52e6815c0b26d785f6c2e205646c72fb01f418883f8df266d3c12f1 + md5: 5019b8e4dd2433395270cc0838ad4065 + constrains: + - binutils_impl_linux-aarch64 2.43 + license: GPL-3.0-only + license_family: GPL + size: 698534 + timestamp: 1727304686383 +- kind: conda + name: ld_impl_linux-aarch64 + version: '2.43' + build: h80caac9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_1.conda + sha256: cc4ad280a52e6815c0b26d785f6c2e205646c72fb01f418883f8df266d3c12f1 + md5: 5019b8e4dd2433395270cc0838ad4065 + constrains: + - binutils_impl_linux-aarch64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 698534 + timestamp: 1727304686383 +- kind: conda + name: libcxx + version: 19.1.2 + build: ha82da77_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 + md5: ba89ad7c5477e6a9d020020fcdadd37d + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 521199 + timestamp: 1729038190391 +- kind: conda + name: libcxx + version: 19.1.2 + build: ha82da77_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 + md5: ba89ad7c5477e6a9d020020fcdadd37d + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 521199 + timestamp: 1729038190391 - kind: conda name: libexpat version: 2.6.3 @@ -894,41 +1676,272 @@ packages: size: 73616 timestamp: 1725568742634 - kind: conda - name: libffi - version: 3.4.2 - build: h7f98852_5 - build_number: 5 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e - md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + name: libexpat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + sha256: 02341c9c35128055fd404dfe675832b80f2bf9dbb99539457652c11c06e52757 + md5: 1d2b842bb76e268625e8ee8d0a9fe8c3 depends: - - libgcc-ng >=9.4.0 + - libgcc >=13 + constrains: + - expat 2.6.3.* license: MIT license_family: MIT - purls: [] - size: 58292 - timestamp: 1636488182923 + size: 72342 + timestamp: 1725568840022 - kind: conda - name: libgcc - version: 14.2.0 - build: h77fa898_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 - md5: 3cb76c3f10d3bc7f1105b2fc9db984df + name: libexpat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + sha256: 02341c9c35128055fd404dfe675832b80f2bf9dbb99539457652c11c06e52757 + md5: 1d2b842bb76e268625e8ee8d0a9fe8c3 depends: - - _libgcc_mutex 0.1 conda_forge - - _openmp_mutex >=4.5 + - libgcc >=13 constrains: - - libgomp 14.2.0 h77fa898_1 - - libgcc-ng ==14.2.0=*_1 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL + - expat 2.6.3.* + license: MIT + license_family: MIT purls: [] - size: 848745 - timestamp: 1729027721139 + size: 72342 + timestamp: 1725568840022 +- kind: conda + name: libexpat + version: 2.6.3 + build: he0c23c2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + sha256: 9543965d155b8da96fc67dd81705fe5c2571c7c00becc8de5534c850393d4e3c + md5: 21415fbf4d0de6767a621160b43e5dea + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 138992 + timestamp: 1725569106114 +- kind: conda + name: libexpat + version: 2.6.3 + build: he0c23c2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + sha256: 9543965d155b8da96fc67dd81705fe5c2571c7c00becc8de5534c850393d4e3c + md5: 21415fbf4d0de6767a621160b43e5dea + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 138992 + timestamp: 1725569106114 +- kind: conda + name: libexpat + version: 2.6.3 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a + md5: 5f22f07c2ab2dea8c66fe9585a062c96 + depends: + - __osx >=11.0 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 63895 + timestamp: 1725568783033 +- kind: conda + name: libexpat + version: 2.6.3 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a + md5: 5f22f07c2ab2dea8c66fe9585a062c96 + depends: + - __osx >=11.0 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 63895 + timestamp: 1725568783033 +- kind: conda + name: libffi + version: 3.4.2 + build: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + size: 39020 + timestamp: 1636488587153 +- kind: conda + name: libffi + version: 3.4.2 + build: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + purls: [] + size: 39020 + timestamp: 1636488587153 +- kind: conda + name: libffi + version: 3.4.2 + build: h3557bc0_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + size: 59450 + timestamp: 1636488255090 +- kind: conda + name: libffi + version: 3.4.2 + build: h3557bc0_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 59450 + timestamp: 1636488255090 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libffi + version: 3.4.2 + build: h8ffe710_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 + md5: 2c96d1b6915b408893f9472569dee135 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: MIT + license_family: MIT + size: 42063 + timestamp: 1636489106777 +- kind: conda + name: libffi + version: 3.4.2 + build: h8ffe710_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 + md5: 2c96d1b6915b408893f9472569dee135 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: MIT + license_family: MIT + purls: [] + size: 42063 + timestamp: 1636489106777 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 + md5: 511b511c5445e324066c3377481bcab8 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==14.2.0=*_1 + - libgomp 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 535243 + timestamp: 1729089435134 +- kind: conda + name: libgcc + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 + md5: 511b511c5445e324066c3377481bcab8 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==14.2.0=*_1 + - libgomp 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 535243 + timestamp: 1729089435134 - kind: conda name: libgcc-ng version: 14.2.0 @@ -945,6 +1958,37 @@ packages: purls: [] size: 54142 timestamp: 1729027726517 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: he9431aa_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 + md5: 0694c249c61469f2c0f7e2990782af21 + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54104 + timestamp: 1729089444587 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: he9431aa_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 + md5: 0694c249c61469f2c0f7e2990782af21 + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54104 + timestamp: 1729089444587 - kind: conda name: libgomp version: 14.2.0 @@ -961,6 +2005,62 @@ packages: purls: [] size: 460992 timestamp: 1729027639220 +- kind: conda + name: libgomp + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf + md5: 376f0e73abbda6d23c0cb749adc195ef + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 463521 + timestamp: 1729089357313 +- kind: conda + name: libgomp + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf + md5: 376f0e73abbda6d23c0cb749adc195ef + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 463521 + timestamp: 1729089357313 +- kind: conda + name: libnsl + version: 2.0.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + size: 34501 + timestamp: 1697358973269 +- kind: conda + name: libnsl + version: 2.0.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 34501 + timestamp: 1697358973269 - kind: conda name: libnsl version: 2.0.1 @@ -992,21 +2092,126 @@ packages: purls: [] size: 865214 timestamp: 1725353659783 +- kind: conda + name: libsqlite + version: 3.47.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + sha256: 4f3cd0477c831eab48fb7fa3ed91d918aeb644fad9b4014726d445339750cdcc + md5: 964bef59135d876c596ae67b3315e812 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Unlicense + size: 884970 + timestamp: 1729592254351 +- kind: conda + name: libsqlite + version: 3.47.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + sha256: 4f3cd0477c831eab48fb7fa3ed91d918aeb644fad9b4014726d445339750cdcc + md5: 964bef59135d876c596ae67b3315e812 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Unlicense + purls: [] + size: 884970 + timestamp: 1729592254351 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hbaaea75_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + sha256: 76aa4bbbaa2334689b16048f04ac4c7406e9bfb1f225ac7107fd2a73f85329cf + md5: 5bbe4802d5460b80620411fe1da8fec3 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 837789 + timestamp: 1729592072314 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hbaaea75_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + sha256: 76aa4bbbaa2334689b16048f04ac4c7406e9bfb1f225ac7107fd2a73f85329cf + md5: 5bbe4802d5460b80620411fe1da8fec3 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 837789 + timestamp: 1729592072314 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + sha256: 469ed05e9a1622b0204a2b6cf620c9054bf6904e2ed818a1f91ee96a7bc64517 + md5: ccbe261fb8c1f1cd1a3122592247d3c4 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 1042108 + timestamp: 1729592001716 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + sha256: 469ed05e9a1622b0204a2b6cf620c9054bf6904e2ed818a1f91ee96a7bc64517 + md5: ccbe261fb8c1f1cd1a3122592247d3c4 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 1042108 + timestamp: 1729592001716 - kind: conda name: libstdcxx version: 14.2.0 - build: hc0a3c3a_1 + build: h3f4de04_1 build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 - md5: 234a5554c53625688d51062645337328 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 + md5: 37f489acd39e22b623d2d1e5ac6d195c depends: - - libgcc 14.2.0 h77fa898_1 + - libgcc 14.2.0 he277a41_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 3893695 - timestamp: 1729027746910 + size: 3816794 + timestamp: 1729089463404 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: h3f4de04_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 + md5: 37f489acd39e22b623d2d1e5ac6d195c + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3816794 + timestamp: 1729089463404 - kind: conda name: libstdcxx version: 14.2.0 @@ -1036,24 +2241,40 @@ packages: - libstdcxx 14.2.0 hc0a3c3a_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 54105 timestamp: 1729027780628 - kind: conda name: libstdcxx-ng version: 14.2.0 - build: h4852527_1 + build: hf1166c9_1 build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 - md5: 8371ac6457591af2cf6159439c1fd051 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd + md5: 0e75771b8a03afae5a2c6ce71bc733f5 depends: - - libstdcxx 14.2.0 hc0a3c3a_1 + - libstdcxx 14.2.0 h3f4de04_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54133 + timestamp: 1729089498541 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: hf1166c9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd + md5: 0e75771b8a03afae5a2c6ce71bc733f5 + depends: + - libstdcxx 14.2.0 h3f4de04_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 54105 - timestamp: 1729027780628 + size: 54133 + timestamp: 1729089498541 - kind: conda name: libuuid version: 2.38.1 @@ -1070,20 +2291,92 @@ packages: size: 33601 timestamp: 1680112270483 - kind: conda - name: libuv - version: 1.49.2 - build: hb9d3cd8_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 - md5: 070e3c9ddab77e38799d5c30b109c633 + name: libuuid + version: 2.38.1 + build: hb4cce97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: MIT + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + size: 35720 + timestamp: 1680113474501 +- kind: conda + name: libuuid + version: 2.38.1 + build: hb4cce97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 35720 + timestamp: 1680113474501 +- kind: conda + name: libuv + version: 1.49.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 + md5: 4bc348e3a1a74d20a3f9beb866d75e0a + depends: + - __osx >=11.0 + license: MIT license_family: MIT - size: 884647 - timestamp: 1729322566955 + size: 410500 + timestamp: 1729322654121 +- kind: conda + name: libuv + version: 1.49.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 + md5: 4bc348e3a1a74d20a3f9beb866d75e0a + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 410500 + timestamp: 1729322654121 +- kind: conda + name: libuv + version: 1.49.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 + md5: 1899e1ec2be63386c41c4db31d3056af + depends: + - libgcc >=13 + license: MIT + license_family: MIT + size: 627484 + timestamp: 1729322575379 +- kind: conda + name: libuv + version: 1.49.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 + md5: 1899e1ec2be63386c41c4db31d3056af + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 627484 + timestamp: 1729322575379 - kind: conda name: libuv version: 1.49.2 @@ -1100,6 +2393,35 @@ packages: purls: [] size: 884647 timestamp: 1729322566955 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + size: 114269 + timestamp: 1702724369203 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 114269 + timestamp: 1702724369203 - kind: conda name: libxcrypt version: 4.4.36 @@ -1115,6 +2437,115 @@ packages: purls: [] size: 100393 timestamp: 1702724383534 +- kind: conda + name: libzlib + version: 1.3.1 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + md5: 41fbfac52c601159df6c01f875de31b9 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 55476 + timestamp: 1727963768015 +- kind: conda + name: libzlib + version: 1.3.1 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + md5: 41fbfac52c601159df6c01f875de31b9 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 55476 + timestamp: 1727963768015 +- kind: conda + name: libzlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: libzlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: libzlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 66657 + timestamp: 1727963199518 +- kind: conda + name: libzlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 66657 + timestamp: 1727963199518 - kind: conda name: libzlib version: 1.3.1 @@ -1178,6 +2609,64 @@ packages: url: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl sha256: 037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef requires_python: '>=3.8' +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + size: 802321 + timestamp: 1724658775723 +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 802321 + timestamp: 1724658775723 +- kind: conda + name: ncurses + version: '6.5' + build: hcccb83c_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 + md5: 91d49c85cacd92caa40cf375ef72a25d + depends: + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + size: 924472 + timestamp: 1724658573518 +- kind: conda + name: ncurses + version: '6.5' + build: hcccb83c_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 + md5: 91d49c85cacd92caa40cf375ef72a25d + depends: + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 924472 + timestamp: 1724658573518 - kind: conda name: ncurses version: '6.5' @@ -1192,57 +2681,260 @@ packages: - libgcc-ng >=12 license: X11 AND BSD-3-Clause purls: [] - size: 889086 - timestamp: 1724658547447 + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: nodejs + version: 22.9.0 + build: h08fde81_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + sha256: 736a4738aba32a03401aa25c8f740e4afe4aea02bc06651b59b06f0fdc024fdf + md5: 3771a3a6abe5a8db8910d5ebf144811b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=17 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 14859715 + timestamp: 1726671037225 +- kind: conda + name: nodejs + version: 22.9.0 + build: h08fde81_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + sha256: 736a4738aba32a03401aa25c8f740e4afe4aea02bc06651b59b06f0fdc024fdf + md5: 3771a3a6abe5a8db8910d5ebf144811b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=17 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 14859715 + timestamp: 1726671037225 +- kind: conda + name: nodejs + version: 22.9.0 + build: h57928b3_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + sha256: 6d74f0dbb91eb2049199ba801a3db67965f990aef44084f9ae51a1f70c2996f6 + md5: 6aa54ed90a643a11a005491ff316b1c4 + license: MIT + license_family: MIT + size: 25378221 + timestamp: 1726657153171 +- kind: conda + name: nodejs + version: 22.9.0 + build: h57928b3_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + sha256: 6d74f0dbb91eb2049199ba801a3db67965f990aef44084f9ae51a1f70c2996f6 + md5: 6aa54ed90a643a11a005491ff316b1c4 + license: MIT + license_family: MIT + purls: [] + size: 25378221 + timestamp: 1726657153171 +- kind: conda + name: nodejs + version: 22.9.0 + build: h8374285_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + sha256: ff2186a51d389c18423109af3abf6377d4ef5b1370a81ee5f8fb2e036d79cf4f + md5: 6a9739c1ce3f9714b705a655872b5a4d + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 21653106 + timestamp: 1726665120657 +- kind: conda + name: nodejs + version: 22.9.0 + build: h8374285_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + sha256: ff2186a51d389c18423109af3abf6377d4ef5b1370a81ee5f8fb2e036d79cf4f + md5: 6a9739c1ce3f9714b705a655872b5a4d + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21653106 + timestamp: 1726665120657 +- kind: conda + name: nodejs + version: 22.9.0 + build: hf235a45_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 + md5: 40255c9ffb722d614b02ca7aaee6abcb + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21198038 + timestamp: 1726661026112 +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + sha256: 456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0 + requires_python: '>=3.10' +- kind: conda + name: openssl + version: 3.3.2 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + sha256: a45c42f3577294e22ac39ddb6ef5a64fd5322e8a6725afefbf4f2b4109340bf9 + md5: 1dc86753693df5e3326bb8a85b74c589 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 8396053 + timestamp: 1725412961673 +- kind: conda + name: openssl + version: 3.3.2 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + sha256: a45c42f3577294e22ac39ddb6ef5a64fd5322e8a6725afefbf4f2b4109340bf9 + md5: 1dc86753693df5e3326bb8a85b74c589 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 8396053 + timestamp: 1725412961673 +- kind: conda + name: openssl + version: 3.3.2 + build: h8359307_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 + md5: 1773ebccdc13ec603356e8ff1db9e958 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + size: 2882450 + timestamp: 1725410638874 +- kind: conda + name: openssl + version: 3.3.2 + build: h8359307_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 + md5: 1773ebccdc13ec603356e8ff1db9e958 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2882450 + timestamp: 1725410638874 - kind: conda - name: nodejs - version: 22.9.0 - build: hf235a45_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda - sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 - md5: 40255c9ffb722d614b02ca7aaee6abcb + name: openssl + version: 3.3.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + sha256: 4669d26dbf81e4d72093d8260f55d19d57204d82b1d9440be83d11d313b5990c + md5: 9e1e477b3f8ee3789297883faffa708b depends: - - __glibc >=2.28,<3.0.a0 - - icu >=75.1,<76.0a0 + - ca-certificates - libgcc >=13 - - libstdcxx >=13 - - libuv >=1.48.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - - zlib - license: MIT - license_family: MIT - size: 21198038 - timestamp: 1726661026112 + license: Apache-2.0 + license_family: Apache + size: 3428083 + timestamp: 1725412266679 - kind: conda - name: nodejs - version: 22.9.0 - build: hf235a45_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda - sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 - md5: 40255c9ffb722d614b02ca7aaee6abcb + name: openssl + version: 3.3.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + sha256: 4669d26dbf81e4d72093d8260f55d19d57204d82b1d9440be83d11d313b5990c + md5: 9e1e477b3f8ee3789297883faffa708b depends: - - __glibc >=2.28,<3.0.a0 - - icu >=75.1,<76.0a0 + - ca-certificates - libgcc >=13 - - libstdcxx >=13 - - libuv >=1.48.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - - zlib - license: MIT - license_family: MIT + license: Apache-2.0 + license_family: Apache purls: [] - size: 21198038 - timestamp: 1726661026112 -- kind: pypi - name: numpy - version: 2.1.2 - url: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - sha256: 6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df - requires_python: '>=3.10' + size: 3428083 + timestamp: 1725412266679 - kind: conda name: openssl version: 3.3.2 @@ -1344,6 +3036,33 @@ packages: - greenlet==3.0.3 - pyee==12.0.0 requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 8ff8303409ebed76bed4c3d655340320b768817d900ba208b394fdd7d7939a5c + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + sha256: e0e87b0c4dc8fce83c725dd851aec37bc4e882bb225ec8a96bd83cf32d4f1623 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + sha256: 7da2eb51a19c7f3b523e9faa9d98e7af92e52eb983a099979ea79c9668e3cbf7 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' - kind: conda name: pluggy version: 1.5.0 @@ -1376,26 +3095,110 @@ packages: - nodejs >=22.6.0,<23.0a0 license: MIT license_family: MIT + purls: [] size: 3432886 timestamp: 1728326068924 - kind: conda name: pnpm version: 9.12.1 - build: h6417eb3_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.1-h6417eb3_0.conda - sha256: df09af5bdb6a0647622c1b279150a47ffe334ce7699846ea7c8d3bf6eac628de - md5: 239997028f3c4f9f8d3e147203bab5a4 + build: h8d36dbc_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.1-h8d36dbc_0.conda + sha256: 5cbfc3d27b7f92ec6c7960479098f13c02c8f230a6d70ca5f66ccd1b978dd89e + md5: 3e247ba4cb9ae7f577d1be40042c5b55 + depends: + - __osx >=11.0 + - libcxx >=17 + - nodejs >=22.9.0,<23.0a0 + license: MIT + license_family: MIT + size: 3321987 + timestamp: 1728326054468 +- kind: conda + name: pnpm + version: 9.12.1 + build: h8d36dbc_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.1-h8d36dbc_0.conda + sha256: 5cbfc3d27b7f92ec6c7960479098f13c02c8f230a6d70ca5f66ccd1b978dd89e + md5: 3e247ba4cb9ae7f577d1be40042c5b55 + depends: + - __osx >=11.0 + - libcxx >=17 + - nodejs >=22.9.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3321987 + timestamp: 1728326054468 +- kind: conda + name: pnpm + version: 9.12.1 + build: haa868a1_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.1-haa868a1_0.conda + sha256: d7cc645fbf4d1e75fdff4c85bfe36893743eb6fc5c22fd7563c74e0ca60cccce + md5: 72a3f1a9aa75bcc47f507ba62afb1bcb + depends: + - nodejs >=22.9.0,<23.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 3326527 + timestamp: 1728327035713 +- kind: conda + name: pnpm + version: 9.12.1 + build: haa868a1_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.1-haa868a1_0.conda + sha256: d7cc645fbf4d1e75fdff4c85bfe36893743eb6fc5c22fd7563c74e0ca60cccce + md5: 72a3f1a9aa75bcc47f507ba62afb1bcb + depends: + - nodejs >=22.9.0,<23.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 3326527 + timestamp: 1728327035713 +- kind: conda + name: pnpm + version: 9.12.1 + build: hbf5023e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.1-hbf5023e_0.conda + sha256: 8048fafd519613546fcfcec1c17e7fbca344d73bac63dc81d4a905e987a72e54 + md5: d3c54e8a7d748d7054f80c632a0c86c1 + depends: + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + size: 3328424 + timestamp: 1728326042036 +- kind: conda + name: pnpm + version: 9.12.1 + build: hbf5023e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.1-hbf5023e_0.conda + sha256: 8048fafd519613546fcfcec1c17e7fbca344d73bac63dc81d4a905e987a72e54 + md5: d3c54e8a7d748d7054f80c632a0c86c1 depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libstdcxx >=13 - nodejs >=22.6.0,<23.0a0 license: MIT license_family: MIT purls: [] - size: 3432886 - timestamp: 1728326068924 + size: 3328424 + timestamp: 1728326042036 - kind: pypi name: ptyprocess version: 0.7.0 @@ -1510,6 +3313,120 @@ packages: - pytest-cov ; extra == 'test' - requests ; extra == 'test' requires_python: '>=3.10' +- kind: conda + name: python + version: 3.12.7 + build: h5d932e8_0_cpython + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + sha256: 25570873d92d4d9490c6db780cc85e6c28bd3ff61dc1ece79f602cf82bc73bc1 + md5: e6cab21bb5787270388939cf41cc5f43 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 13762126 + timestamp: 1728057461028 +- kind: conda + name: python + version: 3.12.7 + build: h5d932e8_0_cpython + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + sha256: 25570873d92d4d9490c6db780cc85e6c28bd3ff61dc1ece79f602cf82bc73bc1 + md5: e6cab21bb5787270388939cf41cc5f43 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 13762126 + timestamp: 1728057461028 +- kind: conda + name: python + version: 3.12.7 + build: h739c21a_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef + md5: e0d82e57ebb456077565e6d82cd4a323 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 12975439 + timestamp: 1728057819519 +- kind: conda + name: python + version: 3.12.7 + build: h739c21a_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef + md5: e0d82e57ebb456077565e6d82cd4a323 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 12975439 + timestamp: 1728057819519 - kind: conda name: python version: 3.12.7 @@ -1542,23 +3459,146 @@ packages: purls: [] size: 31574780 timestamp: 1728059777603 +- kind: conda + name: python + version: 3.12.7 + build: hce54a09_0_cpython + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 + md5: 21f1f7c6ccf6b747c5086d2422c230e1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 15987537 + timestamp: 1728057382072 +- kind: conda + name: python + version: 3.12.7 + build: hce54a09_0_cpython + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 + md5: 21f1f7c6ccf6b747c5086d2422c230e1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 15987537 + timestamp: 1728057382072 +- kind: pypi + name: pywin32-ctypes + version: 0.2.3 + url: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl + sha256: 8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 + requires_python: '>=3.6' +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: readline + version: '8.2' + build: h8fc344f_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 294092 + timestamp: 1679532238805 - kind: conda name: readline version: '8.2' - build: h8228510_1 + build: h8fc344f_1 build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 - md5: 47d31b792659ce70f470b5c82fdfb7a4 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 depends: - libgcc-ng >=12 - ncurses >=6.3,<7.0a0 license: GPL-3.0-only license_family: GPL purls: [] - size: 281456 - timestamp: 1679532220005 + size: 294092 + timestamp: 1679532238805 +- kind: conda + name: readline + version: '8.2' + build: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 250351 + timestamp: 1679532511311 +- kind: conda + name: readline + version: '8.2' + build: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 250351 + timestamp: 1679532511311 - kind: pypi name: rich version: 13.9.2 @@ -1570,6 +3610,17 @@ packages: - pygments>=2.13.0,<3.0.0 - typing-extensions>=4.0.0,<5.0 ; python_full_version < '3.11' requires_python: '>=3.8.0' +- kind: pypi + name: rich + version: 13.9.3 + url: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl + sha256: 9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283 + requires_dist: + - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' + - markdown-it-py>=2.2.0 + - pygments>=2.13.0,<3.0.0 + - typing-extensions>=4.0.0,<5.0 ; python_full_version < '3.11' + requires_python: '>=3.8.0' - kind: pypi name: secretstorage version: 3.3.3 @@ -1632,6 +3683,103 @@ packages: url: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl sha256: 80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129 requires_python: '>=3.8' +- kind: conda + name: tk + version: 8.6.13 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3351802 + timestamp: 1695506242997 +- kind: conda + name: tk + version: 8.6.13 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3351802 + timestamp: 1695506242997 +- kind: conda + name: tk + version: 8.6.13 + build: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3145523 + timestamp: 1699202432999 +- kind: conda + name: tk + version: 8.6.13 + build: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3145523 + timestamp: 1699202432999 +- kind: conda + name: tk + version: 8.6.13 + build: h5226925_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: fc048363eb8f03cd1737600a5d08aafe + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: TCL + license_family: BSD + size: 3503410 + timestamp: 1699202577803 +- kind: conda + name: tk + version: 8.6.13 + build: h5226925_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: fc048363eb8f03cd1737600a5d08aafe + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: TCL + license_family: BSD + purls: [] + size: 3503410 + timestamp: 1699202577803 - kind: conda name: tk version: 8.6.13 @@ -1707,6 +3855,11 @@ packages: version: 2024.10.16 url: https://files.pythonhosted.org/packages/75/a0/dd773135ca0f7227e8257555fd2f7a0c88672bfd111a400361f10c09face/trove_classifiers-2024.10.16-py3-none-any.whl sha256: 9b02a4cb49bd2e85c13e728ee461f4f332d6334736b18d61254c964643687144 +- kind: pypi + name: trove-classifiers + version: 2024.10.21.16 + url: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl + sha256: 0fb11f1e995a757807a8ef1c03829fbd4998d817319abcef1f33165750f103be - kind: pypi name: typing-extensions version: 4.12.2 @@ -1726,6 +3879,47 @@ packages: purls: [] size: 122354 timestamp: 1728047496079 +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: ucrt + version: 10.0.22621.0 + build: h57928b3_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 + constrains: + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + size: 559710 + timestamp: 1728377334097 +- kind: conda + name: ucrt + version: 10.0.22621.0 + build: h57928b3_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 + constrains: + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + purls: [] + size: 559710 + timestamp: 1728377334097 - kind: pypi name: urllib3 version: 2.2.3 @@ -1752,6 +3946,94 @@ packages: url: https://files.pythonhosted.org/packages/af/2d/cab3cc5529bb05ea7f4e54e308fa889ab626df45c0e2da5ab546e17ad876/uv-0.4.24-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl sha256: 2a3ea6780e3451c81ce1635656abcd8a47e43f1b0f02542c433b4b6dd459df8e requires_python: '>=3.8' +- kind: pypi + name: uv + version: 0.4.25 + url: https://files.pythonhosted.org/packages/04/e9/c00d2bb4a286b13fad0f06488ea9cbe9e76d0efcd81e7a907f72195d5b83/uv-0.4.25-py3-none-win_amd64.whl + sha256: be2a4fc4fcade9ea5e67e51738c95644360d6e59b6394b74fc579fb617f902f7 + requires_python: '>=3.8' +- kind: pypi + name: uv + version: 0.4.25 + url: https://files.pythonhosted.org/packages/0d/05/b97fb8c828a070e8291826922b2712d1146b11563b4860bc9ba80f5635d1/uv-0.4.25-py3-none-manylinux_2_28_aarch64.whl + sha256: e02afb0f6d4b58718347f7d7cfa5a801e985ce42181ba971ed85ef149f6658ca + requires_python: '>=3.8' +- kind: pypi + name: uv + version: 0.4.25 + url: https://files.pythonhosted.org/packages/e8/c9/2f924bb29bd53c51b839c1c6126bd2cf4c451d4a7d8f34be078f9e31c57e/uv-0.4.25-py3-none-macosx_11_0_arm64.whl + sha256: 18100f0f36419a154306ed6211e3490bf18384cdf3f1a0950848bf64b62fa251 + requires_python: '>=3.8' +- kind: conda + name: vc + version: '14.3' + build: ha32ba9b_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 + depends: + - vc14_runtime >=14.38.33135 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + size: 17447 + timestamp: 1728400826998 +- kind: conda + name: vc + version: '14.3' + build: ha32ba9b_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 + depends: + - vc14_runtime >=14.38.33135 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17447 + timestamp: 1728400826998 +- kind: conda + name: vc14_runtime + version: 14.40.33810 + build: hcc2c482_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + size: 750719 + timestamp: 1728401055788 +- kind: conda + name: vc14_runtime + version: 14.40.33810 + build: hcc2c482_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + purls: [] + size: 750719 + timestamp: 1728401055788 - kind: pypi name: virtualenv version: 20.27.0 @@ -1782,6 +4064,50 @@ packages: - setuptools>=68 ; extra == 'test' - time-machine>=2.10 ; platform_python_implementation == 'CPython' and extra == 'test' requires_python: '>=3.8' +- kind: conda + name: vs2015_runtime + version: 14.40.33810 + build: h3bf8584_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 + depends: + - vc14_runtime >=14.40.33810 + license: BSD-3-Clause + license_family: BSD + size: 17453 + timestamp: 1728400827536 +- kind: conda + name: vs2015_runtime + version: 14.40.33810 + build: h3bf8584_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 + depends: + - vc14_runtime >=14.40.33810 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17453 + timestamp: 1728400827536 +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + sha256: f8a2a213b9179965db2d2eedececd69a37e287e902330509afae51c71a3a6842 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' - kind: pypi name: wasmtime version: 25.0.0 @@ -1795,6 +4121,32 @@ packages: - pytest-mypy ; extra == 'testing' - componentize-py ; extra == 'testing' requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + sha256: a07445073cf36a6e5d1dc28246a897dcbdaa537ba8be8805be65422ecca297eb + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + sha256: 5bdf1214ee3ee78a4a8a92da339f4c4c8c109e65af881b37f4adfc05d02af426 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' - kind: pypi name: websocket-client version: 1.8.0 @@ -1847,23 +4199,151 @@ packages: purls: [] size: 418368 timestamp: 1660346797927 +- kind: conda + name: xz + version: 5.2.6 + build: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + size: 235693 + timestamp: 1660346961024 +- kind: conda + name: xz + version: 5.2.6 + build: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 235693 + timestamp: 1660346961024 +- kind: conda + name: xz + version: 5.2.6 + build: h8d14728_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 + md5: 515d77642eaa3639413c6b1bc3f94219 + depends: + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + license: LGPL-2.1 and GPL-2.0 + size: 217804 + timestamp: 1660346976440 +- kind: conda + name: xz + version: 5.2.6 + build: h8d14728_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 + md5: 515d77642eaa3639413c6b1bc3f94219 + depends: + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 217804 + timestamp: 1660346976440 +- kind: conda + name: xz + version: 5.2.6 + build: h9cdd2b7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 + md5: 83baad393a31d59c20b63ba4da6592df + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + size: 440555 + timestamp: 1660348056328 +- kind: conda + name: xz + version: 5.2.6 + build: h9cdd2b7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 + md5: 83baad393a31d59c20b63ba4da6592df + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 440555 + timestamp: 1660348056328 - kind: conda name: zlib version: 1.3.1 - build: hb9d3cd8_2 + build: h8359307_2 build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab - md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + size: 77606 + timestamp: 1727963209370 +- kind: conda + name: zlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + purls: [] + size: 77606 + timestamp: 1727963209370 +- kind: conda + name: zlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + sha256: b4f649aa3ecdae384d5dad7074e198bff120edd3dfb816588e31738fc6d627b1 + md5: bc230abb5d21b63ff4799b0e75204783 depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=13 - - libzlib 1.3.1 hb9d3cd8_2 + - libzlib 1.3.1 h86ecc28_2 license: Zlib license_family: Other - size: 92286 - timestamp: 1727963153079 + size: 95582 + timestamp: 1727963203597 +- kind: conda + name: zlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + sha256: b4f649aa3ecdae384d5dad7074e198bff120edd3dfb816588e31738fc6d627b1 + md5: bc230abb5d21b63ff4799b0e75204783 + depends: + - libgcc >=13 + - libzlib 1.3.1 h86ecc28_2 + license: Zlib + license_family: Other + purls: [] + size: 95582 + timestamp: 1727963203597 - kind: conda name: zlib version: 1.3.1 @@ -1882,6 +4362,33 @@ packages: purls: [] size: 92286 timestamp: 1727963153079 +- kind: pypi + name: zstandard + version: 0.23.0 + url: https://files.pythonhosted.org/packages/26/af/36d89aae0c1f95a0a98e50711bc5d92c144939efc1f81a2fcd3e78d7f4c1/zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1 + requires_dist: + - cffi>=1.11 ; platform_python_implementation == 'PyPy' + - cffi>=1.11 ; extra == 'cffi' + requires_python: '>=3.8' +- kind: pypi + name: zstandard + version: 0.23.0 + url: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8 + requires_dist: + - cffi>=1.11 ; platform_python_implementation == 'PyPy' + - cffi>=1.11 ; extra == 'cffi' + requires_python: '>=3.8' +- kind: pypi + name: zstandard + version: 0.23.0 + url: https://files.pythonhosted.org/packages/75/37/872d74bd7739639c4553bf94c84af7d54d8211b626b352bc57f0fd8d1e3f/zstandard-0.23.0-cp312-cp312-win_amd64.whl + sha256: 64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b + requires_dist: + - cffi>=1.11 ; platform_python_implementation == 'PyPy' + - cffi>=1.11 ; extra == 'cffi' + requires_python: '>=3.8' - kind: pypi name: zstandard version: 0.23.0 diff --git a/packages/compress-stringify/pixi.toml b/packages/compress-stringify/pixi.toml index 42781f835..5c3ccda79 100644 --- a/packages/compress-stringify/pixi.toml +++ b/packages/compress-stringify/pixi.toml @@ -3,7 +3,7 @@ authors = ["Matt McCormick "] channels = ["conda-forge"] description = "Zstandard compression and decompression and base64 encoding and decoding in WebAssembly." name = "compress-stringify" -platforms = ["linux-64"] +platforms = ["win-64", "linux-64", "linux-aarch64", "osx-arm64"] version = "0.1.0" [tasks] From 29e54983799d39bc541869a5424620322f83ecfa Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 13:23:24 -0400 Subject: [PATCH 10/39] build(compare-images): add python pixi configuration Also add missing spatial_tolerance to emscripten package. --- packages/compare-images/.gitignore | 2 +- packages/compare-images/environment.yml | 11 - packages/compare-images/package.json | 14 +- packages/compare-images/pixi.lock | 3638 +++++++++++++++++ packages/compare-images/pixi.toml | 85 + .../compare_double_images_async.py | 6 + .../js_package.py | 2 +- .../itkwasm-compare-images/test/fixtures.py | 4 + .../test/test_compare_images_async.py | 12 +- pnpm-lock.yaml | 3 - 10 files changed, 3748 insertions(+), 29 deletions(-) delete mode 100644 packages/compare-images/environment.yml create mode 100644 packages/compare-images/pixi.lock create mode 100644 packages/compare-images/pixi.toml diff --git a/packages/compare-images/.gitignore b/packages/compare-images/.gitignore index ae5fb33de..28eda9dd2 100644 --- a/packages/compare-images/.gitignore +++ b/packages/compare-images/.gitignore @@ -4,4 +4,4 @@ dist/ test/ package-lock.json typescript/test/browser/demo-app/public -micromamba/ +pyodide/ diff --git a/packages/compare-images/environment.yml b/packages/compare-images/environment.yml deleted file mode 100644 index 8c7e5baeb..000000000 --- a/packages/compare-images/environment.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: compare-images -channels: - - conda-forge -dependencies: - - pytest - - python=3.11 - - pip - - pip: - - hatch - - itkwasm - - itk-webassemblyinterface>=1.0.b173 diff --git a/packages/compare-images/package.json b/packages/compare-images/package.json index ce6f4d797..84f68de47 100644 --- a/packages/compare-images/package.json +++ b/packages/compare-images/package.json @@ -23,26 +23,24 @@ "build:emscripten:debug": "itk-wasm pnpm-script build:emscripten:debug", "build:wasi": "itk-wasm pnpm-script build:wasi", "build:wasi:debug": "itk-wasm pnpm-script build:wasi:debug", - "build:python:wasi": "itk-wasm pnpm-script build:python:wasi", + "build:python:wasi": "echo 'No build:python:wasi script required with pixi'", "bindgen:typescript": "itk-wasm pnpm-script bindgen:typescript", "bindgen:python": "itk-wasm pnpm-script bindgen:python", "build:gen:typescript": "itk-wasm pnpm-script build:gen:typescript", - "build:gen:python": "itk-wasm pnpm-script build:gen:python", - "build:micromamba": "itk-wasm pnpm-script build:micromamba", + "build:gen:python": "pnpm build:wasi && pnpm bindgen:python", "build:python:versionSync": "itk-wasm pnpm-script build:python:versionSync", "publish:python": "itk-wasm pnpm-script publish:python", "test": "pnpm test:data:download && pnpm build:gen:python && pnpm test:python", "test:data:download": "dam download test/data test/data.tar.gz bafybeiafli6egtmkcgany65po64w67hpqnmgwr5utqo6ycbbz7k5l33llu https://github.com/InsightSoftwareConsortium/ITK-Wasm/releases/download/itk-wasm-v1.0.0-b.171/compare-images-test-data.tar.gz", "test:data:pack": "dam pack test/data test/data.tar.gz", - "test:python:wasi": "itk-wasm pnpm-script test:python:wasi", - "test:python:emscripten": "itk-wasm pnpm-script test:python:emscripten", - "test:python:dispatch": "itk-wasm pnpm-script test:python:emscripten", - "test:python": "itk-wasm pnpm-script test:python" + "test:python:wasi": "pixi run test-wasi", + "test:python:emscripten": "pixi run test-emscripten", + "test:python:dispatch": "pixi run test-dispatch", + "test:python": "pixi run test-python" }, "license": "Apache-2.0", "devDependencies": { "@itk-wasm/dam": "^1.1.0", - "@thewtex/setup-micromamba": "^1.9.7", "itk-wasm": "workspace:^", "@itk-wasm/image-io-build": "workspace:^" } diff --git a/packages/compare-images/pixi.lock b/packages/compare-images/pixi.lock new file mode 100644 index 000000000..e0c5307c9 --- /dev/null +++ b/packages/compare-images/pixi.lock @@ -0,0 +1,3638 @@ +version: 5 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.1-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.1-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.1-h8d36dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.1-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + python: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.1-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/98/ba1cb7dd2aa639a064a9e49721e08f12a3424456d60dde1327e7c6437930/uv-0.4.25-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fc/79/edeb217c57fe1bf16d890aa91a1c2c96b28c07b46afed54a5dcf310c3f6f/zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: python/itkwasm-compare-images + - pypi: python/itkwasm-compare-images-wasi + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.1-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/05/b97fb8c828a070e8291826922b2712d1146b11563b4860bc9ba80f5635d1/uv-0.4.25-py3-none-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/af/36d89aae0c1f95a0a98e50711bc5d92c144939efc1f81a2fcd3e78d7f4c1/zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: python/itkwasm-compare-images + - pypi: python/itkwasm-compare-images-wasi + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.1-h8d36dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e8/c9/2f924bb29bd53c51b839c1c6126bd2cf4c451d4a7d8f34be078f9e31c57e/uv-0.4.25-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: python/itkwasm-compare-images + - pypi: python/itkwasm-compare-images-wasi + win-64: + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.1-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/e9/c00d2bb4a286b13fad0f06488ea9cbe9e76d0efcd81e7a907f72195d5b83/uv-0.4.25-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/37/872d74bd7739639c4553bf94c84af7d54d8211b626b352bc57f0fd8d1e3f/zstandard-0.23.0-cp312-cp312-win_amd64.whl + - pypi: python/itkwasm-compare-images + - pypi: python/itkwasm-compare-images-wasi +packages: +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23621 + timestamp: 1650670423406 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23712 + timestamp: 1650670790230 +- kind: pypi + name: anyio + version: 4.6.2.post1 + url: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + sha256: 6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d + requires_dist: + - idna>=2.8 + - sniffio>=1.1 + - exceptiongroup>=1.0.2 ; python_full_version < '3.11' + - typing-extensions>=4.1 ; python_full_version < '3.11' + - packaging ; extra == 'doc' + - sphinx~=7.4 ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - sphinx-autodoc-typehints>=1.2.0 ; extra == 'doc' + - anyio[trio] ; extra == 'test' + - coverage[toml]>=7 ; extra == 'test' + - exceptiongroup>=1.2.0 ; extra == 'test' + - hypothesis>=4.0 ; extra == 'test' + - psutil>=5.9 ; extra == 'test' + - pytest>=7.0 ; extra == 'test' + - pytest-mock>=3.6.1 ; extra == 'test' + - trustme ; extra == 'test' + - uvloop>=0.21.0b1 ; platform_python_implementation == 'CPython' and platform_system != 'Windows' and extra == 'test' + - truststore>=0.9.1 ; python_full_version >= '3.10' and extra == 'test' + - trio>=0.26.1 ; extra == 'trio' + requires_python: '>=3.9' +- kind: pypi + name: attrs + version: 24.2.0 + url: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + sha256: 81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'benchmark' + - hypothesis ; extra == 'benchmark' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pympler ; extra == 'benchmark' + - pytest-codspeed ; extra == 'benchmark' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pytest-xdist[psutil] ; extra == 'benchmark' + - pytest>=4.3.0 ; extra == 'benchmark' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'cov' + - coverage[toml]>=5.3 ; extra == 'cov' + - hypothesis ; extra == 'cov' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'cov' + - pympler ; extra == 'cov' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'cov' + - pytest-xdist[psutil] ; extra == 'cov' + - pytest>=4.3.0 ; extra == 'cov' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'dev' + - hypothesis ; extra == 'dev' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'dev' + - pre-commit ; extra == 'dev' + - pympler ; extra == 'dev' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'dev' + - pytest-xdist[psutil] ; extra == 'dev' + - pytest>=4.3.0 ; extra == 'dev' + - cogapp ; extra == 'docs' + - furo ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-notfound-page ; extra == 'docs' + - sphinxcontrib-towncrier ; extra == 'docs' + - towncrier<24.7 ; extra == 'docs' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'tests' + - hypothesis ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests' + - pympler ; extra == 'tests' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests' + - pytest-xdist[psutil] ; extra == 'tests' + - pytest>=4.3.0 ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + requires_python: '>=3.7' +- kind: conda + name: bzip2 + version: 1.0.8 + build: h2466b09_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 54927 + timestamp: 1720974860185 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h68df207_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb + md5: 56398c28220513b9ea13d7b450acfb20 + depends: + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 189884 + timestamp: 1720974504976 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 122909 + timestamp: 1720974522888 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: h56e8100_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 + md5: 4c4fd67c18619be5aa65dc5b6c72e490 + license: ISC + purls: [] + size: 158773 + timestamp: 1725019107649 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 + license: ISC + purls: [] + size: 159003 + timestamp: 1725018903918 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hcefe29a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + sha256: 2a2d827bee3775a85f0f1b2f2089291475c4416336d1b3a8cbce2964db547af8 + md5: 70e57e8f59d2c98f86b49c69e5074be5 + license: ISC + purls: [] + size: 159106 + timestamp: 1725020043153 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + purls: [] + size: 158482 + timestamp: 1725019034582 +- kind: pypi + name: certifi + version: 2024.8.30 + url: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl + sha256: 922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 + requires_python: '>=3.6' +- kind: pypi + name: cffi + version: 1.17.1 + url: https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 + requires_dist: + - pycparser + requires_python: '>=3.8' +- kind: pypi + name: cffi + version: 1.17.1 + url: https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl + sha256: 51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 + requires_dist: + - pycparser + requires_python: '>=3.8' +- kind: pypi + name: cffi + version: 1.17.1 + url: https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 + requires_dist: + - pycparser + requires_python: '>=3.8' +- kind: pypi + name: click + version: 8.1.7 + url: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl + sha256: ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 + requires_dist: + - colorama ; platform_system == 'Windows' + - importlib-metadata ; python_full_version < '3.8' + requires_python: '>=3.7' +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 25170 + timestamp: 1666700778190 +- kind: pypi + name: cryptography + version: 43.0.3 + url: https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl + sha256: f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7 + requires_dist: + - cffi>=1.12 ; platform_python_implementation != 'PyPy' + - bcrypt>=3.1.5 ; extra == 'ssh' + - nox ; extra == 'nox' + - cryptography-vectors==43.0.3 ; extra == 'test' + - pytest>=6.2.0 ; extra == 'test' + - pytest-benchmark ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pretend ; extra == 'test' + - certifi ; extra == 'test' + - pytest-randomly ; extra == 'test-randomorder' + - sphinx>=5.3.0 ; extra == 'docs' + - sphinx-rtd-theme>=1.1.1 ; extra == 'docs' + - pyenchant>=1.6.11 ; extra == 'docstest' + - readme-renderer ; extra == 'docstest' + - sphinxcontrib-spelling>=4.0.1 ; extra == 'docstest' + - build ; extra == 'sdist' + - ruff ; extra == 'pep8test' + - mypy ; extra == 'pep8test' + - check-sdist ; extra == 'pep8test' + - click ; extra == 'pep8test' + requires_python: '>=3.7' +- kind: pypi + name: cryptography + version: 43.0.3 + url: https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl + sha256: c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405 + requires_dist: + - cffi>=1.12 ; platform_python_implementation != 'PyPy' + - bcrypt>=3.1.5 ; extra == 'ssh' + - nox ; extra == 'nox' + - cryptography-vectors==43.0.3 ; extra == 'test' + - pytest>=6.2.0 ; extra == 'test' + - pytest-benchmark ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pretend ; extra == 'test' + - certifi ; extra == 'test' + - pytest-randomly ; extra == 'test-randomorder' + - sphinx>=5.3.0 ; extra == 'docs' + - sphinx-rtd-theme>=1.1.1 ; extra == 'docs' + - pyenchant>=1.6.11 ; extra == 'docstest' + - readme-renderer ; extra == 'docstest' + - sphinxcontrib-spelling>=4.0.1 ; extra == 'docstest' + - build ; extra == 'sdist' + - ruff ; extra == 'pep8test' + - mypy ; extra == 'pep8test' + - check-sdist ; extra == 'pep8test' + - click ; extra == 'pep8test' + requires_python: '>=3.7' +- kind: pypi + name: distlib + version: 0.3.9 + url: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl + sha256: 47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 20418 + timestamp: 1720869435725 +- kind: pypi + name: filelock + version: 3.16.1 + url: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl + sha256: 2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 + requires_dist: + - furo>=2024.8.6 ; extra == 'docs' + - sphinx-autodoc-typehints>=2.4.1 ; extra == 'docs' + - sphinx>=8.0.2 ; extra == 'docs' + - covdefaults>=2.3 ; extra == 'testing' + - coverage>=7.6.1 ; extra == 'testing' + - diff-cover>=9.2 ; extra == 'testing' + - pytest-asyncio>=0.24 ; extra == 'testing' + - pytest-cov>=5 ; extra == 'testing' + - pytest-mock>=3.14 ; extra == 'testing' + - pytest-timeout>=2.3.1 ; extra == 'testing' + - pytest>=8.3.3 ; extra == 'testing' + - virtualenv>=20.26.4 ; extra == 'testing' + - typing-extensions>=4.12.2 ; python_full_version < '3.11' and extra == 'typing' + requires_python: '>=3.8' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + sha256: 7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + sha256: 4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + sha256: 1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: h11 + version: 0.14.0 + url: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl + sha256: e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 + requires_dist: + - typing-extensions ; python_full_version < '3.8' + requires_python: '>=3.7' +- kind: pypi + name: hatch + version: 1.13.0 + url: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl + sha256: bb1a18558a626279cae338b4d8a9d3ca4226d5e06d50de600608c57acd131b67 + requires_dist: + - click>=8.0.6 + - hatchling>=1.24.2 + - httpx>=0.22.0 + - hyperlink>=21.0.0 + - keyring>=23.5.0 + - packaging>=23.2 + - pexpect~=4.8 + - platformdirs>=2.5.0 + - rich>=11.2.0 + - shellingham>=1.4.0 + - tomli-w>=1.0 + - tomlkit>=0.11.1 + - userpath~=1.7 + - uv>=0.1.35 + - virtualenv>=20.26.1 + - zstandard<1 + requires_python: '>=3.8' +- kind: pypi + name: hatchling + version: 1.25.0 + url: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl + sha256: b47948e45d4d973034584dd4cb39c14b6a70227cf287ab7ec0ad7983408a882c + requires_dist: + - packaging>=23.2 + - pathspec>=0.10.1 + - pluggy>=1.0.0 + - tomli>=1.2.2 ; python_full_version < '3.11' + - trove-classifiers + requires_python: '>=3.8' +- kind: pypi + name: httpcore + version: 1.0.6 + url: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl + sha256: 27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f + requires_dist: + - certifi + - h11<0.15,>=0.13 + - anyio<5.0,>=4.0 ; extra == 'asyncio' + - h2<5,>=3 ; extra == 'http2' + - socksio==1.* ; extra == 'socks' + - trio<1.0,>=0.22.0 ; extra == 'trio' + requires_python: '>=3.8' +- kind: pypi + name: httpx + version: 0.27.2 + url: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl + sha256: 7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0 + requires_dist: + - anyio + - certifi + - httpcore==1.* + - idna + - sniffio + - brotli ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'brotli' + - click==8.* ; extra == 'cli' + - pygments==2.* ; extra == 'cli' + - rich<14,>=10 ; extra == 'cli' + - h2<5,>=3 ; extra == 'http2' + - socksio==1.* ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- kind: pypi + name: hyperlink + version: 21.0.0 + url: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl + sha256: e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4 + requires_dist: + - idna>=2.5 + - typing ; python_full_version < '3.5' + requires_python: '>=2.6,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: pypi + name: hypothesis + version: 6.115.3 + url: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl + sha256: d2770b0db08ad666fe6ff36027910039ab681084d13bcf9c057449c2e27099c4 + requires_dist: + - attrs>=22.2.0 + - sortedcontainers<3.0.0,>=2.1.0 + - exceptiongroup>=1.0.0 ; python_full_version < '3.11' + - black>=19.10b0 ; extra == 'all' + - click>=7.0 ; extra == 'all' + - crosshair-tool>=0.0.74 ; extra == 'all' + - django>=4.2 ; extra == 'all' + - dpcontracts>=0.4 ; extra == 'all' + - hypothesis-crosshair>=0.0.16 ; extra == 'all' + - lark>=0.10.1 ; extra == 'all' + - libcst>=0.3.16 ; extra == 'all' + - numpy>=1.19.3 ; extra == 'all' + - pandas>=1.1 ; extra == 'all' + - pytest>=4.6 ; extra == 'all' + - python-dateutil>=1.4 ; extra == 'all' + - pytz>=2014.1 ; extra == 'all' + - redis>=3.0.0 ; extra == 'all' + - rich>=9.0.0 ; extra == 'all' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'all') or (sys_platform == 'win32' and extra == 'all') + - click>=7.0 ; extra == 'cli' + - black>=19.10b0 ; extra == 'cli' + - rich>=9.0.0 ; extra == 'cli' + - libcst>=0.3.16 ; extra == 'codemods' + - hypothesis-crosshair>=0.0.16 ; extra == 'crosshair' + - crosshair-tool>=0.0.74 ; extra == 'crosshair' + - python-dateutil>=1.4 ; extra == 'dateutil' + - django>=4.2 ; extra == 'django' + - dpcontracts>=0.4 ; extra == 'dpcontracts' + - black>=19.10b0 ; extra == 'ghostwriter' + - lark>=0.10.1 ; extra == 'lark' + - numpy>=1.19.3 ; extra == 'numpy' + - pandas>=1.1 ; extra == 'pandas' + - pytest>=4.6 ; extra == 'pytest' + - pytz>=2014.1 ; extra == 'pytz' + - redis>=3.0.0 ; extra == 'redis' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'zoneinfo') or (sys_platform == 'win32' and extra == 'zoneinfo') + requires_python: '>=3.9' +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12129203 + timestamp: 1720853576813 +- kind: conda + name: icu + version: '75.1' + build: hf9b3779_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 + md5: 268203e8b983fddb6412b36f2024e75c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12282786 + timestamp: 1720853454991 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 11857802 + timestamp: 1720853997952 +- kind: pypi + name: idna + version: '3.10' + url: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + sha256: 946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 + requires_dist: + - ruff>=0.6.2 ; extra == 'all' + - mypy>=1.11.2 ; extra == 'all' + - pytest>=8.3.2 ; extra == 'all' + - flake8>=7.1.1 ; extra == 'all' + requires_python: '>=3.6' +- kind: pypi + name: importlib-resources + version: 6.4.5 + url: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl + sha256: ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717 + requires_dist: + - zipp>=3.1.0 ; python_full_version < '3.10' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest!=8.1.*,>=6 ; extra == 'test' + - zipp>=3.17 ; extra == 'test' + - jaraco-test>=5.4 ; extra == 'test' + - pytest-mypy ; extra == 'type' + requires_python: '>=3.8' +- kind: conda + name: iniconfig + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 + md5: f800d2da156d08e289b14e87e43c1ae5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=hash-mapping + size: 11101 + timestamp: 1673103208955 +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: a1b4e5511c2274025bffe80d081ef79ee41de580df80311007af1ec05e2774db + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 0f0dcce9df862831e705eebf0ffa95de554b17027f69d67b31b30dcb8d838019 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 88344f4c7e8a74dfdeb98e20232d1a9565eb7c381d8242534588ecc4e745ffb3 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + sha256: e5ffacab2c8609979c78c2d2e02ee7e6abd611261aac0613289d98e7c277cd83 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 21c7b5c451f73c8073eb3b5dd85f7c654399cdc25dd51669bfbbafa611aa4649 + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: b6af0e82dae0efa95ad87f36ccd55a955383b34a6bd8a036894fb96a3933615a + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 8ca83de9c269e6b20648f2391aa2bf96903b8ed645c3d8cd40d90b939dda439e + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + sha256: 6affe6986927fd176c176f5464d9ea9e737b85d8745f5c4129da910fd16235cb + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + sha256: ad59e6066dba25d6b0803023e95c7633a80e7b9c1a9ff89a41c97eae5a60e06f + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 6e8600df87c59233968013d162c5a353ca4c8f843c76117b52347aec20ff1620 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 86026c853f1fd0b13e282f952cff7455df0ac131cc608df8669ce335633eef0a + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: e8d90842d703877c4ce777efece3db478c8ed5e3a18488e277a480f05d61ebb0 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 393d711f9edb248aed402e7fc9613045536dbd6b45fc8db638a28d0a409fe974 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8c0eacb3aa100e4b369a673bb0e65c3c48c411bc4b716069bce4cee8c3f9e1cc + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: d969a2ab2775b2ace36edee274ffe4839b21c7ccd634844082028f9f373dfedb + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 11a34ac45b960aa883e1758ead15c5394814964573c93d736fc04f021c18cd22 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 3c10f157bddbdf86b596ec2742f17bcc35cd6ce7bd64bba712a2a0c0858c2dc7 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 914cae65049842affc820471e149b2cdd55d305ff1a740c34a47e1b1af567361 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + sha256: b8b746f6d5597687d0b50dd81d650da0293f2c3c90f31212baefdf46edb727d6 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 84bd859eeb17aed3de39f0b3357525a4bfac0db17263a8d36cd641e5f8c49b46 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + sha256: 31f24c218c763b2c15953453cc366c5ba09e7a5c7d47d432a24c0b6b12249206 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 5cd8ab0781e08a4022e36094bb60652d0ee2b7cd1912f325e8f32d8bd5501fcf + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 583b665d6b8578ac93691afb796faf69e30b8db8a205754cdc746707f9589fcd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: e2dcda0a07ccb6b9b518d3cc4413387a44c30a313c22e15bf818af06c7da8bfd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 15eab6a72bebeccfb8a0fb291b65c305e46776a18a8f3cb91f199fc8ecd137a1 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8a2d3f2872375a9c2694bb34a2e061a4d2666f8c13390f03d94219ba8370649e + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 3f41cff2136f69ae5c2ce6166191dff86e4722097411aaaba07a74884d36ff73 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: dde112dbb9b695c1908692a0086f60da8d5a123f7e959ebc5aaec2825aaf9793 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: ff2ca7cdf42c8c32b20e1ecf7ee0a0be68e885ce673c565e72a4876b28d2e2f3 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: b3c154e7a92be2ad48e6bf8bd5a8a17610f890bb420abb54dd2bde15b1c9c52c + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + sha256: 45374d3c38884ed02e0dfebf73f363e265184a50f7c46d55d8c9217e690a571f + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 8dd071dbb1ba1c8fcf26a4011fc3b7069d444e10bc56279d7b26fd3193ac58aa + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + sha256: 0b787ee92418a1f965c52eea1fd41a7aef4424eb6e07a290b0e1ddebf50a09e1 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + sha256: ee3defc13dc65f56127e468c145e9249265c275b63ea3c530c1b88f1df4a7033 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 72f82fab54c4ee4c6c579cfd5c963cba9a84ecc9909e61f3641caa9fef94b40c + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: eff3cd27756e96ebd31500ef258d0cc4a56e48c2c25c4533300469246623d7aa + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itkwasm + version: 1.0b179 + url: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + sha256: 43558ccd082f3dc3c9b3b2379cdb197635b33620d41dbc6c1fa9186d03c22a7e + requires_dist: + - importlib-metadata ; python_full_version < '3.10' + - numpy + - platformdirs ; sys_platform != 'emscripten' + - typing-extensions + - wasmtime>=13.0.2 ; sys_platform != 'emscripten' + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-compare-images + version: 5.2.0 + path: python/itkwasm-compare-images + sha256: 47b330e63029dcf0decb7b6f3f867bb4bbf75b4fc5b844e309a1904a10867b55 + requires_dist: + - itkwasm-compare-images-emscripten>=1.0.1 ; sys_platform == 'emscripten' + - itkwasm-compare-images-wasi>=1.0.1 ; sys_platform != 'emscripten' + - itkwasm>=1.0b171 + requires_python: '>=3.8' + editable: true +- kind: pypi + name: itkwasm-compare-images-wasi + version: 5.2.0 + path: python/itkwasm-compare-images-wasi + sha256: 67108cf7b8817613d84babadf297ff4bbf61623de2fb7f9573e865a0de560382 + requires_dist: + - importlib-resources + - itkwasm>=1.0b171 + requires_python: '>=3.8' + editable: true +- kind: pypi + name: itkwasm-image-io + version: 1.3.0 + url: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + sha256: 121ef7e942f1f6c25ef428a0a39944a0a9eb9bce226d6ee7466df1e2d8fc9a56 + requires_dist: + - itkwasm-image-io-emscripten ; sys_platform == 'emscripten' + - itkwasm-image-io-wasi ; sys_platform != 'emscripten' + - itkwasm>=1.0b145 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-image-io-wasi + version: 1.3.0 + url: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + sha256: 13fe5cad7942dc9fc94ece5711d5b342b5cb90dc93f764558de195674a2b183b + requires_dist: + - importlib-resources + - itkwasm>=1.0b131 + requires_python: '>=3.8' +- kind: pypi + name: jaraco-classes + version: 3.4.0 + url: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + sha256: f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 + requires_dist: + - more-itertools + - sphinx>=3.5 ; extra == 'docs' + - jaraco-packaging>=9.3 ; extra == 'docs' + - rst-linker>=1.9 ; extra == 'docs' + - furo ; extra == 'docs' + - sphinx-lint ; extra == 'docs' + - jaraco-tidelift>=1.4 ; extra == 'docs' + - pytest>=6 ; extra == 'testing' + - pytest-checkdocs>=2.4 ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - pytest-enabler>=2.2 ; extra == 'testing' + - pytest-ruff>=0.2.1 ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: jaraco-context + version: 6.0.1 + url: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + sha256: f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4 + requires_dist: + - backports-tarfile ; python_full_version < '3.12' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest!=8.1.*,>=6 ; extra == 'test' + - pytest-checkdocs>=2.4 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mypy ; extra == 'test' + - pytest-enabler>=2.2 ; extra == 'test' + - portend ; extra == 'test' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'test' + requires_python: '>=3.8' +- kind: pypi + name: jaraco-functools + version: 4.1.0 + url: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl + sha256: ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649 + requires_dist: + - more-itertools + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest!=8.1.*,>=6 ; extra == 'test' + - jaraco-classes ; extra == 'test' + - pytest-mypy ; extra == 'type' + requires_python: '>=3.8' +- kind: pypi + name: jeepney + version: 0.8.0 + url: https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl + sha256: c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755 + requires_dist: + - pytest ; extra == 'test' + - pytest-trio ; extra == 'test' + - pytest-asyncio>=0.17 ; extra == 'test' + - testpath ; extra == 'test' + - trio ; extra == 'test' + - async-timeout ; extra == 'test' + - trio ; extra == 'trio' + - async-generator ; python_full_version == '3.6.*' and extra == 'trio' + requires_python: '>=3.7' +- kind: pypi + name: keyring + version: 25.4.1 + url: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl + sha256: 5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf + requires_dist: + - jaraco-classes + - jaraco-functools + - jaraco-context + - importlib-metadata>=4.11.4 ; python_full_version < '3.12' + - importlib-resources ; python_full_version < '3.9' + - secretstorage>=3.2 ; sys_platform == 'linux' + - jeepney>=0.4.2 ; sys_platform == 'linux' + - pywin32-ctypes>=0.2.0 ; sys_platform == 'win32' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - shtab>=1.1.0 ; extra == 'completion' + - pytest-cov ; extra == 'cover' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest!=8.1.*,>=6 ; extra == 'test' + - pyfakefs ; extra == 'test' + - pytest-mypy ; extra == 'type' + - pygobject-stubs ; extra == 'type' + - shtab ; extra == 'type' + - types-pywin32 ; extra == 'type' + requires_python: '>=3.8' +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda + sha256: 0c21387f9a411e3d1f7f2969026bacfece133c8f1e72faea9cde29c0c19e1f3a + md5: 83e1364586ceb8d0739fbc85b5c95837 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 669616 + timestamp: 1727304687962 +- kind: conda + name: ld_impl_linux-aarch64 + version: '2.43' + build: h80caac9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_1.conda + sha256: cc4ad280a52e6815c0b26d785f6c2e205646c72fb01f418883f8df266d3c12f1 + md5: 5019b8e4dd2433395270cc0838ad4065 + constrains: + - binutils_impl_linux-aarch64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 698534 + timestamp: 1727304686383 +- kind: conda + name: libcxx + version: 19.1.2 + build: ha82da77_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 + md5: ba89ad7c5477e6a9d020020fcdadd37d + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 521199 + timestamp: 1729038190391 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + sha256: 4bb47bb2cd09898737a5211e2992d63c555d63715a07ba56eae0aff31fb89c22 + md5: 59f4c43bb1b5ef1c71946ff2cbf59524 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 73616 + timestamp: 1725568742634 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + sha256: 02341c9c35128055fd404dfe675832b80f2bf9dbb99539457652c11c06e52757 + md5: 1d2b842bb76e268625e8ee8d0a9fe8c3 + depends: + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 72342 + timestamp: 1725568840022 +- kind: conda + name: libexpat + version: 2.6.3 + build: he0c23c2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + sha256: 9543965d155b8da96fc67dd81705fe5c2571c7c00becc8de5534c850393d4e3c + md5: 21415fbf4d0de6767a621160b43e5dea + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 138992 + timestamp: 1725569106114 +- kind: conda + name: libexpat + version: 2.6.3 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a + md5: 5f22f07c2ab2dea8c66fe9585a062c96 + depends: + - __osx >=11.0 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 63895 + timestamp: 1725568783033 +- kind: conda + name: libffi + version: 3.4.2 + build: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + purls: [] + size: 39020 + timestamp: 1636488587153 +- kind: conda + name: libffi + version: 3.4.2 + build: h3557bc0_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 59450 + timestamp: 1636488255090 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libffi + version: 3.4.2 + build: h8ffe710_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 + md5: 2c96d1b6915b408893f9472569dee135 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: MIT + license_family: MIT + purls: [] + size: 42063 + timestamp: 1636489106777 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 + md5: 511b511c5445e324066c3377481bcab8 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==14.2.0=*_1 + - libgomp 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 535243 + timestamp: 1729089435134 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: he9431aa_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 + md5: 0694c249c61469f2c0f7e2990782af21 + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54104 + timestamp: 1729089444587 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libgomp + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf + md5: 376f0e73abbda6d23c0cb749adc195ef + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 463521 + timestamp: 1729089357313 +- kind: conda + name: libnsl + version: 2.0.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 34501 + timestamp: 1697358973269 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libsqlite + version: 3.47.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + sha256: 4f3cd0477c831eab48fb7fa3ed91d918aeb644fad9b4014726d445339750cdcc + md5: 964bef59135d876c596ae67b3315e812 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Unlicense + purls: [] + size: 884970 + timestamp: 1729592254351 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + sha256: 76ffc7a5823b51735c11d535f3666b3c9c7d1519f9fbb6fa9cdff79db01960b9 + md5: 540296f0ce9d3352188c15a89b30b9ac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 874704 + timestamp: 1729591931557 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hbaaea75_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + sha256: 76aa4bbbaa2334689b16048f04ac4c7406e9bfb1f225ac7107fd2a73f85329cf + md5: 5bbe4802d5460b80620411fe1da8fec3 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 837789 + timestamp: 1729592072314 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + sha256: 469ed05e9a1622b0204a2b6cf620c9054bf6904e2ed818a1f91ee96a7bc64517 + md5: ccbe261fb8c1f1cd1a3122592247d3c4 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 1042108 + timestamp: 1729592001716 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: h3f4de04_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 + md5: 37f489acd39e22b623d2d1e5ac6d195c + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3816794 + timestamp: 1729089463404 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54105 + timestamp: 1729027780628 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: hf1166c9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd + md5: 0e75771b8a03afae5a2c6ce71bc733f5 + depends: + - libstdcxx 14.2.0 h3f4de04_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54133 + timestamp: 1729089498541 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libuuid + version: 2.38.1 + build: hb4cce97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 35720 + timestamp: 1680113474501 +- kind: conda + name: libuv + version: 1.49.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 + md5: 4bc348e3a1a74d20a3f9beb866d75e0a + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 410500 + timestamp: 1729322654121 +- kind: conda + name: libuv + version: 1.49.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 + md5: 1899e1ec2be63386c41c4db31d3056af + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 627484 + timestamp: 1729322575379 +- kind: conda + name: libuv + version: 1.49.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 + md5: 070e3c9ddab77e38799d5c30b109c633 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 884647 + timestamp: 1729322566955 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 114269 + timestamp: 1702724369203 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libzlib + version: 1.3.1 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + md5: 41fbfac52c601159df6c01f875de31b9 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 55476 + timestamp: 1727963768015 +- kind: conda + name: libzlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: libzlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 66657 + timestamp: 1727963199518 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 +- kind: pypi + name: markdown-it-py + version: 3.0.0 + url: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl + sha256: 355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 + requires_dist: + - mdurl~=0.1 + - psutil ; extra == 'benchmarking' + - pytest ; extra == 'benchmarking' + - pytest-benchmark ; extra == 'benchmarking' + - pre-commit~=3.0 ; extra == 'code-style' + - commonmark~=0.9 ; extra == 'compare' + - markdown~=3.4 ; extra == 'compare' + - mistletoe~=1.0 ; extra == 'compare' + - mistune~=2.0 ; extra == 'compare' + - panflute~=2.3 ; extra == 'compare' + - linkify-it-py>=1,<3 ; extra == 'linkify' + - mdit-py-plugins ; extra == 'plugins' + - gprof2dot ; extra == 'profiling' + - mdit-py-plugins ; extra == 'rtd' + - myst-parser ; extra == 'rtd' + - pyyaml ; extra == 'rtd' + - sphinx ; extra == 'rtd' + - sphinx-copybutton ; extra == 'rtd' + - sphinx-design ; extra == 'rtd' + - sphinx-book-theme ; extra == 'rtd' + - jupyter-sphinx ; extra == 'rtd' + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-regressions ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: mdurl + version: 0.1.2 + url: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 + requires_python: '>=3.7' +- kind: pypi + name: more-itertools + version: 10.5.0 + url: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl + sha256: 037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef + requires_python: '>=3.8' +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 802321 + timestamp: 1724658775723 +- kind: conda + name: ncurses + version: '6.5' + build: hcccb83c_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 + md5: 91d49c85cacd92caa40cf375ef72a25d + depends: + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 924472 + timestamp: 1724658573518 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: nodejs + version: 22.9.0 + build: h08fde81_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + sha256: 736a4738aba32a03401aa25c8f740e4afe4aea02bc06651b59b06f0fdc024fdf + md5: 3771a3a6abe5a8db8910d5ebf144811b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=17 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 14859715 + timestamp: 1726671037225 +- kind: conda + name: nodejs + version: 22.9.0 + build: h57928b3_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + sha256: 6d74f0dbb91eb2049199ba801a3db67965f990aef44084f9ae51a1f70c2996f6 + md5: 6aa54ed90a643a11a005491ff316b1c4 + license: MIT + license_family: MIT + purls: [] + size: 25378221 + timestamp: 1726657153171 +- kind: conda + name: nodejs + version: 22.9.0 + build: h8374285_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + sha256: ff2186a51d389c18423109af3abf6377d4ef5b1370a81ee5f8fb2e036d79cf4f + md5: 6a9739c1ce3f9714b705a655872b5a4d + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21653106 + timestamp: 1726665120657 +- kind: conda + name: nodejs + version: 22.9.0 + build: hf235a45_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 + md5: 40255c9ffb722d614b02ca7aaee6abcb + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21198038 + timestamp: 1726661026112 +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + sha256: 456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0 + requires_python: '>=3.10' +- kind: conda + name: openssl + version: 3.3.2 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + sha256: a45c42f3577294e22ac39ddb6ef5a64fd5322e8a6725afefbf4f2b4109340bf9 + md5: 1dc86753693df5e3326bb8a85b74c589 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 8396053 + timestamp: 1725412961673 +- kind: conda + name: openssl + version: 3.3.2 + build: h8359307_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 + md5: 1773ebccdc13ec603356e8ff1db9e958 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2882450 + timestamp: 1725410638874 +- kind: conda + name: openssl + version: 3.3.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + sha256: 4669d26dbf81e4d72093d8260f55d19d57204d82b1d9440be83d11d313b5990c + md5: 9e1e477b3f8ee3789297883faffa708b + depends: + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3428083 + timestamp: 1725412266679 +- kind: conda + name: openssl + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + sha256: cee91036686419f6dd6086902acf7142b4916e1c4ba042e9ca23e151da012b6d + md5: 4d638782050ab6faa27275bed57e9b4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2891789 + timestamp: 1725410790053 +- kind: pypi + name: outcome + version: 1.3.0.post0 + url: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + sha256: e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b + requires_dist: + - attrs>=19.2.0 + requires_python: '>=3.7' +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 50290 + timestamp: 1718189540074 +- kind: pypi + name: pathspec + version: 0.12.1 + url: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + sha256: a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 + requires_python: '>=3.8' +- kind: pypi + name: pexpect + version: 4.9.0 + url: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl + sha256: 7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 + requires_dist: + - ptyprocess>=0.5 +- kind: conda + name: pip + version: '24.2' + build: pyh8b19718_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + sha256: d820e5358bcb117fa6286e55d4550c60b0332443df62121df839eab2d11c890b + md5: 6c78fbb8ddfd64bcb55b5cbafd2d2c43 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=hash-mapping + size: 1237976 + timestamp: 1724954490262 +- kind: pypi + name: platformdirs + version: 4.3.6 + url: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl + sha256: 73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb + requires_dist: + - furo>=2024.8.6 ; extra == 'docs' + - proselint>=0.14 ; extra == 'docs' + - sphinx-autodoc-typehints>=2.4 ; extra == 'docs' + - sphinx>=8.0.2 ; extra == 'docs' + - appdirs==1.4.4 ; extra == 'test' + - covdefaults>=2.3 ; extra == 'test' + - pytest-cov>=5 ; extra == 'test' + - pytest-mock>=3.14 ; extra == 'test' + - pytest>=8.3.2 ; extra == 'test' + - mypy>=1.11.2 ; extra == 'type' + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 8ff8303409ebed76bed4c3d655340320b768817d900ba208b394fdd7d7939a5c + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + sha256: e0e87b0c4dc8fce83c725dd851aec37bc4e882bb225ec8a96bd83cf32d4f1623 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + sha256: 7da2eb51a19c7f3b523e9faa9d98e7af92e52eb983a099979ea79c9668e3cbf7 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + sha256: 8dabb80e62f667fe2640a8b694e26a7b884c0b4803f7514a3954fc849126227b + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 23815 + timestamp: 1713667175451 +- kind: conda + name: pnpm + version: 9.12.1 + build: h6417eb3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.1-h6417eb3_0.conda + sha256: df09af5bdb6a0647622c1b279150a47ffe334ce7699846ea7c8d3bf6eac628de + md5: 239997028f3c4f9f8d3e147203bab5a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3432886 + timestamp: 1728326068924 +- kind: conda + name: pnpm + version: 9.12.1 + build: h8d36dbc_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.1-h8d36dbc_0.conda + sha256: 5cbfc3d27b7f92ec6c7960479098f13c02c8f230a6d70ca5f66ccd1b978dd89e + md5: 3e247ba4cb9ae7f577d1be40042c5b55 + depends: + - __osx >=11.0 + - libcxx >=17 + - nodejs >=22.9.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3321987 + timestamp: 1728326054468 +- kind: conda + name: pnpm + version: 9.12.1 + build: haa868a1_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.1-haa868a1_0.conda + sha256: d7cc645fbf4d1e75fdff4c85bfe36893743eb6fc5c22fd7563c74e0ca60cccce + md5: 72a3f1a9aa75bcc47f507ba62afb1bcb + depends: + - nodejs >=22.9.0,<23.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 3326527 + timestamp: 1728327035713 +- kind: conda + name: pnpm + version: 9.12.1 + build: hbf5023e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.1-hbf5023e_0.conda + sha256: 8048fafd519613546fcfcec1c17e7fbca344d73bac63dc81d4a905e987a72e54 + md5: d3c54e8a7d748d7054f80c632a0c86c1 + depends: + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3328424 + timestamp: 1728326042036 +- kind: pypi + name: ptyprocess + version: 0.7.0 + url: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl + sha256: 4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 +- kind: pypi + name: pycparser + version: '2.22' + url: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl + sha256: c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc + requires_python: '>=3.8' +- kind: pypi + name: pyee + version: 12.0.0 + url: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + sha256: 7b14b74320600049ccc7d0e0b1becd3b4bd0a03c745758225e31a59f4095c990 + requires_dist: + - typing-extensions + - build ; extra == 'dev' + - flake8 ; extra == 'dev' + - flake8-black ; extra == 'dev' + - pytest ; extra == 'dev' + - black ; extra == 'dev' + - isort ; extra == 'dev' + - jupyter-console ; extra == 'dev' + - mkdocs ; extra == 'dev' + - mkdocs-include-markdown-plugin ; extra == 'dev' + - mkdocstrings[python] ; extra == 'dev' + - sphinx ; extra == 'dev' + - toml ; extra == 'dev' + - tox ; extra == 'dev' + - trio ; extra == 'dev' + - twine ; extra == 'dev' + - twisted ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - trio ; python_full_version >= '3.7' and extra == 'dev' + - trio-typing ; python_full_version >= '3.7' and extra == 'dev' + - pytest-asyncio ; python_full_version >= '3.4' and extra == 'dev' + - pytest-trio ; python_full_version >= '3.7' and extra == 'dev' + requires_python: '>=3.8' +- kind: pypi + name: pygments + version: 2.18.0 + url: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl + sha256: b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a + requires_dist: + - colorama>=0.4.6 ; extra == 'windows-terminal' + requires_python: '>=3.8' +- kind: pypi + name: pyodide-py + version: 0.26.3 + url: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + sha256: b63b6847c8906aa8f3c17df362135d0407aabf1d4b023557aed721d822e347a8 + requires_python: '>=3.12' +- kind: pypi + name: pysocks + version: 1.7.1 + url: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + sha256: 2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: conda + name: pytest + version: 8.3.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + sha256: e99376d0068455712109d233f5790458ff861aeceb458bfda74e353338e4d815 + md5: c03d61f31f38fdb9facf70c29958bf7a + depends: + - colorama + - exceptiongroup >=1.0.0rc8 + - iniconfig + - packaging + - pluggy <2,>=1.5 + - python >=3.8 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 258293 + timestamp: 1725977334143 +- kind: pypi + name: pytest-asyncio + version: 0.24.0 + url: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + sha256: a811296ed596b69bf0b6f3dc40f83bcaf341b155a269052d82efa2b25ac7037b + requires_dist: + - pytest<9,>=8.2 + - sphinx>=5.3 ; extra == 'docs' + - sphinx-rtd-theme>=1.0 ; extra == 'docs' + - coverage>=6.2 ; extra == 'testing' + - hypothesis>=5.7.1 ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: pytest-pyodide + version: 0.58.3 + url: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + sha256: 6425d8ac868090da70337bdef33bd8a082a353a4ecdb89f5371bcf58ac7390e7 + requires_dist: + - hypothesis + - pexpect + - playwright + - pytest + - pytest-asyncio + - selenium + - tblib>=3 + - build ; extra == 'test' + - pytest-cov ; extra == 'test' + - requests ; extra == 'test' + requires_python: '>=3.10' +- kind: conda + name: python + version: 3.12.7 + build: h5d932e8_0_cpython + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + sha256: 25570873d92d4d9490c6db780cc85e6c28bd3ff61dc1ece79f602cf82bc73bc1 + md5: e6cab21bb5787270388939cf41cc5f43 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 13762126 + timestamp: 1728057461028 +- kind: conda + name: python + version: 3.12.7 + build: h739c21a_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef + md5: e0d82e57ebb456077565e6d82cd4a323 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 12975439 + timestamp: 1728057819519 +- kind: conda + name: python + version: 3.12.7 + build: hc5c86c4_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d + md5: 0515111a9cdf69f83278f7c197db9807 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31574780 + timestamp: 1728059777603 +- kind: conda + name: python + version: 3.12.7 + build: hce54a09_0_cpython + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 + md5: 21f1f7c6ccf6b747c5086d2422c230e1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 15987537 + timestamp: 1728057382072 +- kind: pypi + name: pywin32-ctypes + version: 0.2.3 + url: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl + sha256: 8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 + requires_python: '>=3.6' +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: readline + version: '8.2' + build: h8fc344f_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 294092 + timestamp: 1679532238805 +- kind: conda + name: readline + version: '8.2' + build: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 250351 + timestamp: 1679532511311 +- kind: pypi + name: rich + version: 13.9.3 + url: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl + sha256: 9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283 + requires_dist: + - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' + - markdown-it-py>=2.2.0 + - pygments>=2.13.0,<3.0.0 + - typing-extensions>=4.0.0,<5.0 ; python_full_version < '3.11' + requires_python: '>=3.8.0' +- kind: pypi + name: secretstorage + version: 3.3.3 + url: https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl + sha256: f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99 + requires_dist: + - cryptography>=2.0 + - jeepney>=0.6 + requires_python: '>=3.6' +- kind: pypi + name: selenium + version: 4.25.0 + url: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + sha256: 3798d2d12b4a570bc5790163ba57fef10b2afee958bf1d80f2a3cf07c4141f33 + requires_dist: + - urllib3[socks]>=1.26,<3 + - trio~=0.17 + - trio-websocket~=0.9 + - certifi>=2021.10.8 + - typing-extensions~=4.9 + - websocket-client~=1.8 + requires_python: '>=3.8' +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 777462 + timestamp: 1727249510532 +- kind: pypi + name: shellingham + version: 1.5.4 + url: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + sha256: 7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 + requires_python: '>=3.7' +- kind: pypi + name: sniffio + version: 1.3.1 + url: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + sha256: 2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 + requires_python: '>=3.7' +- kind: pypi + name: sortedcontainers + version: 2.4.0 + url: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- kind: pypi + name: tblib + version: 3.0.0 + url: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + sha256: 80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129 + requires_python: '>=3.8' +- kind: conda + name: tk + version: 8.6.13 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3351802 + timestamp: 1695506242997 +- kind: conda + name: tk + version: 8.6.13 + build: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3145523 + timestamp: 1699202432999 +- kind: conda + name: tk + version: 8.6.13 + build: h5226925_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: fc048363eb8f03cd1737600a5d08aafe + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: TCL + license_family: BSD + purls: [] + size: 3503410 + timestamp: 1699202577803 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tomli + version: 2.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 18203 + timestamp: 1727974767524 +- kind: pypi + name: tomli-w + version: 1.1.0 + url: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl + sha256: 1403179c78193e3184bfaade390ddbd071cba48a32a2e62ba11aae47490c63f7 + requires_python: '>=3.9' +- kind: pypi + name: tomlkit + version: 0.13.2 + url: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl + sha256: 7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde + requires_python: '>=3.8' +- kind: pypi + name: trio + version: 0.27.0 + url: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + sha256: 68eabbcf8f457d925df62da780eff15ff5dc68fd6b367e2dde59f7aaf2a0b884 + requires_dist: + - attrs>=23.2.0 + - sortedcontainers + - idna + - outcome + - sniffio>=1.3.0 + - cffi>=1.14 ; implementation_name != 'pypy' and os_name == 'nt' + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.8' +- kind: pypi + name: trio-websocket + version: 0.11.1 + url: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + sha256: 520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638 + requires_dist: + - trio>=0.11 + - wsproto>=0.14 + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.7' +- kind: pypi + name: trove-classifiers + version: 2024.10.21.16 + url: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl + sha256: 0fb11f1e995a757807a8ef1c03829fbd4998d817319abcef1f33165750f103be +- kind: pypi + name: typing-extensions + version: 4.12.2 + url: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl + sha256: 04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d + requires_python: '>=3.8' +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + purls: [] + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: ucrt + version: 10.0.22621.0 + build: h57928b3_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 + constrains: + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + purls: [] + size: 559710 + timestamp: 1728377334097 +- kind: pypi + name: urllib3 + version: 2.2.3 + url: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + sha256: ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2<5,>=4 ; extra == 'h2' + - pysocks!=1.5.7,<2.0,>=1.5.6 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- kind: pypi + name: userpath + version: 1.9.2 + url: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl + sha256: 2cbf01a23d655a1ff8fc166dfb78da1b641d1ceabf0fe5f970767d380b14e89d + requires_dist: + - click + requires_python: '>=3.7' +- kind: pypi + name: uv + version: 0.4.25 + url: https://files.pythonhosted.org/packages/04/e9/c00d2bb4a286b13fad0f06488ea9cbe9e76d0efcd81e7a907f72195d5b83/uv-0.4.25-py3-none-win_amd64.whl + sha256: be2a4fc4fcade9ea5e67e51738c95644360d6e59b6394b74fc579fb617f902f7 + requires_python: '>=3.8' +- kind: pypi + name: uv + version: 0.4.25 + url: https://files.pythonhosted.org/packages/0d/05/b97fb8c828a070e8291826922b2712d1146b11563b4860bc9ba80f5635d1/uv-0.4.25-py3-none-manylinux_2_28_aarch64.whl + sha256: e02afb0f6d4b58718347f7d7cfa5a801e985ce42181ba971ed85ef149f6658ca + requires_python: '>=3.8' +- kind: pypi + name: uv + version: 0.4.25 + url: https://files.pythonhosted.org/packages/e8/c9/2f924bb29bd53c51b839c1c6126bd2cf4c451d4a7d8f34be078f9e31c57e/uv-0.4.25-py3-none-macosx_11_0_arm64.whl + sha256: 18100f0f36419a154306ed6211e3490bf18384cdf3f1a0950848bf64b62fa251 + requires_python: '>=3.8' +- kind: pypi + name: uv + version: 0.4.25 + url: https://files.pythonhosted.org/packages/fa/98/ba1cb7dd2aa639a064a9e49721e08f12a3424456d60dde1327e7c6437930/uv-0.4.25-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: a7022a71ff63a3838796f40e954b76bf7820fc27e96fe002c537e75ff8e34f1d + requires_python: '>=3.8' +- kind: conda + name: vc + version: '14.3' + build: ha32ba9b_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 + depends: + - vc14_runtime >=14.38.33135 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17447 + timestamp: 1728400826998 +- kind: conda + name: vc14_runtime + version: 14.40.33810 + build: hcc2c482_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + purls: [] + size: 750719 + timestamp: 1728401055788 +- kind: pypi + name: virtualenv + version: 20.27.0 + url: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl + sha256: 44a72c29cceb0ee08f300b314848c86e57bf8d1f13107a5e671fb9274138d655 + requires_dist: + - distlib<1,>=0.3.7 + - filelock<4,>=3.12.2 + - importlib-metadata>=6.6 ; python_full_version < '3.8' + - platformdirs<5,>=3.9.1 + - furo>=2023.7.26 ; extra == 'docs' + - proselint>=0.13 ; extra == 'docs' + - sphinx!=7.3,>=7.1.2 ; extra == 'docs' + - sphinx-argparse>=0.4 ; extra == 'docs' + - sphinxcontrib-towncrier>=0.2.1a0 ; extra == 'docs' + - towncrier>=23.6 ; extra == 'docs' + - covdefaults>=2.3 ; extra == 'test' + - coverage-enable-subprocess>=1 ; extra == 'test' + - coverage>=7.2.7 ; extra == 'test' + - flaky>=3.7 ; extra == 'test' + - packaging>=23.1 ; extra == 'test' + - pytest-env>=0.8.2 ; extra == 'test' + - pytest-freezer>=0.4.8 ; (python_full_version >= '3.13' and platform_python_implementation == 'CPython' and sys_platform == 'win32' and extra == 'test') or (platform_python_implementation == 'PyPy' and extra == 'test') + - pytest-mock>=3.11.1 ; extra == 'test' + - pytest-randomly>=3.12 ; extra == 'test' + - pytest-timeout>=2.1 ; extra == 'test' + - pytest>=7.4 ; extra == 'test' + - setuptools>=68 ; extra == 'test' + - time-machine>=2.10 ; platform_python_implementation == 'CPython' and extra == 'test' + requires_python: '>=3.8' +- kind: conda + name: vs2015_runtime + version: 14.40.33810 + build: h3bf8584_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 + depends: + - vc14_runtime >=14.40.33810 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17453 + timestamp: 1728400827536 +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + sha256: f8a2a213b9179965db2d2eedececd69a37e287e902330509afae51c71a3a6842 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + sha256: b4364e14d44e3b7afe6a40bf608e9d0d2c40b09dece441d20f4f6e31906b729c + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + sha256: a07445073cf36a6e5d1dc28246a897dcbdaa537ba8be8805be65422ecca297eb + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + sha256: 5bdf1214ee3ee78a4a8a92da339f4c4c8c109e65af881b37f4adfc05d02af426 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: websocket-client + version: 1.8.0 + url: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + sha256: 17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526 + requires_dist: + - sphinx>=6.0 ; extra == 'docs' + - sphinx-rtd-theme>=1.1.0 ; extra == 'docs' + - myst-parser>=2.0.0 ; extra == 'docs' + - python-socks ; extra == 'optional' + - wsaccel ; extra == 'optional' + - websockets ; extra == 'test' + requires_python: '>=3.8' +- kind: conda + name: wheel + version: 0.44.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping + size: 58585 + timestamp: 1722797131787 +- kind: pypi + name: wsproto + version: 1.2.0 + url: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + sha256: b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736 + requires_dist: + - h11<1,>=0.9.0 + requires_python: '>=3.7.0' +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: xz + version: 5.2.6 + build: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 235693 + timestamp: 1660346961024 +- kind: conda + name: xz + version: 5.2.6 + build: h8d14728_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 + md5: 515d77642eaa3639413c6b1bc3f94219 + depends: + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 217804 + timestamp: 1660346976440 +- kind: conda + name: xz + version: 5.2.6 + build: h9cdd2b7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 + md5: 83baad393a31d59c20b63ba4da6592df + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 440555 + timestamp: 1660348056328 +- kind: conda + name: zlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + purls: [] + size: 77606 + timestamp: 1727963209370 +- kind: conda + name: zlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + sha256: b4f649aa3ecdae384d5dad7074e198bff120edd3dfb816588e31738fc6d627b1 + md5: bc230abb5d21b63ff4799b0e75204783 + depends: + - libgcc >=13 + - libzlib 1.3.1 h86ecc28_2 + license: Zlib + license_family: Other + purls: [] + size: 95582 + timestamp: 1727963203597 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + purls: [] + size: 92286 + timestamp: 1727963153079 +- kind: pypi + name: zstandard + version: 0.23.0 + url: https://files.pythonhosted.org/packages/26/af/36d89aae0c1f95a0a98e50711bc5d92c144939efc1f81a2fcd3e78d7f4c1/zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1 + requires_dist: + - cffi>=1.11 ; platform_python_implementation == 'PyPy' + - cffi>=1.11 ; extra == 'cffi' + requires_python: '>=3.8' +- kind: pypi + name: zstandard + version: 0.23.0 + url: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8 + requires_dist: + - cffi>=1.11 ; platform_python_implementation == 'PyPy' + - cffi>=1.11 ; extra == 'cffi' + requires_python: '>=3.8' +- kind: pypi + name: zstandard + version: 0.23.0 + url: https://files.pythonhosted.org/packages/75/37/872d74bd7739639c4553bf94c84af7d54d8211b626b352bc57f0fd8d1e3f/zstandard-0.23.0-cp312-cp312-win_amd64.whl + sha256: 64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b + requires_dist: + - cffi>=1.11 ; platform_python_implementation == 'PyPy' + - cffi>=1.11 ; extra == 'cffi' + requires_python: '>=3.8' +- kind: pypi + name: zstandard + version: 0.23.0 + url: https://files.pythonhosted.org/packages/fc/79/edeb217c57fe1bf16d890aa91a1c2c96b28c07b46afed54a5dcf310c3f6f/zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373 + requires_dist: + - cffi>=1.11 ; platform_python_implementation == 'PyPy' + - cffi>=1.11 ; extra == 'cffi' + requires_python: '>=3.8' diff --git a/packages/compare-images/pixi.toml b/packages/compare-images/pixi.toml new file mode 100644 index 000000000..b5a9ea124 --- /dev/null +++ b/packages/compare-images/pixi.toml @@ -0,0 +1,85 @@ +[project] +authors = ["Matt McCormick "] +channels = ["conda-forge"] +description = "Compare images with a tolerance for regression testing." +name = "compare-images" +platforms = ["win-64", "linux-64", "linux-aarch64", "osx-arm64"] +version = "0.1.0" + +[tasks] + +[dependencies] +python = "3.12.*" +pnpm = ">=9.12.1,<10" + +[feature.python.dependencies] +pytest = ">=8.3.3,<9" +pip = ">=24.2,<25" + +[feature.python.pypi-dependencies] +hatch = ">=1.13.0, <2" +itkwasm-compare-images-wasi = { path = "python/itkwasm-compare-images-wasi", editable = true } +itkwasm-compare-images = { path = "python/itkwasm-compare-images", editable = true } +pyodide-py = ">=0.26.3, <0.27" +pytest-pyodide = ">=0.58.3, <0.59" +itk-webassemblyinterface = ">=1.0b175, <2" +itkwasm-image-io = ">=1.3.0, <2" + +[feature.python.tasks.test-wasi] +cmd = "pytest" +cwd = "python/itkwasm-compare-images-wasi" +description = "Run tests for itkwasm-compare-images-wasi" + +[feature.python.tasks.download-pyodide] +cmd = '''curl -L https://github.com/pyodide/pyodide/releases/download/0.26.3/pyodide-0.26.3.tar.bz2 -o pyodide.tar.bz2 && + tar xjf pyodide.tar.bz2 && + rm pyodide.tar.bz2''' +outputs = ["pyodide"] +description = "Download Pyodide" + +[feature.python.tasks.test-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-compare-images-emscripten" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-compare-images-emscripten" + +[feature.python.tasks.serve-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-compare-images-emscripten" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-compare-images-emscripten for development" + +[feature.python.tasks.test-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + cp ../itkwasm-compare-images-emscripten/dist/pyodide/itkwasm_compare_images_emscripten*.whl ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-compare-images" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-compare-images" + +[feature.python.tasks.serve-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-compare-images" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-compare-images for development" + +[feature.python.tasks.test-python] +cmd = "echo 'Testing all Python packages'" +depends-on = ["test-wasi", "test-emscripten", "test-dispatch"] +description = "Run tests for all Python packages" + +[environments] +python = ["python"] diff --git a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/compare_double_images_async.py b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/compare_double_images_async.py index ff4558393..6cd3a9ca1 100644 --- a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/compare_double_images_async.py +++ b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/compare_double_images_async.py @@ -18,6 +18,7 @@ async def compare_double_images_async( test_image: Image, baseline_images: List[Image] = [], difference_threshold: float = 0, + spatial_tolerance: float = 1e-08, radius_tolerance: int = 0, number_of_pixels_tolerance: int = 0, ignore_boundary_pixels: bool = False, @@ -33,6 +34,9 @@ async def compare_double_images_async( :param difference_threshold: Intensity difference for pixels to be considered different. :type difference_threshold: float + :param spatial_tolerance: Tolerance for comparing spatial overlap (origin and direction matrix). + :type spatial_tolerance: float + :param radius_tolerance: Radius of the neighborhood around a pixel to search for similar intensity values. :type radius_tolerance: int @@ -59,6 +63,8 @@ async def compare_double_images_async( kwargs["baselineImages"] = to_js(baseline_images) if difference_threshold: kwargs["differenceThreshold"] = to_js(difference_threshold) + if spatial_tolerance: + kwargs["spatialTolerance"] = to_js(spatial_tolerance) if radius_tolerance: kwargs["radiusTolerance"] = to_js(radius_tolerance) if number_of_pixels_tolerance: diff --git a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py index 214e70f0f..0af3cee3e 100644 --- a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py +++ b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIER0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgU3Q9KEEsZSk9Pntmb3IodmFyIHIgaW4gZSlEdChBLHIse2dldDplW3JdLGVudW1lcmFibGU6ITB9KX07dmFyIGJ0PSI1LjIuMCIsUkE9YnQ7dmFyIEZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sZj1GdDt2YXIga3Q9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LHc9a3Q7ZnVuY3Rpb24gUnQoQSxlKXtsZXQgcj1udWxsO3N3aXRjaChBKXtjYXNlIGYuVUludDg6e3I9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDg6e3I9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIGYuVUludDE2OntyPW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIGYuSW50MTY6e3I9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLlVJbnQzMjp7cj1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDMyOntyPW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgZi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnI9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ0ludDY0QXJyYXkoZSk6cj1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIHcuRmxvYXQzMjp7cj1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2Ugdy5GbG9hdDY0OntyPW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7cj1udWxsO2JyZWFrfWNhc2UgbnVsbDp7cj1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHJ9dmFyIE49UnQ7dmFyIFV0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sRj1VdDt2YXIgVUE9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHI9Zi5VSW50OCx0PUYuU2NhbGFyLG49MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9cix0aGlzLnBpeGVsVHlwZT10LHRoaXMuY29tcG9uZW50cz1ufX0sQ2U9VUE7ZnVuY3Rpb24gTnQoQSxlLHIsdCxuKXtBW3QrciplXT1ufXZhciBCZT1OdDt2YXIgTkE9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IENlKXt0aGlzLmltYWdlVHlwZT1lO2xldCByPWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheShyKSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkociksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheShyKnIpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCB0PTA7dDxyO3QrKylCZSh0aGlzLmRpcmVjdGlvbixyLHQsdCwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHIpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LGxlPU5BO2Z1bmN0aW9uIEd0KEEsZSl7bGV0IHI9ey4uLkEuaW1hZ2VUeXBlfTtpZih0eXBlb2YgZTwidSImJnR5cGVvZiBlLnBpeGVsVHlwZTwidSImJihyLnBpeGVsVHlwZT1lLnBpeGVsVHlwZSxlLnBpeGVsVHlwZT09PUYuU2NhbGFyJiZyLmNvbXBvbmVudHMhPT0xKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYXN0IG11bHRpLWNvbXBvbmVudCBpbWFnZSB0byBhIHNjYWxhciBpbWFnZSIpO3R5cGVvZiBlPCJ1IiYmdHlwZW9mIGUuY29tcG9uZW50VHlwZTwidSImJmUuY29tcG9uZW50VHlwZSE9PUEuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUmJihyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlKTtsZXQgdD1uZXcgbGUocik7aWYodC5uYW1lPUEubmFtZSx0Lm9yaWdpbj1BcnJheS5mcm9tKEEub3JpZ2luKSx0LnNwYWNpbmc9QXJyYXkuZnJvbShBLnNwYWNpbmcpLHQuZGlyZWN0aW9uPUEuZGlyZWN0aW9uLnNsaWNlKCksdC5zaXplPUFycmF5LmZyb20oQS5zaXplKSx0Lm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKEEubWV0YWRhdGEpKSkpLEEuZGF0YSE9PW51bGwpaWYodHlwZW9mIGU8InUiJiZ0eXBlb2YgZS5jb21wb25lbnRUeXBlPCJ1IiYmZS5jb21wb25lbnRUeXBlIT09QS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goQS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBmLlVJbnQ4OmNhc2UgZi5JbnQ4OmNhc2UgZi5VSW50MTY6Y2FzZSBmLkludDE2OmNhc2UgZi5VSW50MzI6Y2FzZSBmLkludDMyOmNhc2Ugdy5GbG9hdDMyOmNhc2Ugdy5GbG9hdDY0OnN3aXRjaCh0LmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIGYuVUludDg6dC5kYXRhPW5ldyBVaW50OEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuVUludDE2OnQuZGF0YT1uZXcgVWludDE2QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuSW50MTY6dC5kYXRhPW5ldyBJbnQxNkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDMyOnQuZGF0YT1uZXcgSW50MzJBcnJheShBLmRhdGEpO2JyZWFrO2Nhc2Ugdy5GbG9hdDMyOnQuZGF0YT1uZXcgRmxvYXQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSB3LkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuVUludDY0OnQuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWs7Y2FzZSBmLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQuZGF0YS5sZW5ndGg7bisrKXQuZGF0YVtuXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWt9YnJlYWs7Y2FzZSBmLlVJbnQ2NDpjYXNlIGYuSW50NjQ6c3dpdGNoKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgZi5VSW50ODp0LmRhdGE9bmV3IFVpbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQxNjp0LmRhdGE9bmV3IFVpbnQxNkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgZi5JbnQxNjp0LmRhdGE9bmV3IEludDE2QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgZi5JbnQzMjp0LmRhdGE9bmV3IEludDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSB3LkZsb2F0MzI6dC5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSB3LkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQ2NDp0LmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG49QS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgbihBLmRhdGEubGVuZ3RoKSx0LmRhdGEhPW51bGwmJnQuZGF0YS5zZXQoQS5kYXRhLDApfXJldHVybiB0fXZhciBpQT1HdDt2YXIgTHQ9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybToiVHJhbnNmb3JtIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxkPUx0O3ZhciBFZT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxUdD1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxUQT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksR0E9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLHNBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxRZT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIix4dD17Y2FuSGFuZGxlOkE9PlFlKEEpJiZBW0VlXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOmUscG9ydDI6cn09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiB1ZShBLGUpLFtyLFtyXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCkseEEoQSl9fSxPdD17Y2FuSGFuZGxlOkE9PlFlKEEpJiZzQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBlO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ZT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OmU9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW2UsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sZmU9bmV3IE1hcChbWyJwcm94eSIseHRdLFsidGhyb3ciLE90XV0pO2Z1bmN0aW9uIFB0KEEsZSl7Zm9yKGxldCByIG9mIEEpaWYoZT09PXJ8fHI9PT0iKiJ8fHIgaW5zdGFuY2VvZiBSZWdFeHAmJnIudGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB1ZShBLGU9Z2xvYmFsVGhpcyxyPVsiKiJdKXtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHQobil7aWYoIW58fCFuLmRhdGEpcmV0dXJuO2lmKCFQdChyLG4ub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiAnJHtuLm9yaWdpbn0nIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpvLHR5cGU6aSxwYXRoOkN9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LG4uZGF0YSksbD0obi5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChQKSxCO3RyeXtsZXQgST1DLnNsaWNlKDAsLTEpLnJlZHVjZSgoUSxnKT0+UVtnXSxBKSxhPUMucmVkdWNlKChRLGcpPT5RW2ddLEEpO3N3aXRjaChpKXtjYXNlIkdFVCI6Qj1hO2JyZWFrO2Nhc2UiU0VUIjpJW0Muc2xpY2UoLTEpWzBdXT1QKG4uZGF0YS52YWx1ZSksQj0hMDticmVhaztjYXNlIkFQUExZIjpCPWEuYXBwbHkoSSxsKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBRPW5ldyBhKC4uLmwpO0I9cXQoUSl9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpRLHBvcnQyOmd9PW5ldyBNZXNzYWdlQ2hhbm5lbDt1ZShBLGcpLEI9T0EoUSxbUV0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6Qj12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEkpe0I9e3ZhbHVlOkksW3NBXTowfX1Qcm9taXNlLnJlc29sdmUoQikuY2F0Y2goST0+KHt2YWx1ZTpJLFtzQV06MH0pKS50aGVuKEk9PntsZXRbYSxRXT1DQShJKTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6b30pLFEpLGk9PT0iUkVMRUFTRSImJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHQpLHBlKGUpLEdBIGluIEEmJnR5cGVvZiBBW0dBXT09ImZ1bmN0aW9uIiYmQVtHQV0oKSl9KS5jYXRjaChJPT57bGV0W2EsUV09Q0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtzQV06MH0pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtpZDpvfSksUSl9KX0pLGUuc3RhcnQmJmUuc3RhcnQoKX1mdW5jdGlvbiBKdChBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBwZShBKXtKdChBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIHhBKEEsZSl7cmV0dXJuIExBKEEsW10sZSl9ZnVuY3Rpb24gYUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIGRlKEEpe3JldHVybiBNKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3BlKEEpfSl9dmFyIElBPW5ldyBXZWFrTWFwLGdBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBlPShJQS5nZXQoQSl8fDApLTE7SUEuc2V0KEEsZSksZT09PTAmJmRlKEEpfSk7ZnVuY3Rpb24gTXQoQSxlKXtsZXQgcj0oSUEuZ2V0KGUpfHwwKSsxO0lBLnNldChlLHIpLGdBJiZnQS5yZWdpc3RlcihBLGUsQSl9ZnVuY3Rpb24gSHQoQSl7Z0EmJmdBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gTEEoQSxlPVtdLHI9ZnVuY3Rpb24oKXt9KXtsZXQgdD0hMSxuPW5ldyBQcm94eShyLHtnZXQobyxpKXtpZihhQSh0KSxpPT09VEEpcmV0dXJuKCk9PntIdChuKSxkZShBKSx0PSEwfTtpZihpPT09InRoZW4iKXtpZihlLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pm59O2xldCBDPU0oQSx7dHlwZToiR0VUIixwYXRoOmUubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKFApO3JldHVybiBDLnRoZW4uYmluZChDKX1yZXR1cm4gTEEoQSxbLi4uZSxpXSl9LHNldChvLGksQyl7YUEodCk7bGV0W2wsQl09Q0EoQyk7cmV0dXJuIE0oQSx7dHlwZToiU0VUIixwYXRoOlsuLi5lLGldLm1hcChJPT5JLnRvU3RyaW5nKCkpLHZhbHVlOmx9LEIpLnRoZW4oUCl9LGFwcGx5KG8saSxDKXthQSh0KTtsZXQgbD1lW2UubGVuZ3RoLTFdO2lmKGw9PT1UdClyZXR1cm4gTShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKFApO2lmKGw9PT0iYmluZCIpcmV0dXJuIExBKEEsZS5zbGljZSgwLC0xKSk7bGV0W0IsSV09Y2UoQyk7cmV0dXJuIE0oQSx7dHlwZToiQVBQTFkiLHBhdGg6ZS5tYXAoYT0+YS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Qn0sSSkudGhlbihQKX0sY29uc3RydWN0KG8saSl7YUEodCk7bGV0W0MsbF09Y2UoaSk7cmV0dXJuIE0oQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOmUubWFwKEI9PkIudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkN9LGwpLnRoZW4oUCl9fSk7cmV0dXJuIE10KG4sQSksbn1mdW5jdGlvbiBZdChBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBjZShBKXtsZXQgZT1BLm1hcChDQSk7cmV0dXJuW2UubWFwKHI9PnJbMF0pLFl0KGUubWFwKHI9PnJbMV0pKV19dmFyIG1lPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIE9BKEEsZSl7cmV0dXJuIG1lLnNldChBLGUpLEF9ZnVuY3Rpb24gcXQoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W0VlXTohMH0pfWZ1bmN0aW9uIENBKEEpe2ZvcihsZXRbZSxyXW9mIGZlKWlmKHIuY2FuSGFuZGxlKEEpKXtsZXRbdCxuXT1yLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6ZSx2YWx1ZTp0fSxuXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sbWUuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gUChBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBmZS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIE0oQSxlLHIpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57bGV0IG49S3QoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIG8oaSl7IWkuZGF0YXx8IWkuZGF0YS5pZHx8aS5kYXRhLmlkIT09bnx8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksdChpLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOm59LGUpLHIpfSl9ZnVuY3Rpb24gS3QoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFYoQSxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseShlLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpXdH09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6TUF9PU9iamVjdCxsQT0oQT0+ZT0+e2xldCByPVd0LmNhbGwoZSk7cmV0dXJuIEFbcl18fChBW3JdPXIuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxHPUE9PihBPUEudG9Mb3dlckNhc2UoKSxlPT5sQShlKT09PUEpLGNBPUE9PmU9PnR5cGVvZiBlPT09QSx7aXNBcnJheTpIfT1BcnJheSx6PWNBKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBqdChBKXtyZXR1cm4gQSE9PW51bGwmJiF6KEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIXooQS5jb25zdHJ1Y3RvcikmJmsoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIERlPUcoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gdnQoQSl7bGV0IGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhBKTplPUEmJkEuYnVmZmVyJiZEZShBLmJ1ZmZlciksZX12YXIgX3Q9Y0EoInN0cmluZyIpLGs9Y0EoImZ1bmN0aW9uIiksU2U9Y0EoIm51bWJlciIpLEVBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsVnQ9QT0+QT09PSEwfHxBPT09ITEsQkE9QT0+e2lmKGxBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IGU9TUEoQSk7cmV0dXJuKGU9PT1udWxsfHxlPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0senQ9RygiRGF0ZSIpLFp0PUcoIkZpbGUiKSxYdD1HKCJCbG9iIiksJHQ9RygiRmlsZUxpc3QiKSxBcj1BPT5FQShBKSYmayhBLnBpcGUpLGVyPUE9PntsZXQgZTtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxrKEEuYXBwZW5kKSYmKChlPWxBKEEpKT09PSJmb3JtZGF0YSJ8fGU9PT0ib2JqZWN0IiYmayhBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSx0cj1HKCJVUkxTZWFyY2hQYXJhbXMiKSxycj1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gWihBLGUse2FsbE93bktleXM6cj0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCB0LG47aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEgoQSkpZm9yKHQ9MCxuPUEubGVuZ3RoO3Q8bjt0KyspZS5jYWxsKG51bGwsQVt0XSx0LEEpO2Vsc2V7bGV0IG89cj9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxpPW8ubGVuZ3RoLEM7Zm9yKHQ9MDt0PGk7dCsrKUM9b1t0XSxlLmNhbGwobnVsbCxBW0NdLEMsQSl9fWZ1bmN0aW9uIGJlKEEsZSl7ZT1lLnRvTG93ZXJDYXNlKCk7bGV0IHI9T2JqZWN0LmtleXMoQSksdD1yLmxlbmd0aCxuO2Zvcig7dC0tID4wOylpZihuPXJbdF0sZT09PW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gbjtyZXR1cm4gbnVsbH12YXIgRmU9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxrZT1BPT4heihBKSYmQSE9PUZlO2Z1bmN0aW9uIEpBKCl7bGV0e2Nhc2VsZXNzOkF9PWtlKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHI9KHQsbik9PntsZXQgbz1BJiZiZShlLG4pfHxuO0JBKGVbb10pJiZCQSh0KT9lW29dPUpBKGVbb10sdCk6QkEodCk/ZVtvXT1KQSh7fSx0KTpIKHQpP2Vbb109dC5zbGljZSgpOmVbb109dH07Zm9yKGxldCB0PTAsbj1hcmd1bWVudHMubGVuZ3RoO3Q8bjt0KyspYXJndW1lbnRzW3RdJiZaKGFyZ3VtZW50c1t0XSxyKTtyZXR1cm4gZX12YXIgbnI9KEEsZSxyLHthbGxPd25LZXlzOnR9PXt9KT0+KFooZSwobixvKT0+e3ImJmsobik/QVtvXT1WKG4scik6QVtvXT1ufSx7YWxsT3duS2V5czp0fSksQSksb3I9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxpcj0oQSxlLHIsdCk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHQpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6ZS5wcm90b3R5cGV9KSxyJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHIpfSxhcj0oQSxlLHIsdCk9PntsZXQgbixvLGksQz17fTtpZihlPWV8fHt9LEE9PW51bGwpcmV0dXJuIGU7ZG97Zm9yKG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksbz1uLmxlbmd0aDtvLS0gPjA7KWk9bltvXSwoIXR8fHQoaSxBLGUpKSYmIUNbaV0mJihlW2ldPUFbaV0sQ1tpXT0hMCk7QT1yIT09ITEmJk1BKEEpfXdoaWxlKEEmJighcnx8cihBLGUpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBlfSxzcj0oQSxlLHIpPT57QT1TdHJpbmcoQSksKHI9PT12b2lkIDB8fHI+QS5sZW5ndGgpJiYocj1BLmxlbmd0aCksci09ZS5sZW5ndGg7bGV0IHQ9QS5pbmRleE9mKGUscik7cmV0dXJuIHQhPT0tMSYmdD09PXJ9LElyPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihIKEEpKXJldHVybiBBO2xldCBlPUEubGVuZ3RoO2lmKCFTZShlKSlyZXR1cm4gbnVsbDtsZXQgcj1uZXcgQXJyYXkoZSk7Zm9yKDtlLS0gPjA7KXJbZV09QVtlXTtyZXR1cm4gcn0sZ3I9KEE9PmU9PkEmJmUgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJk1BKFVpbnQ4QXJyYXkpKSxDcj0oQSxlKT0+e2xldCB0PShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksbjtmb3IoOyhuPXQubmV4dCgpKSYmIW4uZG9uZTspe2xldCBvPW4udmFsdWU7ZS5jYWxsKEEsb1swXSxvWzFdKX19LEJyPShBLGUpPT57bGV0IHIsdD1bXTtmb3IoOyhyPUEuZXhlYyhlKSkhPT1udWxsOyl0LnB1c2gocik7cmV0dXJuIHR9LGxyPUcoIkhUTUxGb3JtRWxlbWVudCIpLGNyPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpK259KSxoZT0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihlLHIpPT5BLmNhbGwoZSxyKSkoT2JqZWN0LnByb3RvdHlwZSksRXI9RygiUmVnRXhwIiksUmU9KEEsZSk9PntsZXQgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSx0PXt9O1oociwobixvKT0+e2xldCBpOyhpPWUobixvLEEpKSE9PSExJiYodFtvXT1pfHxuKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsdCl9LFFyPUE9PntSZShBLChlLHIpPT57aWYoayhBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHIpIT09LTEpcmV0dXJuITE7bGV0IHQ9QVtyXTtpZihrKHQpKXtpZihlLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIGUpe2Uud3JpdGFibGU9ITE7cmV0dXJufWUuc2V0fHwoZS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrcisiJyIpfSl9fSl9LGZyPShBLGUpPT57bGV0IHI9e30sdD1uPT57bi5mb3JFYWNoKG89PntyW29dPSEwfSl9O3JldHVybiBIKEEpP3QoQSk6dChTdHJpbmcoQSkuc3BsaXQoZSkpLHJ9LHVyPSgpPT57fSxwcj0oQSxlKT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6ZSksUEE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix3ZT0iMDEyMzQ1Njc4OSIsVWU9e0RJR0lUOndlLEFMUEhBOlBBLEFMUEhBX0RJR0lUOlBBK1BBLnRvVXBwZXJDYXNlKCkrd2V9LGRyPShBPTE2LGU9VWUuQUxQSEFfRElHSVQpPT57bGV0IHI9IiIse2xlbmd0aDp0fT1lO2Zvcig7QS0tOylyKz1lW01hdGgucmFuZG9tKCkqdHwwXTtyZXR1cm4gcn07ZnVuY3Rpb24gbXIoQSl7cmV0dXJuISEoQSYmayhBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIHlyPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHI9KHQsbik9PntpZihFQSh0KSl7aWYoZS5pbmRleE9mKHQpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gdCkpe2Vbbl09dDtsZXQgbz1IKHQpP1tdOnt9O3JldHVybiBaKHQsKGksQyk9PntsZXQgbD1yKGksbisxKTsheihsKSYmKG9bQ109bCl9KSxlW25dPXZvaWQgMCxvfX1yZXR1cm4gdH07cmV0dXJuIHIoQSwwKX0saHI9RygiQXN5bmNGdW5jdGlvbiIpLHdyPUE9PkEmJihFQShBKXx8ayhBKSkmJmsoQS50aGVuKSYmayhBLmNhdGNoKSxzPXtpc0FycmF5OkgsaXNBcnJheUJ1ZmZlcjpEZSxpc0J1ZmZlcjpqdCxpc0Zvcm1EYXRhOmVyLGlzQXJyYXlCdWZmZXJWaWV3OnZ0LGlzU3RyaW5nOl90LGlzTnVtYmVyOlNlLGlzQm9vbGVhbjpWdCxpc09iamVjdDpFQSxpc1BsYWluT2JqZWN0OkJBLGlzVW5kZWZpbmVkOnosaXNEYXRlOnp0LGlzRmlsZTpadCxpc0Jsb2I6WHQsaXNSZWdFeHA6RXIsaXNGdW5jdGlvbjprLGlzU3RyZWFtOkFyLGlzVVJMU2VhcmNoUGFyYW1zOnRyLGlzVHlwZWRBcnJheTpncixpc0ZpbGVMaXN0OiR0LGZvckVhY2g6WixtZXJnZTpKQSxleHRlbmQ6bnIsdHJpbTpycixzdHJpcEJPTTpvcixpbmhlcml0czppcix0b0ZsYXRPYmplY3Q6YXIsa2luZE9mOmxBLGtpbmRPZlRlc3Q6RyxlbmRzV2l0aDpzcix0b0FycmF5OklyLGZvckVhY2hFbnRyeTpDcixtYXRjaEFsbDpCcixpc0hUTUxGb3JtOmxyLGhhc093blByb3BlcnR5OmhlLGhhc093blByb3A6aGUscmVkdWNlRGVzY3JpcHRvcnM6UmUsZnJlZXplTWV0aG9kczpRcix0b09iamVjdFNldDpmcix0b0NhbWVsQ2FzZTpjcixub29wOnVyLHRvRmluaXRlTnVtYmVyOnByLGZpbmRLZXk6YmUsZ2xvYmFsOkZlLGlzQ29udGV4dERlZmluZWQ6a2UsQUxQSEFCRVQ6VWUsZ2VuZXJhdGVTdHJpbmc6ZHIsaXNTcGVjQ29tcGxpYW50Rm9ybTptcix0b0pTT05PYmplY3Q6eXIsaXNBc3luY0ZuOmhyLGlzVGhlbmFibGU6d3J9O2Z1bmN0aW9uIFkoQSxlLHIsdCxuKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGUmJih0aGlzLmNvZGU9ZSksciYmKHRoaXMuY29uZmlnPXIpLHQmJih0aGlzLnJlcXVlc3Q9dCksbiYmKHRoaXMucmVzcG9uc2U9bil9cy5pbmhlcml0cyhZLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6cy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgTmU9WS5wcm90b3R5cGUsR2U9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57R2VbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWSxHZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE5lLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO1kuZnJvbT0oQSxlLHIsdCxuLG8pPT57bGV0IGk9T2JqZWN0LmNyZWF0ZShOZSk7cmV0dXJuIHMudG9GbGF0T2JqZWN0KEEsaSxmdW5jdGlvbihsKXtyZXR1cm4gbCE9PUVycm9yLnByb3RvdHlwZX0sQz0+QyE9PSJpc0F4aW9zRXJyb3IiKSxZLmNhbGwoaSxBLm1lc3NhZ2UsZSxyLHQsbiksaS5jYXVzZT1BLGkubmFtZT1BLm5hbWUsbyYmT2JqZWN0LmFzc2lnbihpLG8pLGl9O3ZhciBwPVk7dmFyIFFBPW51bGw7ZnVuY3Rpb24gSEEoQSl7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChBKXx8cy5pc0FycmF5KEEpfWZ1bmN0aW9uIFRlKEEpe3JldHVybiBzLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIExlKEEsZSxyKXtyZXR1cm4gQT9BLmNvbmNhdChlKS5tYXAoZnVuY3Rpb24obixvKXtyZXR1cm4gbj1UZShuKSwhciYmbz8iWyIrbisiXSI6bn0pLmpvaW4ocj8iLiI6IiIpOmV9ZnVuY3Rpb24gRHIoQSl7cmV0dXJuIHMuaXNBcnJheShBKSYmIUEuc29tZShIQSl9dmFyIFNyPXMudG9GbGF0T2JqZWN0KHMse30sbnVsbCxmdW5jdGlvbihlKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoZSl9KTtmdW5jdGlvbiBicihBLGUscil7aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ZT1lfHxuZXcoUUF8fEZvcm1EYXRhKSxyPXMudG9GbGF0T2JqZWN0KHIse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihFLHUpe3JldHVybiFzLmlzVW5kZWZpbmVkKHVbRV0pfSk7bGV0IHQ9ci5tZXRhVG9rZW5zLG49ci52aXNpdG9yfHxJLG89ci5kb3RzLGk9ci5pbmRleGVzLGw9KHIuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmcy5pc1NwZWNDb21wbGlhbnRGb3JtKGUpO2lmKCFzLmlzRnVuY3Rpb24obikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBCKGMpe2lmKGM9PT1udWxsKXJldHVybiIiO2lmKHMuaXNEYXRlKGMpKXJldHVybiBjLnRvSVNPU3RyaW5nKCk7aWYoIWwmJnMuaXNCbG9iKGMpKXRocm93IG5ldyBwKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBzLmlzQXJyYXlCdWZmZXIoYyl8fHMuaXNUeXBlZEFycmF5KGMpP2wmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtjXSk6QnVmZmVyLmZyb20oYyk6Y31mdW5jdGlvbiBJKGMsRSx1KXtsZXQgbT1jO2lmKGMmJiF1JiZ0eXBlb2YgYz09Im9iamVjdCIpe2lmKHMuZW5kc1dpdGgoRSwie30iKSlFPXQ/RTpFLnNsaWNlKDAsLTIpLGM9SlNPTi5zdHJpbmdpZnkoYyk7ZWxzZSBpZihzLmlzQXJyYXkoYykmJkRyKGMpfHwocy5pc0ZpbGVMaXN0KGMpfHxzLmVuZHNXaXRoKEUsIltdIikpJiYobT1zLnRvQXJyYXkoYykpKXJldHVybiBFPVRlKEUpLG0uZm9yRWFjaChmdW5jdGlvbihVLHd0KXshKHMuaXNVbmRlZmluZWQoVSl8fFU9PT1udWxsKSYmZS5hcHBlbmQoaT09PSEwP0xlKFtFXSx3dCxvKTppPT09bnVsbD9FOkUrIltdIixCKFUpKX0pLCExfXJldHVybiBIQShjKT8hMDooZS5hcHBlbmQoTGUodSxFLG8pLEIoYykpLCExKX1sZXQgYT1bXSxRPU9iamVjdC5hc3NpZ24oU3Ise2RlZmF1bHRWaXNpdG9yOkksY29udmVydFZhbHVlOkIsaXNWaXNpdGFibGU6SEF9KTtmdW5jdGlvbiBnKGMsRSl7aWYoIXMuaXNVbmRlZmluZWQoYykpe2lmKGEuaW5kZXhPZihjKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitFLmpvaW4oIi4iKSk7YS5wdXNoKGMpLHMuZm9yRWFjaChjLGZ1bmN0aW9uKG0sUil7KCEocy5pc1VuZGVmaW5lZChtKXx8bT09PW51bGwpJiZuLmNhbGwoZSxtLHMuaXNTdHJpbmcoUik/Ui50cmltKCk6UixFLFEpKT09PSEwJiZnKG0sRT9FLmNvbmNhdChSKTpbUl0pfSksYS5wb3AoKX19aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBnKEEpLGV9dmFyIFQ9YnI7ZnVuY3Rpb24geGUoQSl7bGV0IGU9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KX1mdW5jdGlvbiBPZShBLGUpe3RoaXMuX3BhaXJzPVtdLEEmJlQoQSx0aGlzLGUpfXZhciBQZT1PZS5wcm90b3R5cGU7UGUuYXBwZW5kPWZ1bmN0aW9uKGUscil7dGhpcy5fcGFpcnMucHVzaChbZSxyXSl9O1BlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe2xldCByPWU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzLHQseGUpfTp4ZTtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiByKG5bMF0pKyI9IityKG5bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgZkE9T2U7ZnVuY3Rpb24gRnIoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gWChBLGUscil7aWYoIWUpcmV0dXJuIEE7bGV0IHQ9ciYmci5lbmNvZGV8fEZyLG49ciYmci5zZXJpYWxpemUsbztpZihuP289bihlLHIpOm89cy5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IGZBKGUscikudG9TdHJpbmcodCksbyl7bGV0IGk9QS5pbmRleE9mKCIjIik7aSE9PS0xJiYoQT1BLnNsaWNlKDAsaSkpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK299cmV0dXJuIEF9dmFyIFlBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSxyLHQpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnIsc3luY2hyb25vdXM6dD90LnN5bmNocm9ub3VzOiExLHJ1bldoZW46dD90LnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXtzLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbih0KXt0IT09bnVsbCYmZSh0KX0pfX0scUE9WUE7dmFyIHVBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgSmU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOmZBO3ZhciBNZT10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIEhlPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIFllPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOkplLEZvcm1EYXRhOk1lLEJsb2I6SGV9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgS0E9e307U3QoS0Ese2hhc0Jyb3dzZXJFbnY6KCk9PnFlLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+a3IsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5Scn0pO3ZhciBxZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixrcj0oQT0+cWUmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxScj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIEQ9ey4uLktBLC4uLlllfTtmdW5jdGlvbiBXQShBLGUpe3JldHVybiBUKEEsbmV3IEQuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihyLHQsbixvKXtyZXR1cm4gRC5pc05vZGUmJnMuaXNCdWZmZXIocik/KHRoaXMuYXBwZW5kKHQsci50b1N0cmluZygiYmFzZTY0IikpLCExKTpvLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBVcihBKXtyZXR1cm4gcy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIE5yKEEpe2xldCBlPXt9LHI9T2JqZWN0LmtleXMoQSksdCxuPXIubGVuZ3RoLG87Zm9yKHQ9MDt0PG47dCsrKW89clt0XSxlW29dPUFbb107cmV0dXJuIGV9ZnVuY3Rpb24gR3IoQSl7ZnVuY3Rpb24gZShyLHQsbixvKXtsZXQgaT1yW28rK107aWYoaT09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBDPU51bWJlci5pc0Zpbml0ZSgraSksbD1vPj1yLmxlbmd0aDtyZXR1cm4gaT0haSYmcy5pc0FycmF5KG4pP24ubGVuZ3RoOmksbD8ocy5oYXNPd25Qcm9wKG4saSk/bltpXT1bbltpXSx0XTpuW2ldPXQsIUMpOigoIW5baV18fCFzLmlzT2JqZWN0KG5baV0pKSYmKG5baV09W10pLGUocix0LG5baV0sbykmJnMuaXNBcnJheShuW2ldKSYmKG5baV09TnIobltpXSkpLCFDKX1pZihzLmlzRm9ybURhdGEoQSkmJnMuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgcj17fTtyZXR1cm4gcy5mb3JFYWNoRW50cnkoQSwodCxuKT0+e2UoVXIodCksbixyLDApfSkscn1yZXR1cm4gbnVsbH12YXIgcEE9R3I7ZnVuY3Rpb24gTHIoQSxlLHIpe2lmKHMuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxzLnRyaW0oQSl9Y2F0Y2godCl7aWYodC5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyB0fXJldHVybihyfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIGpBPXt0cmFuc2l0aW9uYWw6dUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHIpe2xldCB0PXIuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj10LmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPXMuaXNPYmplY3QoZSk7aWYobyYmcy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLHMuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShwQShlKSk6ZTtpZihzLmlzQXJyYXlCdWZmZXIoZSl8fHMuaXNCdWZmZXIoZSl8fHMuaXNTdHJlYW0oZSl8fHMuaXNGaWxlKGUpfHxzLmlzQmxvYihlKSlyZXR1cm4gZTtpZihzLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihzLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiByLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgQztpZihvKXtpZih0LmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBXQShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEM9cy5pc0ZpbGVMaXN0KGUpKXx8dC5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBsPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gVChDP3siZmlsZXNbXSI6ZX06ZSxsJiZuZXcgbCx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIG98fG4/KHIuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxMcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgcj10aGlzLnRyYW5zaXRpb25hbHx8akEudHJhbnNpdGlvbmFsLHQ9ciYmci5mb3JjZWRKU09OUGFyc2luZyxuPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJnMuaXNTdHJpbmcoZSkmJih0JiYhdGhpcy5yZXNwb25zZVR5cGV8fG4pKXtsZXQgaT0hKHImJnIuc2lsZW50SlNPTlBhcnNpbmcpJiZuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChDKXtpZihpKXRocm93IEMubmFtZT09PSJTeW50YXhFcnJvciI/cC5mcm9tKEMscC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpDfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6RC5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6RC5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07cy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntqQS5oZWFkZXJzW0FdPXt9fSk7dmFyIHE9akE7dmFyIFRyPXMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksS2U9QT0+e2xldCBlPXt9LHIsdCxuO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihpKXtuPWkuaW5kZXhPZigiOiIpLHI9aS5zdWJzdHJpbmcoMCxuKS50cmltKCkudG9Mb3dlckNhc2UoKSx0PWkuc3Vic3RyaW5nKG4rMSkudHJpbSgpLCEoIXJ8fGVbcl0mJlRyW3JdKSYmKHI9PT0ic2V0LWNvb2tpZSI/ZVtyXT9lW3JdLnB1c2godCk6ZVtyXT1bdF06ZVtyXT1lW3JdP2Vbcl0rIiwgIit0OnQpfSksZX07dmFyIFdlPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gJChBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGRBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAoZEEpOlN0cmluZyhBKX1mdW5jdGlvbiB4cihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHI9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyx0O2Zvcig7dD1yLmV4ZWMoQSk7KWVbdFsxXV09dFsyXTtyZXR1cm4gZX12YXIgT3I9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gdkEoQSxlLHIsdCxuKXtpZihzLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLGUscik7aWYobiYmKGU9ciksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHQpKXJldHVybiBlLmluZGV4T2YodCkhPT0tMTtpZihzLmlzUmVnRXhwKHQpKXJldHVybiB0LnRlc3QoZSl9fWZ1bmN0aW9uIFByKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUscix0KT0+ci50b1VwcGVyQ2FzZSgpK3QpfWZ1bmN0aW9uIEpyKEEsZSl7bGV0IHI9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHQ9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSx0K3Ise3ZhbHVlOmZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gdGhpc1t0XS5jYWxsKHRoaXMsZSxuLG8saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIEs9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUscix0KXtsZXQgbj10aGlzO2Z1bmN0aW9uIG8oQyxsLEIpe2xldCBJPSQobCk7aWYoIUkpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBhPXMuZmluZEtleShuLEkpOyghYXx8blthXT09PXZvaWQgMHx8Qj09PSEwfHxCPT09dm9pZCAwJiZuW2FdIT09ITEpJiYoblthfHxsXT1kQShDKSl9bGV0IGk9KEMsbCk9PnMuZm9yRWFjaChDLChCLEkpPT5vKEIsSSxsKSk7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/aShlLHIpOnMuaXNTdHJpbmcoZSkmJihlPWUudHJpbSgpKSYmIU9yKGUpP2koS2UoZSkscik6ZSE9bnVsbCYmbyhyLGUsdCksdGhpc31nZXQoZSxyKXtpZihlPSQoZSksZSl7bGV0IHQ9cy5maW5kS2V5KHRoaXMsZSk7aWYodCl7bGV0IG49dGhpc1t0XTtpZighcilyZXR1cm4gbjtpZihyPT09ITApcmV0dXJuIHhyKG4pO2lmKHMuaXNGdW5jdGlvbihyKSlyZXR1cm4gci5jYWxsKHRoaXMsbix0KTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLmV4ZWMobik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHIpe2lmKGU9JChlKSxlKXtsZXQgdD1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hISh0JiZ0aGlzW3RdIT09dm9pZCAwJiYoIXJ8fHZBKHRoaXMsdGhpc1t0XSx0LHIpKSl9cmV0dXJuITF9ZGVsZXRlKGUscil7bGV0IHQ9dGhpcyxuPSExO2Z1bmN0aW9uIG8oaSl7aWYoaT0kKGkpLGkpe2xldCBDPXMuZmluZEtleSh0LGkpO0MmJighcnx8dkEodCx0W0NdLEMscikpJiYoZGVsZXRlIHRbQ10sbj0hMCl9fXJldHVybiBzLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKG8pOm8oZSksbn1jbGVhcihlKXtsZXQgcj1PYmplY3Qua2V5cyh0aGlzKSx0PXIubGVuZ3RoLG49ITE7Zm9yKDt0LS07KXtsZXQgbz1yW3RdOyghZXx8dkEodGhpcyx0aGlzW29dLG8sZSwhMCkpJiYoZGVsZXRlIHRoaXNbb10sbj0hMCl9cmV0dXJuIG59bm9ybWFsaXplKGUpe2xldCByPXRoaXMsdD17fTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKG4sbyk9PntsZXQgaT1zLmZpbmRLZXkodCxvKTtpZihpKXtyW2ldPWRBKG4pLGRlbGV0ZSByW29dO3JldHVybn1sZXQgQz1lP1ByKG8pOlN0cmluZyhvKS50cmltKCk7QyE9PW8mJmRlbGV0ZSByW29dLHJbQ109ZEEobiksdFtDXT0hMH0pLHRoaXN9Y29uY2F0KC4uLmUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLmUpfXRvSlNPTihlKXtsZXQgcj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBzLmZvckVhY2godGhpcywodCxuKT0+e3QhPW51bGwmJnQhPT0hMSYmKHJbbl09ZSYmcy5pc0FycmF5KHQpP3Quam9pbigiLCAiKTp0KX0pLHJ9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2Uscl0pPT5lKyI6ICIrcikuam9pbihgCmApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzP2U6bmV3IHRoaXMoZSl9c3RhdGljIGNvbmNhdChlLC4uLnIpe2xldCB0PW5ldyB0aGlzKGUpO3JldHVybiByLmZvckVhY2gobj0+dC5zZXQobikpLHR9c3RhdGljIGFjY2Vzc29yKGUpe2xldCB0PSh0aGlzW1dlXT10aGlzW1dlXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLG49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gbyhpKXtsZXQgQz0kKGkpO3RbQ118fChKcihuLGkpLHRbQ109ITApfXJldHVybiBzLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKG8pOm8oZSksdGhpc319O0suYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO3MucmVkdWNlRGVzY3JpcHRvcnMoSy5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCByPWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHQpe3RoaXNbcl09dH19fSk7cy5mcmVlemVNZXRob2RzKEspO3ZhciBTPUs7ZnVuY3Rpb24gQUEoQSxlKXtsZXQgcj10aGlzfHxxLHQ9ZXx8cixuPVMuZnJvbSh0LmhlYWRlcnMpLG89dC5kYXRhO3JldHVybiBzLmZvckVhY2goQSxmdW5jdGlvbihDKXtvPUMuY2FsbChyLG8sbi5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxuLm5vcm1hbGl6ZSgpLG99ZnVuY3Rpb24gZUEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBqZShBLGUscil7cC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixwLkVSUl9DQU5DRUxFRCxlLHIpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9cy5pbmhlcml0cyhqZSxwLHtfX0NBTkNFTF9fOiEwfSk7dmFyIHg9amU7ZnVuY3Rpb24gX0EoQSxlLHIpe2xldCB0PXIuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFyLnN0YXR1c3x8IXR8fHQoci5zdGF0dXMpP0Eocik6ZShuZXcgcCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Iuc3RhdHVzLFtwLkVSUl9CQURfUkVRVUVTVCxwLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3Ioci5zdGF0dXMvMTAwKS00XSxyLmNvbmZpZyxyLnJlcXVlc3QscikpfXZhciB2ZT1ELmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHIsdCxuLG8pe2xldCBpPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO3MuaXNOdW1iZXIocikmJmkucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHIpLnRvR01UU3RyaW5nKCkpLHMuaXNTdHJpbmcodCkmJmkucHVzaCgicGF0aD0iK3QpLHMuaXNTdHJpbmcobikmJmkucHVzaCgiZG9tYWluPSIrbiksbz09PSEwJiZpLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1pLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBWQShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIHpBKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiB0QShBLGUpe3JldHVybiBBJiYhVkEoZSk/ekEoQSxlKTplfXZhciBfZT1ELmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksdDtmdW5jdGlvbiBuKG8pe2xldCBpPW87cmV0dXJuIGUmJihyLnNldEF0dHJpYnV0ZSgiaHJlZiIsaSksaT1yLmhyZWYpLHIuc2V0QXR0cmlidXRlKCJocmVmIixpKSx7aHJlZjpyLmhyZWYscHJvdG9jb2w6ci5wcm90b2NvbD9yLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpyLmhvc3Qsc2VhcmNoOnIuc2VhcmNoP3Iuc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6ci5oYXNoP3IuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnIuaG9zdG5hbWUscG9ydDpyLnBvcnQscGF0aG5hbWU6ci5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/ci5wYXRobmFtZToiLyIrci5wYXRobmFtZX19cmV0dXJuIHQ9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oaSl7bGV0IEM9cy5pc1N0cmluZyhpKT9uKGkpOmk7cmV0dXJuIEMucHJvdG9jb2w9PT10LnByb3RvY29sJiZDLmhvc3Q9PT10Lmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIFpBKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBNcihBLGUpe0E9QXx8MTA7bGV0IHI9bmV3IEFycmF5KEEpLHQ9bmV3IEFycmF5KEEpLG49MCxvPTAsaTtyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKGwpe2xldCBCPURhdGUubm93KCksST10W29dO2l8fChpPUIpLHJbbl09bCx0W25dPUI7bGV0IGE9byxRPTA7Zm9yKDthIT09bjspUSs9clthKytdLGE9YSVBO2lmKG49KG4rMSklQSxuPT09byYmKG89KG8rMSklQSksQi1pPGUpcmV0dXJuO2xldCBnPUkmJkItSTtyZXR1cm4gZz9NYXRoLnJvdW5kKFEqMWUzL2cpOnZvaWQgMH19dmFyIFZlPU1yO2Z1bmN0aW9uIHplKEEsZSl7bGV0IHI9MCx0PVZlKDUwLDI1MCk7cmV0dXJuIG49PntsZXQgbz1uLmxvYWRlZCxpPW4ubGVuZ3RoQ29tcHV0YWJsZT9uLnRvdGFsOnZvaWQgMCxDPW8tcixsPXQoQyksQj1vPD1pO3I9bztsZXQgST17bG9hZGVkOm8sdG90YWw6aSxwcm9ncmVzczppP28vaTp2b2lkIDAsYnl0ZXM6QyxyYXRlOmx8fHZvaWQgMCxlc3RpbWF0ZWQ6bCYmaSYmQj8oaS1vKS9sOnZvaWQgMCxldmVudDpufTtJW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShJKX19dmFyIEhyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsWmU9SHImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLHQpe2xldCBuPUEuZGF0YSxvPVMuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6aSx3aXRoWFNSRlRva2VuOkN9PUEsbDtmdW5jdGlvbiBCKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShsKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpfWxldCBJO2lmKHMuaXNGb3JtRGF0YShuKSl7aWYoRC5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fEQuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KW8uc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEk9by5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbRSwuLi51XT1JP0kuc3BsaXQoIjsiKS5tYXAobT0+bS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtvLnNldENvbnRlbnRUeXBlKFtFfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBhPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBFPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO28uc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKEUrIjoiK3UpKX1sZXQgUT10QShBLmJhc2VVUkwsQS51cmwpO2Eub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoUSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxhLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIGcoKXtpZighYSlyZXR1cm47bGV0IEU9Uy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYSYmYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksbT17ZGF0YTohaXx8aT09PSJ0ZXh0Inx8aT09PSJqc29uIj9hLnJlc3BvbnNlVGV4dDphLnJlc3BvbnNlLHN0YXR1czphLnN0YXR1cyxzdGF0dXNUZXh0OmEuc3RhdHVzVGV4dCxoZWFkZXJzOkUsY29uZmlnOkEscmVxdWVzdDphfTtfQShmdW5jdGlvbihVKXtyKFUpLEIoKX0sZnVuY3Rpb24oVSl7dChVKSxCKCl9LG0pLGE9bnVsbH1pZigib25sb2FkZW5kImluIGE/YS5vbmxvYWRlbmQ9ZzphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFhfHxhLnJlYWR5U3RhdGUhPT00fHxhLnN0YXR1cz09PTAmJiEoYS5yZXNwb25zZVVSTCYmYS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoZyl9LGEub25hYm9ydD1mdW5jdGlvbigpe2EmJih0KG5ldyBwKCJSZXF1ZXN0IGFib3J0ZWQiLHAuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbCl9LGEub25lcnJvcj1mdW5jdGlvbigpe3QobmV3IHAoIk5ldHdvcmsgRXJyb3IiLHAuRVJSX05FVFdPUkssQSxhKSksYT1udWxsfSxhLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixtPUEudHJhbnNpdGlvbmFsfHx1QTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksdChuZXcgcCh1LG0uY2xhcmlmeVRpbWVvdXRFcnJvcj9wLkVUSU1FRE9VVDpwLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGx9LEQuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoQyYmcy5pc0Z1bmN0aW9uKEMpJiYoQz1DKEEpKSxDfHxDIT09ITEmJl9lKFEpKSl7bGV0IEU9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmdmUucmVhZChBLnhzcmZDb29raWVOYW1lKTtFJiZvLnNldChBLnhzcmZIZWFkZXJOYW1lLEUpfW49PT12b2lkIDAmJm8uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYSYmcy5mb3JFYWNoKG8udG9KU09OKCksZnVuY3Rpb24odSxtKXthLnNldFJlcXVlc3RIZWFkZXIobSx1KX0pLHMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoYS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksaSYmaSE9PSJqc29uIiYmKGEucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHplKEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS51cGxvYWQmJmEudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix6ZShBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYobD1FPT57YSYmKHQoIUV8fEUudHlwZT9uZXcgeChudWxsLEEsYSk6RSksYS5hYm9ydCgpLGE9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9sKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpKSk7bGV0IGM9WkEoUSk7aWYoYyYmRC5wcm90b2NvbHMuaW5kZXhPZihjKT09PS0xKXt0KG5ldyBwKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2MrIjoiLHAuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59YS5zZW5kKG58fG51bGwpfSl9O3ZhciBYQT17aHR0cDpRQSx4aHI6WmV9O3MuZm9yRWFjaChYQSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBYZT1BPT5gLSAke0F9YCxZcj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbUE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSxyLHQsbj17fTtmb3IobGV0IG89MDtvPGU7bysrKXtyPUFbb107bGV0IGk7aWYodD1yLCFZcihyKSYmKHQ9WEFbKGk9U3RyaW5nKHIpKS50b0xvd2VyQ2FzZSgpXSx0PT09dm9pZCAwKSl0aHJvdyBuZXcgcChgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHQpYnJlYWs7bltpfHwiIyIrb109dH1pZighdCl7bGV0IG89T2JqZWN0LmVudHJpZXMobikubWFwKChbQyxsXSk9PmBhZGFwdGVyICR7Q30gYCsobD09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9vLmxlbmd0aD4xP2BzaW5jZSA6CmArby5tYXAoWGUpLmpvaW4oYApgKToiICIrWGUob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgcCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiB0fSxhZGFwdGVyczpYQX07ZnVuY3Rpb24gJEEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHgobnVsbCxBKX1mdW5jdGlvbiB5QShBKXtyZXR1cm4gJEEoQSksQS5oZWFkZXJzPVMuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1BQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fHEuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gJEEoQSksdC5kYXRhPUFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHQpLHQuaGVhZGVycz1TLmZyb20odC5oZWFkZXJzKSx0fSxmdW5jdGlvbih0KXtyZXR1cm4gZUEodCl8fCgkQShBKSx0JiZ0LnJlc3BvbnNlJiYodC5yZXNwb25zZS5kYXRhPUFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHQucmVzcG9uc2UpLHQucmVzcG9uc2UuaGVhZGVycz1TLmZyb20odC5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHQpfSl9dmFyICRlPUE9PkEgaW5zdGFuY2VvZiBTP3suLi5BfTpBO2Z1bmN0aW9uIEwoQSxlKXtlPWV8fHt9O2xldCByPXt9O2Z1bmN0aW9uIHQoQixJLGEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQikmJnMuaXNQbGFpbk9iamVjdChJKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOmF9LEIsSSk6cy5pc1BsYWluT2JqZWN0KEkpP3MubWVyZ2Uoe30sSSk6cy5pc0FycmF5KEkpP0kuc2xpY2UoKTpJfWZ1bmN0aW9uIG4oQixJLGEpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEIpKXJldHVybiB0KHZvaWQgMCxCLGEpfWVsc2UgcmV0dXJuIHQoQixJLGEpfWZ1bmN0aW9uIG8oQixJKXtpZighcy5pc1VuZGVmaW5lZChJKSlyZXR1cm4gdCh2b2lkIDAsSSl9ZnVuY3Rpb24gaShCLEkpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEIpKXJldHVybiB0KHZvaWQgMCxCKX1lbHNlIHJldHVybiB0KHZvaWQgMCxJKX1mdW5jdGlvbiBDKEIsSSxhKXtpZihhIGluIGUpcmV0dXJuIHQoQixJKTtpZihhIGluIEEpcmV0dXJuIHQodm9pZCAwLEIpfWxldCBsPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOkMsaGVhZGVyczooQixJKT0+bigkZShCKSwkZShJKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihJKXtsZXQgYT1sW0ldfHxuLFE9YShBW0ldLGVbSV0sSSk7cy5pc1VuZGVmaW5lZChRKSYmYSE9PUN8fChyW0ldPVEpfSkscn12YXIgaEE9IjEuNi44Ijt2YXIgQWU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57QWVbQV09ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIEF0PXt9O0FlLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHIsdCl7ZnVuY3Rpb24gbihvLGkpe3JldHVybiJbQXhpb3MgdiIraEErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitpKyh0PyIuICIrdDoiIil9cmV0dXJuKG8saSxDKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgcChuKGksIiBoYXMgYmVlbiByZW1vdmVkIisocj8iIGluICIrcjoiIikpLHAuRVJSX0RFUFJFQ0FURUQpO3JldHVybiByJiYhQXRbaV0mJihBdFtpXT0hMCxjb25zb2xlLndhcm4obihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IityKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLGksQyk6ITB9fTtmdW5jdGlvbiBxcihBLGUscil7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBwKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixwLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxuPXQubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IG89dFtuXSxpPWVbb107aWYoaSl7bGV0IEM9QVtvXSxsPUM9PT12b2lkIDB8fGkoQyxvLEEpO2lmKGwhPT0hMCl0aHJvdyBuZXcgcCgib3B0aW9uICIrbysiIG11c3QgYmUgIitsLHAuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHIhPT0hMCl0aHJvdyBuZXcgcCgiVW5rbm93biBvcHRpb24gIitvLHAuRVJSX0JBRF9PUFRJT04pfX12YXIgd0E9e2Fzc2VydE9wdGlvbnM6cXIsdmFsaWRhdG9yczpBZX07dmFyIE89d0EudmFsaWRhdG9ycyxXPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgcUEscmVzcG9uc2U6bmV3IHFBfX1hc3luYyByZXF1ZXN0KGUscil7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUscil9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgbz1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjt0LnN0YWNrP28mJiFTdHJpbmcodC5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJih0LnN0YWNrKz1gCmArbyk6dC5zdGFjaz1vfXRocm93IHR9fV9yZXF1ZXN0KGUscil7dHlwZW9mIGU9PSJzdHJpbmciPyhyPXJ8fHt9LHIudXJsPWUpOnI9ZXx8e30scj1MKHRoaXMuZGVmYXVsdHMscik7bGV0e3RyYW5zaXRpb25hbDp0LHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOm99PXI7dCE9PXZvaWQgMCYmd0EuYXNzZXJ0T3B0aW9ucyh0LHtzaWxlbnRKU09OUGFyc2luZzpPLnRyYW5zaXRpb25hbChPLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOk8udHJhbnNpdGlvbmFsKE8uYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpPLnRyYW5zaXRpb25hbChPLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKHMuaXNGdW5jdGlvbihuKT9yLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTp3QS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpPLmZ1bmN0aW9uLHNlcmlhbGl6ZTpPLmZ1bmN0aW9ufSwhMCkpLHIubWV0aG9kPShyLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPW8mJnMubWVyZ2Uoby5jb21tb24sb1tyLm1ldGhvZF0pO28mJnMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxjPT57ZGVsZXRlIG9bY119KSxyLmhlYWRlcnM9Uy5jb25jYXQoaSxvKTtsZXQgQz1bXSxsPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihFKXt0eXBlb2YgRS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZFLnJ1bldoZW4ocik9PT0hMXx8KGw9bCYmRS5zeW5jaHJvbm91cyxDLnVuc2hpZnQoRS5mdWxmaWxsZWQsRS5yZWplY3RlZCkpfSk7bGV0IEI9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihFKXtCLnB1c2goRS5mdWxmaWxsZWQsRS5yZWplY3RlZCl9KTtsZXQgSSxhPTAsUTtpZighbCl7bGV0IGM9W3lBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoYy51bnNoaWZ0LmFwcGx5KGMsQyksYy5wdXNoLmFwcGx5KGMsQiksUT1jLmxlbmd0aCxJPVByb21pc2UucmVzb2x2ZShyKTthPFE7KUk9SS50aGVuKGNbYSsrXSxjW2ErK10pO3JldHVybiBJfVE9Qy5sZW5ndGg7bGV0IGc9cjtmb3IoYT0wO2E8UTspe2xldCBjPUNbYSsrXSxFPUNbYSsrXTt0cnl7Zz1jKGcpfWNhdGNoKHUpe0UuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7ST15QS5jYWxsKHRoaXMsZyl9Y2F0Y2goYyl7cmV0dXJuIFByb21pc2UucmVqZWN0KGMpfWZvcihhPTAsUT1CLmxlbmd0aDthPFE7KUk9SS50aGVuKEJbYSsrXSxCW2ErK10pO3JldHVybiBJfWdldFVyaShlKXtlPUwodGhpcy5kZWZhdWx0cyxlKTtsZXQgcj10QShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBYKHIsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKX19O3MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oZSl7Vy5wcm90b3R5cGVbZV09ZnVuY3Rpb24ocix0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEwodHx8e30se21ldGhvZDplLHVybDpyLGRhdGE6KHR8fHt9KS5kYXRhfSkpfX0pO3MuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKG8saSxDKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEwoQ3x8e30se21ldGhvZDplLGhlYWRlcnM6dD97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6byxkYXRhOml9KSl9fVcucHJvdG90eXBlW2VdPXIoKSxXLnByb3RvdHlwZVtlKyJGb3JtIl09cighMCl9KTt2YXIgckE9Vzt2YXIgZWU9Y2xhc3MgQXtjb25zdHJ1Y3RvcihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHI7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG8pe3I9b30pO2xldCB0PXRoaXM7dGhpcy5wcm9taXNlLnRoZW4obj0+e2lmKCF0Ll9saXN0ZW5lcnMpcmV0dXJuO2xldCBvPXQuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtvLS0gPjA7KXQuX2xpc3RlbmVyc1tvXShuKTt0Ll9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPW49PntsZXQgbyxpPW5ldyBQcm9taXNlKEM9Pnt0LnN1YnNjcmliZShDKSxvPUN9KS50aGVuKG4pO3JldHVybiBpLmNhbmNlbD1mdW5jdGlvbigpe3QudW5zdWJzY3JpYmUobyl9LGl9LGUoZnVuY3Rpb24obyxpLEMpe3QucmVhc29ufHwodC5yZWFzb249bmV3IHgobyxpLEMpLHIodC5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoZSl7aWYodGhpcy5yZWFzb24pe2UodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX11bnN1YnNjcmliZShlKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTtyIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UociwxKX1zdGF0aWMgc291cmNlKCl7bGV0IGU7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKG4pe2U9bn0pLGNhbmNlbDplfX19LGV0PWVlO2Z1bmN0aW9uIHRlKEEpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gQS5hcHBseShudWxsLHIpfX1mdW5jdGlvbiByZShBKXtyZXR1cm4gcy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgbmU9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKG5lKS5mb3JFYWNoKChbQSxlXSk9PntuZVtlXT1BfSk7dmFyIHR0PW5lO2Z1bmN0aW9uIHJ0KEEpe2xldCBlPW5ldyByQShBKSxyPVYockEucHJvdG90eXBlLnJlcXVlc3QsZSk7cmV0dXJuIHMuZXh0ZW5kKHIsckEucHJvdG90eXBlLGUse2FsbE93bktleXM6ITB9KSxzLmV4dGVuZChyLGUsbnVsbCx7YWxsT3duS2V5czohMH0pLHIuY3JlYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBydChMKEEsbikpfSxyfXZhciB5PXJ0KHEpO3kuQXhpb3M9ckE7eS5DYW5jZWxlZEVycm9yPXg7eS5DYW5jZWxUb2tlbj1ldDt5LmlzQ2FuY2VsPWVBO3kuVkVSU0lPTj1oQTt5LnRvRm9ybURhdGE9VDt5LkF4aW9zRXJyb3I9cDt5LkNhbmNlbD15LkNhbmNlbGVkRXJyb3I7eS5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfTt5LnNwcmVhZD10ZTt5LmlzQXhpb3NFcnJvcj1yZTt5Lm1lcmdlQ29uZmlnPUw7eS5BeGlvc0hlYWRlcnM9Uzt5LmZvcm1Ub0pTT049QT0+cEEocy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTt5LmdldEFkYXB0ZXI9bUEuZ2V0QWRhcHRlcjt5Lkh0dHBTdGF0dXNDb2RlPXR0O3kuZGVmYXVsdD15O3ZhciBqPXk7dmFye0F4aW9zOkRhLEF4aW9zRXJyb3I6U2EsQ2FuY2VsZWRFcnJvcjpiYSxpc0NhbmNlbDpGYSxDYW5jZWxUb2tlbjprYSxWRVJTSU9OOlJhLGFsbDpVYSxDYW5jZWw6TmEsaXNBeGlvc0Vycm9yOkdhLHNwcmVhZDpMYSx0b0Zvcm1EYXRhOlRhLEF4aW9zSGVhZGVyczp4YSxIdHRwU3RhdHVzQ29kZTpPYSxmb3JtVG9KU09OOlBhLGdldEFkYXB0ZXI6SmEsbWVyZ2VDb25maWc6TWF9PWo7YXN5bmMgZnVuY3Rpb24gS3IoQSxlKXtsZXQgcj1BLHQ9bnVsbDtpZihyPT1udWxsKXQ9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYoci5zdGFydHNXaXRoKCJodHRwIikpe2xldCBuPWF3YWl0IGouZ2V0KHIse3Jlc3BvbnNlVHlwZToiYmxvYiIscGFyYW1zOmV9KSxvPVVSTC5jcmVhdGVPYmplY3RVUkwobi5kYXRhKTt0PW5ldyBXb3JrZXIobyx7dHlwZToibW9kdWxlIn0pfWVsc2UgdD1uZXcgV29ya2VyKHIse3R5cGU6Im1vZHVsZSJ9KTtyZXR1cm4gdH12YXIgbkE9S3I7ZnVuY3Rpb24gbnQoQSl7bGV0IGU9eEEoQSkscj1BO3JldHVybiByLnRlcm1pbmF0ZWQ9ITEsci53b3JrZXJQcm94eT1lLHIub3JpZ2luYWxUZXJtaW5hdGU9ci50ZXJtaW5hdGUsci50ZXJtaW5hdGU9KCk9PntyLnRlcm1pbmF0ZWQ9ITAsci53b3JrZXJQcm94eVtUQV0oKSxyLm9yaWdpbmFsVGVybWluYXRlKCl9LHt3b3JrZXJQcm94eTplLHdvcmtlcjpyfX1hc3luYyBmdW5jdGlvbiBXcihBLGUscil7bGV0IHQ7aWYoQSE9bnVsbCl7bGV0IG89QTtyZXR1cm4gby53b3JrZXJQcm94eSE9PXZvaWQgMD8odD1vLndvcmtlclByb3h5LHt3b3JrZXJQcm94eTp0LHdvcmtlcjpvfSk6bnQoQSl9bGV0IG49YXdhaXQgbkEoZSxyKTtyZXR1cm4gbnQobil9dmFyIG90PVdyO2FzeW5jIGZ1bmN0aW9uIGpyKEEsZSxyKXtsZXQgdD0idW5rbm93biI7dHlwZW9mIEEhPSJzdHJpbmciP3Q9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP3Q9QTp0PXR5cGVvZiBlPCJ1Ij9gJHtlfS8ke0F9YDpBLHQuZW5kc1dpdGgoIi5qcyIpJiYodD10LnN1YnN0cmluZygwLHQubGVuZ3RoLTMpKSx0LmVuZHNXaXRoKCIud2FzbSIpJiYodD10LnN1YnN0cmluZygwLHQubGVuZ3RoLTUpKTtsZXQgbj1gJHt0fS53YXNtYCxpPShhd2FpdCBqLmdldChuLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6cn0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7dH0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTppfSl9dmFyIGl0PWpyO3ZhciBhdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgZ3Q9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsc3Q9bmV3IFRleHRFbmNvZGVyLEl0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiB2cihBLGUpe2xldCByPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHQ9QS5mc19vcGVuKGUsci5mbGFncyksbz1BLmZzX3N0YXQoZSkuc2l6ZSxpPW51bGw7Z3Q/aT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIobyk6aT1uZXcgQXJyYXlCdWZmZXIobyk7bGV0IEM9bmV3IFVpbnQ4QXJyYXkoaSk7cmV0dXJuIEEuZnNfcmVhZCh0LEMsMCxvLDApLEEuZnNfY2xvc2UodCksQ31mdW5jdGlvbiBDdChBLGUscil7bGV0IHQ9bnVsbDtndD90PW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTp0PW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgbj1uZXcgVWludDhBcnJheSh0KSxvPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHIpO3JldHVybiBuLnNldChvKSxufWZ1bmN0aW9uIGgoQSxlLHIsdCl7bGV0IG49MDtyZXR1cm4gZSE9PW51bGwmJihuPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHIsdCxlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxuKSksbn1mdW5jdGlvbiBKKEEsZSxyKXtsZXQgdD1KU09OLnN0cmluZ2lmeShlKSxuPUEubGVuZ3RoQnl0ZXNVVEY4KHQpKzEsbz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHIsbl0pO0Euc3RyaW5nVG9VVEY4KHQsbyxuKX1mdW5jdGlvbiBiKEEsZSxyLHQpe2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUscl0pLG89QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxyXSksaT1DdChBLG4sbyk7cmV0dXJuIE4odCxpLmJ1ZmZlcil9ZnVuY3Rpb24gREEoQSxlKXtsZXQgcj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSx0PUEuVVRGOFRvU3RyaW5nKHIpO3JldHVybiBKU09OLnBhcnNlKHQpfWZ1bmN0aW9uIF9yKEEsZSxyLHQpe3QhPW51bGwmJnQubGVuZ3RoPjAmJnQuZm9yRWFjaChmdW5jdGlvbihCLEkpe3N3aXRjaChCLnR5cGUpe2Nhc2UgZC5UZXh0U3RyZWFtOntsZXQgYT1zdC5lbmNvZGUoQi5kYXRhLmRhdGEpLFE9aChBLGEsSSwwKSxnPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YH07SihBLGcsSSk7YnJlYWt9Y2FzZSBkLkpzb25Db21wYXRpYmxlOntsZXQgYT1zdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoQi5kYXRhKSksUT1oKEEsYSxJLDApLGc9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTtKKEEsZyxJKTticmVha31jYXNlIGQuQmluYXJ5U3RyZWFtOntsZXQgYT1CLmRhdGEuZGF0YSxRPWgoQSxhLEksMCksZz17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWB9O0ooQSxnLEkpO2JyZWFrfWNhc2UgZC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoQi5kYXRhLnBhdGgsQi5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgZC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShCLmRhdGEucGF0aCxCLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBkLkltYWdlOntsZXQgYT1CLmRhdGEsUT1oKEEsYS5kYXRhLEksMCksZz1oKEEsYS5kaXJlY3Rpb24sSSwxKSxjPXR5cGVvZiBhLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGEubWV0YWRhdGEuZW50cmllcygpKTpbXSxFPXtpbWFnZVR5cGU6YS5pbWFnZVR5cGUsbmFtZTphLm5hbWUsb3JpZ2luOmEub3JpZ2luLHNwYWNpbmc6YS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2d9YCxzaXplOmEuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG1ldGFkYXRhOmN9O0ooQSxFLEkpO2JyZWFrfWNhc2UgZC5NZXNoOntsZXQgYT1CLmRhdGEsUT1oKEEsYS5wb2ludHMsSSwwKSxnPWgoQSxhLmNlbGxzLEksMSksYz1oKEEsYS5wb2ludERhdGEsSSwyKSxFPWgoQSxhLmNlbGxEYXRhLEksMyksdT17bWVzaFR5cGU6YS5tZXNoVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxudW1iZXJPZkNlbGxzOmEubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2d9YCxjZWxsQnVmZmVyU2l6ZTphLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWB9O0ooQSx1LEkpO2JyZWFrfWNhc2UgZC5Qb2ludFNldDp7bGV0IGE9Qi5kYXRhLFE9aChBLGEucG9pbnRzLEksMCksZz1oKEEsYS5wb2ludERhdGEsSSwxKSxjPXtwb2ludFNldFR5cGU6YS5wb2ludFNldFR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gfTtKKEEsYyxJKTticmVha31jYXNlIGQuUG9seURhdGE6e2xldCBhPUIuZGF0YSxRPWgoQSxhLnBvaW50cyxJLDApLGc9aChBLGEudmVydGljZXMsSSwxKSxjPWgoQSxhLmxpbmVzLEksMiksRT1oKEEsYS5wb2x5Z29ucyxJLDMpLHU9aChBLGEudHJpYW5nbGVTdHJpcHMsSSw0KSxtPWgoQSxhLnBvaW50RGF0YSxJLDUpLFI9aChBLGEucG9pbnREYXRhLEksNiksVT17cG9seURhdGFUeXBlOmEucG9seURhdGFUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLHZlcnRpY2VzQnVmZmVyU2l6ZTphLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2d9YCxsaW5lc0J1ZmZlclNpemU6YS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAscG9seWdvbnNCdWZmZXJTaXplOmEucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTphLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHttfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtKKEEsVSxJKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgbj1BLnN0YWNrU2F2ZSgpLG89MDt0cnl7bz1BLmNhbGxNYWluKGUuc2xpY2UoKSl9Y2F0Y2goQil7dGhyb3cgdHlwZW9mIEI9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoQikpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksQn1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKG4pfWxldCBpPUEuZ2V0TW9kdWxlU3Rkb3V0KCksQz1BLmdldE1vZHVsZVN0ZGVycigpLGw9W107cmV0dXJuIHIhPW51bGwmJnIubGVuZ3RoPjAmJm89PT0wJiZyLmZvckVhY2goZnVuY3Rpb24oQixJKXtsZXQgYT1udWxsO3N3aXRjaChCLnR5cGUpe2Nhc2UgZC5UZXh0U3RyZWFtOntsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxjPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLEU9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGcsYyk7YT17ZGF0YTpJdC5kZWNvZGUoRSl9O2JyZWFrfWNhc2UgZC5Kc29uQ29tcGF0aWJsZTp7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksYz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixnLGMpO2E9SlNPTi5wYXJzZShJdC5kZWNvZGUoRSkpO2JyZWFrfWNhc2UgZC5CaW5hcnlTdHJlYW06e2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLGM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSk7YT17ZGF0YTpDdChBLGcsYyl9O2JyZWFrfWNhc2UgZC5UZXh0RmlsZTp7YT17cGF0aDpCLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoQi5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIGQuQmluYXJ5RmlsZTp7YT17cGF0aDpCLmRhdGEucGF0aCxkYXRhOnZyKEEsQi5kYXRhLnBhdGgpfTticmVha31jYXNlIGQuSW1hZ2U6e2xldCBnPURBKEEsSSk7Zy5kYXRhPWIoQSxJLDAsZy5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksZy5kaXJlY3Rpb249YihBLEksMSx3LkZsb2F0NjQpLGcubWV0YWRhdGE9bmV3IE1hcChnLm1ldGFkYXRhKSxhPWc7YnJlYWt9Y2FzZSBkLk1lc2g6e2xldCBnPURBKEEsSSk7Zy5udW1iZXJPZlBvaW50cz4wP2cucG9pbnRzPWIoQSxJLDAsZy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmcucG9pbnRzPU4oZy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mQ2VsbHM+MD9nLmNlbGxzPWIoQSxJLDEsZy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6Zy5jZWxscz1OKGcubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mUG9pbnRQaXhlbHM+MD9nLnBvaW50RGF0YT1iKEEsSSwyLGcubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOmcucG9pbnREYXRhPU4oZy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Zy5jZWxsRGF0YT1iKEEsSSwzLGcubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5jZWxsRGF0YT1OKGcubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9ZzticmVha31jYXNlIGQuUG9pbnRTZXQ6e2xldCBnPURBKEEsSSk7Y29uc29sZS5sb2coZyksZy5udW1iZXJPZlBvaW50cz4wP2cucG9pbnRzPWIoQSxJLDAsZy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpnLnBvaW50cz1OKGcucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZQb2ludFBpeGVscz4wP2cucG9pbnREYXRhPWIoQSxJLDEsZy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOmcucG9pbnREYXRhPU4oZy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPWc7YnJlYWt9Y2FzZSBkLlBvbHlEYXRhOntsZXQgZz1EQShBLEkpO2cubnVtYmVyT2ZQb2ludHM+MD9nLnBvaW50cz1iKEEsSSwwLHcuRmxvYXQzMik6Zy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxnLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP2cudmVydGljZXM9YihBLEksMSxmLlVJbnQzMik6Zy52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksZy5saW5lc0J1ZmZlclNpemU+MD9nLmxpbmVzPWIoQSxJLDIsZi5VSW50MzIpOmcubGluZXM9bmV3IFVpbnQzMkFycmF5LGcucG9seWdvbnNCdWZmZXJTaXplPjA/Zy5wb2x5Z29ucz1iKEEsSSwzLGYuVUludDMyKTpnLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxnLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP2cudHJpYW5nbGVTdHJpcHM9YihBLEksNCxmLlVJbnQzMik6Zy50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksZy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Zy5wb2ludERhdGE9YihBLEksNSxnLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9TihnLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Zy5jZWxsRGF0YT1iKEEsSSw2LGcucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOmcuY2VsbERhdGE9TihnLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1nO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IFE9e3R5cGU6Qi50eXBlLGRhdGE6YX07bC5wdXNoKFEpfSkse3JldHVyblZhbHVlOm8sc3Rkb3V0Omksc3RkZXJyOkMsb3V0cHV0czpsfX12YXIgQnQ9X3I7dmFyIFZyPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiB6cihBLGUpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHI9W107Zm9yKGxldCB0PTA7dDxBLmxlbmd0aDt0Kyspe2xldCBuPVpyKEFbdF0sZSk7biE9PW51bGwmJnIucHVzaChuKX1yZXR1cm4gcn1mdW5jdGlvbiBacihBLGUpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHI9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/cj1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihyPUEpLFZyJiZyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDplP3I6ci5zbGljZSgwKX12YXIgbHQ9enI7ZnVuY3Rpb24gWHIoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIGN0PVhyO2Z1bmN0aW9uICRyKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciBFdD0kcjtmdW5jdGlvbiBBbihBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgUXQ9QW47dmFyIGVuO2Z1bmN0aW9uIFNBKCl7cmV0dXJuIGVufXZhciB0bjtmdW5jdGlvbiBmdCgpe3JldHVybiB0bn12YXIgcm47ZnVuY3Rpb24gYkEoKXtyZXR1cm4gcm59dmFyIG9lPW5ldyBNYXA7ZnVuY3Rpb24gbm4oKXtsZXQgQT1iQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW51bGwpLEF9ZnVuY3Rpb24gdXQoKXtsZXQgQT1TQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW5ldyBVUkwoIi9waXBlbGluZXMiLGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbikuaHJlZiksQX1mdW5jdGlvbiBGQSgpe2xldCBBPWZ0KCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9e30pLEF9YXN5bmMgZnVuY3Rpb24gb24oQSxlLHIpe2xldCB0PUEsbj1BO2lmKHR5cGVvZiBBIT0ic3RyaW5nIiYmKHQ9bmV3IFVSTChBLmhyZWYpLG49dC5ocmVmKSxvZS5oYXMobikpcmV0dXJuIG9lLmdldChuKTt7bGV0IG89YXdhaXQgaXQoQSxlPy50b1N0cmluZygpPz91dCgpLHI/P0ZBKCkpO3JldHVybiBvZS5zZXQobixvKSxvfX1hc3luYyBmdW5jdGlvbiBhbihBLGUscix0LG4pe2lmKCFhd2FpdCBhdCgpKXtsZXQgdT0iV2ViQXNzZW1ibHkgU0lNRCBzdXBwb3J0IGlzIHJlcXVpcmVkIC0tIHBsZWFzZSB1cGRhdGUgeW91ciBicm93c2VyLiI7dGhyb3cgYWxlcnQodSksbmV3IEVycm9yKHUpfWxldCBvPW4/LndlYldvcmtlcj8/bnVsbDtpZihvPT09ITEpe2xldCB1PWF3YWl0IG9uKEEudG9TdHJpbmcoKSxuPy5waXBlbGluZUJhc2VVcmwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/RkEoKSk7cmV0dXJuIEJ0KHUsZSxyLHQpfWxldCBpPW8sQz1uPy5waXBlbGluZVdvcmtlclVybD8/bm4oKSxsPXR5cGVvZiBDIT0ic3RyaW5nIiYmdHlwZW9mIEM/LmhyZWY8InUiP0MuaHJlZjpDLHt3b3JrZXJQcm94eTpCLHdvcmtlcjpJfT1hd2FpdCBvdChpLGwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/RkEoKSk7aT1JO2xldCBhPVtdO3QhPW51bGwmJnQubGVuZ3RoPjAmJnQuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1LnR5cGU9PT1kLkJpbmFyeVN0cmVhbSl7bGV0IG09dS5kYXRhLmRhdGE7YS5wdXNoKG0pfWVsc2UgaWYodS50eXBlPT09ZC5CaW5hcnlGaWxlKXtsZXQgbT11LmRhdGEuZGF0YTthLnB1c2gobSl9ZWxzZSBpZih1LnR5cGU9PT1kLkltYWdlKXtsZXQgbT11LmRhdGE7bS5kYXRhIT09bnVsbCYmYS5wdXNoKC4uLmN0KG0pKX1lbHNlIGlmKHUudHlwZT09PWQuTWVzaCl7bGV0IG09dS5kYXRhO2EucHVzaCguLi5FdChtKSl9ZWxzZSBpZih1LnR5cGU9PT1kLlBvbHlEYXRhKXtsZXQgbT11LmRhdGE7YS5wdXNoKC4uLlF0KG0pKX19KTtsZXQgUT1uPy5waXBlbGluZUJhc2VVcmw/P3V0KCksZz10eXBlb2YgUSE9InN0cmluZyImJnR5cGVvZiBRPy5ocmVmPCJ1Ij9RLmhyZWY6USxjPXQhPW51bGw/T0EodCxsdChhLG4/Lm5vQ29weSkpOm51bGwsRT1hd2FpdCBCLnJ1blBpcGVsaW5lKEEudG9TdHJpbmcoKSxnLGUscixjLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P0ZBKCkpO3JldHVybntyZXR1cm5WYWx1ZTpFLnJldHVyblZhbHVlLHN0ZG91dDpFLnN0ZG91dCxzdGRlcnI6RS5zdGRlcnIsb3V0cHV0czpFLm91dHB1dHMsd2ViV29ya2VyOml9fXZhciBvQT1hbjt2YXIgc249bnVsbDtmdW5jdGlvbiBwdCgpe3JldHVybiBzbn12YXIgaWUsSW49YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGl0ay13YXNtL2NvbXBhcmUtaW1hZ2VzQCR7UkF9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBScyhBKXtpZT1BfWZ1bmN0aW9uIGtBKCl7aWYodHlwZW9mIGllPCJ1IilyZXR1cm4gaWU7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6SW59dmFyIGFlLGduPW51bGw7ZnVuY3Rpb24gZHQoQSl7YWU9QX1mdW5jdGlvbiB2KCl7aWYodHlwZW9mIGFlPCJ1IilyZXR1cm4gYWU7bGV0IEE9YkEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6Z259dmFyIF89bnVsbDthc3luYyBmdW5jdGlvbiBtdCgpe2xldCBBPXYoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO189YXdhaXQgbkEoZSl9ZnVuY3Rpb24gT3MoQSl7Xz1BfWFzeW5jIGZ1bmN0aW9uIHl0KCl7aWYoXyE9PW51bGwpcmV0dXJuIF8udGVybWluYXRlZCYmYXdhaXQgbXQoKSxfO2xldCBBPXB0KCk7cmV0dXJuIEEhPT1udWxsP0E6KGF3YWl0IG10KCksXyl9YXN5bmMgZnVuY3Rpb24gQ24oQSxlPXtiYXNlbGluZUltYWdlczpbXX0pe2xldCByPVt7dHlwZTpkLkpzb25Db21wYXRpYmxlfSx7dHlwZTpkLkltYWdlfSx7dHlwZTpkLkltYWdlfV0sdD1be3R5cGU6ZC5JbWFnZSxkYXRhOkF9XSxuPVtdO2lmKG4ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiMSIpLG4ucHVzaCgiMiIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgZS5iYXNlbGluZUltYWdlczwidSIpe2lmKGUuYmFzZWxpbmVJbWFnZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCciYmFzZWxpbmUtaW1hZ2VzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO24ucHVzaCgiLS1iYXNlbGluZS1pbWFnZXMiKSxhd2FpdCBQcm9taXNlLmFsbChlLmJhc2VsaW5lSW1hZ2VzLm1hcChhc3luYyBFPT57bGV0IHU9dC5sZW5ndGgudG9TdHJpbmcoKTt0LnB1c2goe3R5cGU6ZC5JbWFnZSxkYXRhOkV9KSxuLnB1c2godSl9KSl9dHlwZW9mIGUuZGlmZmVyZW5jZVRocmVzaG9sZDwidSImJm4ucHVzaCgiLS1kaWZmZXJlbmNlLXRocmVzaG9sZCIsZS5kaWZmZXJlbmNlVGhyZXNob2xkLnRvU3RyaW5nKCkpLHR5cGVvZiBlLnJhZGl1c1RvbGVyYW5jZTwidSImJm4ucHVzaCgiLS1yYWRpdXMtdG9sZXJhbmNlIixlLnJhZGl1c1RvbGVyYW5jZS50b1N0cmluZygpKSx0eXBlb2YgZS5zcGF0aWFsVG9sZXJhbmNlPCJ1IiYmbi5wdXNoKCItLXNwYXRpYWwtdG9sZXJhbmNlIixlLnNwYXRpYWxUb2xlcmFuY2UudG9TdHJpbmcoKSksdHlwZW9mIGUubnVtYmVyT2ZQaXhlbHNUb2xlcmFuY2U8InUiJiZuLnB1c2goIi0tbnVtYmVyLW9mLXBpeGVscy10b2xlcmFuY2UiLGUubnVtYmVyT2ZQaXhlbHNUb2xlcmFuY2UudG9TdHJpbmcoKSksdHlwZW9mIGUuaWdub3JlQm91bmRhcnlQaXhlbHM8InUiJiZlLmlnbm9yZUJvdW5kYXJ5UGl4ZWxzJiZuLnB1c2goIi0taWdub3JlLWJvdW5kYXJ5LXBpeGVscyIpO2xldCBCPSJjb21wYXJlLWRvdWJsZS1pbWFnZXMiLHt3ZWJXb3JrZXI6SSxyZXR1cm5WYWx1ZTphLHN0ZGVycjpRLG91dHB1dHM6Z309YXdhaXQgb0EoQixuLHIsdCx7cGlwZWxpbmVCYXNlVXJsOmtBKCkscGlwZWxpbmVXb3JrZXJVcmw6digpLHdlYldvcmtlcjplPy53ZWJXb3JrZXI/P251bGx9KTtpZihhIT09MCl0aHJvdyBuZXcgRXJyb3IoUSk7cmV0dXJue3dlYldvcmtlcjpJLG1ldHJpY3M6Z1swXS5kYXRhLGRpZmZlcmVuY2VJbWFnZTpnWzFdLmRhdGEsZGlmZmVyZW5jZVVjaGFyMmRJbWFnZTpnWzJdLmRhdGF9fXZhciBzZT1Dbjthc3luYyBmdW5jdGlvbiBCbihBLGUpe2xldCByPWU7aWYoci5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSE9PXcuRmxvYXQ2NCl7bGV0IHQ7ZS5pbWFnZVR5cGUucGl4ZWxUeXBlIT09Ri5TY2FsYXImJmUuaW1hZ2VUeXBlLnBpeGVsVHlwZSE9PUYuVmFyaWFibGVMZW5ndGhWZWN0b3ImJih0PUYuVmFyaWFibGVMZW5ndGhWZWN0b3IpLHI9aUEoZSx7Y29tcG9uZW50VHlwZTp3LkZsb2F0NjQscGl4ZWxUeXBlOnR9KX1lbHNlIGlmKGUuaW1hZ2VUeXBlLnBpeGVsVHlwZSE9PUYuU2NhbGFyJiZlLmltYWdlVHlwZS5waXhlbFR5cGUhPT1GLlZhcmlhYmxlTGVuZ3RoVmVjdG9yKXtsZXQgdD1GLlZhcmlhYmxlTGVuZ3RoVmVjdG9yO3I9aUEoZSx7cGl4ZWxUeXBlOnR9KX1yZXR1cm4gci5pbWFnZVR5cGUucGl4ZWxUeXBlPT09Ri5WYXJpYWJsZUxlbmd0aFZlY3RvciYmKHI9KGF3YWl0IEEocikpLm1hZ25pdHVkZUltYWdlKSxyfXZhciBJZT1Cbjthc3luYyBmdW5jdGlvbiBsbihBLGU9e30pe2xldCByPVt7dHlwZTpkLkltYWdlfV0sdD1be3R5cGU6ZC5JbWFnZSxkYXRhOkF9XSxuPVtdO24ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKTtsZXQgQz0idmVjdG9yLW1hZ25pdHVkZSIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgeXQoKSk7bGV0e3dlYldvcmtlcjpCLHJldHVyblZhbHVlOkksc3RkZXJyOmEsb3V0cHV0czpRfT1hd2FpdCBvQShDLG4scix0LHtwaXBlbGluZUJhc2VVcmw6a0EoKSxwaXBlbGluZVdvcmtlclVybDp2KCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEkhPT0wJiZhIT09IiIpdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6QixtYWduaXR1ZGVJbWFnZTpRWzBdPy5kYXRhfX12YXIgZ2U9bG47YXN5bmMgZnVuY3Rpb24gY24oQSxlPXtiYXNlbGluZUltYWdlczpbXX0pe2FzeW5jIGZ1bmN0aW9uIHIoaSl7bGV0e3dlYldvcmtlcjpDLG1hZ25pdHVkZUltYWdlOmx9PWF3YWl0IGdlKGkpO3JldHVybiBDPy50ZXJtaW5hdGUoKSx7bWFnbml0dWRlSW1hZ2U6bH19bGV0IHQ9YXdhaXQgSWUocixBKSxuPWF3YWl0IFByb21pc2UuYWxsKGUuYmFzZWxpbmVJbWFnZXMubWFwKGFzeW5jIGk9PmF3YWl0IEllKHIsaSkpKSxvPXsuLi5lfTtyZXR1cm4gby5iYXNlbGluZUltYWdlcz1uLHNlKHQsbyl9dmFyIEVuPWNuO3ZhciBodD0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgSUk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBlST0oQSx0KT0+e2Zvcih2YXIgSSBpbiB0KUlJKEEsSSx7Z2V0OnRbSV0sZW51bWVyYWJsZTohMH0pfTt2YXIgdkE9U3ltYm9sKCJDb21saW5rLnByb3h5IiksZ0k9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50Iiksckk9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLHBBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxlQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksJEE9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsb0k9e2NhbkhhbmRsZTpBPT4kQShBKSYmQVt2QV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTp0LHBvcnQyOkl9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gaUEoQSx0KSxbSSxbSV1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLG5JKEEpfX0saUk9e2NhbkhhbmRsZTpBPT4kQShBKSYmZUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgdDtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOkF9LFt0LFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LEF0PW5ldyBNYXAoW1sicHJveHkiLG9JXSxbInRocm93IixpSV1dKTtmdW5jdGlvbiBDSShBLHQpe2ZvcihsZXQgSSBvZiBBKWlmKHQ9PT1JfHxJPT09IioifHxJIGluc3RhbmNlb2YgUmVnRXhwJiZJLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaUEoQSx0PWdsb2JhbFRoaXMsST1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBlKGcpe2lmKCFnfHwhZy5kYXRhKXJldHVybjtpZighQ0koSSxnLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke2cub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpyLHR5cGU6byxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGcuZGF0YSksYT0oZy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChiKSxRO3RyeXtsZXQgQj1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixzKT0+ZltzXSxBKSxpPW4ucmVkdWNlKChmLHMpPT5mW3NdLEEpO3N3aXRjaChvKXtjYXNlIkdFVCI6UT1pO2JyZWFrO2Nhc2UiU0VUIjpCW24uc2xpY2UoLTEpWzBdXT1iKGcuZGF0YS52YWx1ZSksUT0hMDticmVhaztjYXNlIkFQUExZIjpRPWkuYXBwbHkoQixhKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBpKC4uLmEpO1E9YUkoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOnN9PW5ldyBNZXNzYWdlQ2hhbm5lbDtpQShBLHMpLFE9RkEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6UT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEIpe1E9e3ZhbHVlOkIsW2VBXTowfX1Qcm9taXNlLnJlc29sdmUoUSkuY2F0Y2goQj0+KHt2YWx1ZTpCLFtlQV06MH0pKS50aGVuKEI9PntsZXRbaSxmXT1vQShCKTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpLG89PT0iUkVMRUFTRSImJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGUpLHR0KHQpLHBBIGluIEEmJnR5cGVvZiBBW3BBXT09ImZ1bmN0aW9uIiYmQVtwQV0oKSl9KS5jYXRjaChCPT57bGV0W2ksZl09b0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtlQV06MH0pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZil9KX0pLHQuc3RhcnQmJnQuc3RhcnQoKX1mdW5jdGlvbiBCSShBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiB0dChBKXtCSShBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIG5JKEEsdCl7cmV0dXJuIFNBKEEsW10sdCl9ZnVuY3Rpb24gSUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIEl0KEEpe3JldHVybiBxKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3R0KEEpfSl9dmFyIGdBPW5ldyBXZWFrTWFwLHJBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCB0PShnQS5nZXQoQSl8fDApLTE7Z0Euc2V0KEEsdCksdD09PTAmJkl0KEEpfSk7ZnVuY3Rpb24gc0koQSx0KXtsZXQgST0oZ0EuZ2V0KHQpfHwwKSsxO2dBLnNldCh0LEkpLHJBJiZyQS5yZWdpc3RlcihBLHQsQSl9ZnVuY3Rpb24gUUkoQSl7ckEmJnJBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gU0EoQSx0PVtdLEk9ZnVuY3Rpb24oKXt9KXtsZXQgZT0hMSxnPW5ldyBQcm94eShJLHtnZXQocixvKXtpZihJQShlKSxvPT09ckkpcmV0dXJuKCk9PntRSShnKSxJdChBKSxlPSEwfTtpZihvPT09InRoZW4iKXtpZih0Lmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pmd9O2xldCBuPXEoQSx7dHlwZToiR0VUIixwYXRoOnQubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKGIpO3JldHVybiBuLnRoZW4uYmluZChuKX1yZXR1cm4gU0EoQSxbLi4udCxvXSl9LHNldChyLG8sbil7SUEoZSk7bGV0W2EsUV09b0Eobik7cmV0dXJuIHEoQSx7dHlwZToiU0VUIixwYXRoOlsuLi50LG9dLm1hcChCPT5CLnRvU3RyaW5nKCkpLHZhbHVlOmF9LFEpLnRoZW4oYil9LGFwcGx5KHIsbyxuKXtJQShlKTtsZXQgYT10W3QubGVuZ3RoLTFdO2lmKGE9PT1nSSlyZXR1cm4gcShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKGIpO2lmKGE9PT0iYmluZCIpcmV0dXJuIFNBKEEsdC5zbGljZSgwLC0xKSk7bGV0W1EsQl09X0Eobik7cmV0dXJuIHEoQSx7dHlwZToiQVBQTFkiLHBhdGg6dC5tYXAoaT0+aS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6UX0sQikudGhlbihiKX0sY29uc3RydWN0KHIsbyl7SUEoZSk7bGV0W24sYV09X0Eobyk7cmV0dXJuIHEoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOnQubWFwKFE9PlEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Om59LGEpLnRoZW4oYil9fSk7cmV0dXJuIHNJKGcsQSksZ31mdW5jdGlvbiBFSShBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBfQShBKXtsZXQgdD1BLm1hcChvQSk7cmV0dXJuW3QubWFwKEk9PklbMF0pLEVJKHQubWFwKEk9PklbMV0pKV19dmFyIGV0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEZBKEEsdCl7cmV0dXJuIGV0LnNldChBLHQpLEF9ZnVuY3Rpb24gYUkoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3ZBXTohMH0pfWZ1bmN0aW9uIG9BKEEpe2ZvcihsZXRbdCxJXW9mIEF0KWlmKEkuY2FuSGFuZGxlKEEpKXtsZXRbZSxnXT1JLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6dCx2YWx1ZTplfSxnXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZXQuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gYihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBBdC5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIHEoQSx0LEkpe3JldHVybiBuZXcgUHJvbWlzZShlPT57bGV0IGc9Y0koKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobyl7IW8uZGF0YXx8IW8uZGF0YS5pZHx8by5kYXRhLmlkIT09Z3x8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZShvLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmd9LHQpLEkpfSl9ZnVuY3Rpb24gY0koKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFcoQSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseSh0LGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpmSX09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6VUF9PU9iamVjdCxCQT0oQT0+dD0+e2xldCBJPWZJLmNhbGwodCk7cmV0dXJuIEFbSV18fChBW0ldPUkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxVPUE9PihBPUEudG9Mb3dlckNhc2UoKSx0PT5CQSh0KT09PUEpLG5BPUE9PnQ9PnR5cGVvZiB0PT09QSx7aXNBcnJheTpLfT1BcnJheSxaPW5BKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBsSShBKXtyZXR1cm4gQSE9PW51bGwmJiFaKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIVooQS5jb25zdHJ1Y3RvcikmJkYoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIGl0PVUoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gREkoQSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz90PUFycmF5QnVmZmVyLmlzVmlldyhBKTp0PUEmJkEuYnVmZmVyJiZpdChBLmJ1ZmZlciksdH12YXIgdUk9bkEoInN0cmluZyIpLEY9bkEoImZ1bmN0aW9uIiksQ3Q9bkEoIm51bWJlciIpLHNBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsaEk9QT0+QT09PSEwfHxBPT09ITEsQ0E9QT0+e2lmKEJBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IHQ9VUEoQSk7cmV0dXJuKHQ9PT1udWxsfHx0PT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZEk9VSgiRGF0ZSIpLHlJPVUoIkZpbGUiKSx3ST1VKCJCbG9iIiksbUk9VSgiRmlsZUxpc3QiKSxwST1BPT5zQShBKSYmRihBLnBpcGUpLFNJPUE9PntsZXQgdDtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxGKEEuYXBwZW5kKSYmKCh0PUJBKEEpKT09PSJmb3JtZGF0YSJ8fHQ9PT0ib2JqZWN0IiYmRihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxGST1VKCJVUkxTZWFyY2hQYXJhbXMiKSxSST1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gVihBLHQse2FsbE93bktleXM6ST0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBlLGc7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEsoQSkpZm9yKGU9MCxnPUEubGVuZ3RoO2U8ZztlKyspdC5jYWxsKG51bGwsQVtlXSxlLEEpO2Vsc2V7bGV0IHI9ST9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxvPXIubGVuZ3RoLG47Zm9yKGU9MDtlPG87ZSsrKW49cltlXSx0LmNhbGwobnVsbCxBW25dLG4sQSl9fWZ1bmN0aW9uIEJ0KEEsdCl7dD10LnRvTG93ZXJDYXNlKCk7bGV0IEk9T2JqZWN0LmtleXMoQSksZT1JLmxlbmd0aCxnO2Zvcig7ZS0tID4wOylpZihnPUlbZV0sdD09PWcudG9Mb3dlckNhc2UoKSlyZXR1cm4gZztyZXR1cm4gbnVsbH12YXIgbnQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxzdD1BPT4hWihBKSYmQSE9PW50O2Z1bmN0aW9uIE5BKCl7bGV0e2Nhc2VsZXNzOkF9PXN0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LEk9KGUsZyk9PntsZXQgcj1BJiZCdCh0LGcpfHxnO0NBKHRbcl0pJiZDQShlKT90W3JdPU5BKHRbcl0sZSk6Q0EoZSk/dFtyXT1OQSh7fSxlKTpLKGUpP3Rbcl09ZS5zbGljZSgpOnRbcl09ZX07Zm9yKGxldCBlPTAsZz1hcmd1bWVudHMubGVuZ3RoO2U8ZztlKyspYXJndW1lbnRzW2VdJiZWKGFyZ3VtZW50c1tlXSxJKTtyZXR1cm4gdH12YXIgTkk9KEEsdCxJLHthbGxPd25LZXlzOmV9PXt9KT0+KFYodCwoZyxyKT0+e0kmJkYoZyk/QVtyXT1XKGcsSSk6QVtyXT1nfSx7YWxsT3duS2V5czplfSksQSksVUk9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxHST0oQSx0LEksZSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6dC5wcm90b3R5cGV9KSxJJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLEkpfSxrST0oQSx0LEksZSk9PntsZXQgZyxyLG8sbj17fTtpZih0PXR8fHt9LEE9PW51bGwpcmV0dXJuIHQ7ZG97Zm9yKGc9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSkscj1nLmxlbmd0aDtyLS0gPjA7KW89Z1tyXSwoIWV8fGUobyxBLHQpKSYmIW5bb10mJih0W29dPUFbb10sbltvXT0hMCk7QT1JIT09ITEmJlVBKEEpfXdoaWxlKEEmJighSXx8SShBLHQpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB0fSxMST0oQSx0LEkpPT57QT1TdHJpbmcoQSksKEk9PT12b2lkIDB8fEk+QS5sZW5ndGgpJiYoST1BLmxlbmd0aCksSS09dC5sZW5ndGg7bGV0IGU9QS5pbmRleE9mKHQsSSk7cmV0dXJuIGUhPT0tMSYmZT09PUl9LEpJPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihLKEEpKXJldHVybiBBO2xldCB0PUEubGVuZ3RoO2lmKCFDdCh0KSlyZXR1cm4gbnVsbDtsZXQgST1uZXcgQXJyYXkodCk7Zm9yKDt0LS0gPjA7KUlbdF09QVt0XTtyZXR1cm4gSX0sSEk9KEE9PnQ9PkEmJnQgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJlVBKFVpbnQ4QXJyYXkpKSxZST0oQSx0KT0+e2xldCBlPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksZztmb3IoOyhnPWUubmV4dCgpKSYmIWcuZG9uZTspe2xldCByPWcudmFsdWU7dC5jYWxsKEEsclswXSxyWzFdKX19LGJJPShBLHQpPT57bGV0IEksZT1bXTtmb3IoOyhJPUEuZXhlYyh0KSkhPT1udWxsOyllLnB1c2goSSk7cmV0dXJuIGV9LE1JPVUoIkhUTUxGb3JtRWxlbWVudCIpLHFJPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKEksZSxnKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK2d9KSxydD0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9Pih0LEkpPT5BLmNhbGwodCxJKSkoT2JqZWN0LnByb3RvdHlwZSksS0k9VSgiUmVnRXhwIiksUXQ9KEEsdCk9PntsZXQgST1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxlPXt9O1YoSSwoZyxyKT0+e2xldCBvOyhvPXQoZyxyLEEpKSE9PSExJiYoZVtyXT1vfHxnKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsZSl9LE9JPUE9PntRdChBLCh0LEkpPT57aWYoRihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKEkpIT09LTEpcmV0dXJuITE7bGV0IGU9QVtJXTtpZihGKGUpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK0krIlwnIil9KX19KX0sVEk9KEEsdCk9PntsZXQgST17fSxlPWc9PntnLmZvckVhY2gocj0+e0lbcl09ITB9KX07cmV0dXJuIEsoQSk/ZShBKTplKFN0cmluZyhBKS5zcGxpdCh0KSksSX0sUEk9KCk9Pnt9LHhJPShBLHQpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTp0KSxSQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLG90PSIwMTIzNDU2Nzg5IixFdD17RElHSVQ6b3QsQUxQSEE6UkEsQUxQSEFfRElHSVQ6UkErUkEudG9VcHBlckNhc2UoKStvdH0sakk9KEE9MTYsdD1FdC5BTFBIQV9ESUdJVCk9PntsZXQgST0iIix7bGVuZ3RoOmV9PXQ7Zm9yKDtBLS07KUkrPXRbTWF0aC5yYW5kb20oKSplfDBdO3JldHVybiBJfTtmdW5jdGlvbiBXSShBKXtyZXR1cm4hIShBJiZGKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgWkk9QT0+e2xldCB0PW5ldyBBcnJheSgxMCksST0oZSxnKT0+e2lmKHNBKGUpKXtpZih0LmluZGV4T2YoZSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBlKSl7dFtnXT1lO2xldCByPUsoZSk/W106e307cmV0dXJuIFYoZSwobyxuKT0+e2xldCBhPUkobyxnKzEpOyFaKGEpJiYocltuXT1hKX0pLHRbZ109dm9pZCAwLHJ9fXJldHVybiBlfTtyZXR1cm4gSShBLDApfSxWST1VKCJBc3luY0Z1bmN0aW9uIiksWEk9QT0+QSYmKHNBKEEpfHxGKEEpKSYmRihBLnRoZW4pJiZGKEEuY2F0Y2gpLEM9e2lzQXJyYXk6Syxpc0FycmF5QnVmZmVyOml0LGlzQnVmZmVyOmxJLGlzRm9ybURhdGE6U0ksaXNBcnJheUJ1ZmZlclZpZXc6REksaXNTdHJpbmc6dUksaXNOdW1iZXI6Q3QsaXNCb29sZWFuOmhJLGlzT2JqZWN0OnNBLGlzUGxhaW5PYmplY3Q6Q0EsaXNVbmRlZmluZWQ6Wixpc0RhdGU6ZEksaXNGaWxlOnlJLGlzQmxvYjp3SSxpc1JlZ0V4cDpLSSxpc0Z1bmN0aW9uOkYsaXNTdHJlYW06cEksaXNVUkxTZWFyY2hQYXJhbXM6RkksaXNUeXBlZEFycmF5OkhJLGlzRmlsZUxpc3Q6bUksZm9yRWFjaDpWLG1lcmdlOk5BLGV4dGVuZDpOSSx0cmltOlJJLHN0cmlwQk9NOlVJLGluaGVyaXRzOkdJLHRvRmxhdE9iamVjdDprSSxraW5kT2Y6QkEsa2luZE9mVGVzdDpVLGVuZHNXaXRoOkxJLHRvQXJyYXk6SkksZm9yRWFjaEVudHJ5OllJLG1hdGNoQWxsOmJJLGlzSFRNTEZvcm06TUksaGFzT3duUHJvcGVydHk6cnQsaGFzT3duUHJvcDpydCxyZWR1Y2VEZXNjcmlwdG9yczpRdCxmcmVlemVNZXRob2RzOk9JLHRvT2JqZWN0U2V0OlRJLHRvQ2FtZWxDYXNlOnFJLG5vb3A6UEksdG9GaW5pdGVOdW1iZXI6eEksZmluZEtleTpCdCxnbG9iYWw6bnQsaXNDb250ZXh0RGVmaW5lZDpzdCxBTFBIQUJFVDpFdCxnZW5lcmF0ZVN0cmluZzpqSSxpc1NwZWNDb21wbGlhbnRGb3JtOldJLHRvSlNPTk9iamVjdDpaSSxpc0FzeW5jRm46VkksaXNUaGVuYWJsZTpYSX07ZnVuY3Rpb24gTyhBLHQsSSxlLGcpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxJJiYodGhpcy5jb25maWc9SSksZSYmKHRoaXMucmVxdWVzdD1lKSxnJiYodGhpcy5yZXNwb25zZT1nKX1DLmluaGVyaXRzKE8sRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpDLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBhdD1PLnByb3RvdHlwZSxjdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntjdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLGN0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXQsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Ty5mcm9tPShBLHQsSSxlLGcscik9PntsZXQgbz1PYmplY3QuY3JlYXRlKGF0KTtyZXR1cm4gQy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGEpe3JldHVybiBhIT09RXJyb3IucHJvdG90eXBlfSxuPT5uIT09ImlzQXhpb3NFcnJvciIpLE8uY2FsbChvLEEubWVzc2FnZSx0LEksZSxnKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxyJiZPYmplY3QuYXNzaWduKG8sciksb307dmFyIGw9Tzt2YXIgUUE9bnVsbDtmdW5jdGlvbiBHQShBKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KEEpfHxDLmlzQXJyYXkoQSl9ZnVuY3Rpb24gbHQoQSl7cmV0dXJuIEMuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gZnQoQSx0LEkpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihnLHIpe3JldHVybiBnPWx0KGcpLCFJJiZyPyJbIitnKyJdIjpnfSkuam9pbihJPyIuIjoiIik6dH1mdW5jdGlvbiB6SShBKXtyZXR1cm4gQy5pc0FycmF5KEEpJiYhQS5zb21lKEdBKX12YXIgX0k9Qy50b0ZsYXRPYmplY3QoQyx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHZJKEEsdCxJKXtpZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhRQXx8Rm9ybURhdGEpLEk9Qy50b0ZsYXRPYmplY3QoSSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIUMuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgZT1JLm1ldGFUb2tlbnMsZz1JLnZpc2l0b3J8fEIscj1JLmRvdHMsbz1JLmluZGV4ZXMsYT0oSS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZDLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIUMuaXNGdW5jdGlvbihnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIFEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoQy5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYSYmQy5pc0Jsb2IoRSkpdGhyb3cgbmV3IGwoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEMuaXNBcnJheUJ1ZmZlcihFKXx8Qy5pc1R5cGVkQXJyYXkoRSk/YSYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEIoRSxjLHUpe2xldCB5PUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoQy5lbmRzV2l0aChjLCJ7fSIpKWM9ZT9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKEMuaXNBcnJheShFKSYmekkoRSl8fChDLmlzRmlsZUxpc3QoRSl8fEMuZW5kc1dpdGgoYywiW10iKSkmJih5PUMudG9BcnJheShFKSkpcmV0dXJuIGM9bHQoYykseS5mb3JFYWNoKGZ1bmN0aW9uKE4sdEkpeyEoQy5pc1VuZGVmaW5lZChOKXx8Tj09PW51bGwpJiZ0LmFwcGVuZChvPT09ITA/ZnQoW2NdLHRJLHIpOm89PT1udWxsP2M6YysiW10iLFEoTikpfSksITF9cmV0dXJuIEdBKEUpPyEwOih0LmFwcGVuZChmdCh1LGMsciksUShFKSksITEpfWxldCBpPVtdLGY9T2JqZWN0LmFzc2lnbihfSSx7ZGVmYXVsdFZpc2l0b3I6Qixjb252ZXJ0VmFsdWU6USxpc1Zpc2l0YWJsZTpHQX0pO2Z1bmN0aW9uIHMoRSxjKXtpZighQy5pc1VuZGVmaW5lZChFKSl7aWYoaS5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTtpLnB1c2goRSksQy5mb3JFYWNoKEUsZnVuY3Rpb24oeSxSKXsoIShDLmlzVW5kZWZpbmVkKHkpfHx5PT09bnVsbCkmJmcuY2FsbCh0LHksQy5pc1N0cmluZyhSKT9SLnRyaW0oKTpSLGMsZikpPT09ITAmJnMoeSxjP2MuY29uY2F0KFIpOltSXSl9KSxpLnBvcCgpfX1pZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIHMoQSksdH12YXIgSj12STtmdW5jdGlvbiBEdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIHV0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmSihBLHRoaXMsdCl9dmFyIGh0PXV0LnByb3RvdHlwZTtodC5hcHBlbmQ9ZnVuY3Rpb24odCxJKXt0aGlzLl9wYWlycy5wdXNoKFt0LEldKX07aHQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IEk9dD9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxEdCl9OkR0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIEkoZ1swXSkrIj0iK0koZ1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciBFQT11dDtmdW5jdGlvbiAkSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiBYKEEsdCxJKXtpZighdClyZXR1cm4gQTtsZXQgZT1JJiZJLmVuY29kZXx8JEksZz1JJiZJLnNlcmlhbGl6ZSxyO2lmKGc/cj1nKHQsSSk6cj1DLmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcgRUEodCxJKS50b1N0cmluZyhlKSxyKXtsZXQgbz1BLmluZGV4T2YoIiUyMyIpO28hPT0tMSYmKEE9QS5zbGljZSgwLG8pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStyfXJldHVybiBBfXZhciBrQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsSSxlKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDpJLHN5bmNocm9ub3VzOmU/ZS5zeW5jaHJvbm91czohMSxydW5XaGVuOmU/ZS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7Qy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oZSl7ZSE9PW51bGwmJnQoZSl9KX19LExBPWtBO3ZhciBhQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGR0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpFQTt2YXIgeXQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciB3dD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBtdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpkdCxGb3JtRGF0YTp5dCxCbG9iOnd0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIEpBPXt9O2VJKEpBLHtoYXNCcm93c2VyRW52OigpPT5wdCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFlLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+dGV9KTt2YXIgcHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsQWU9KEE9PnB0JiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksdGU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciB3PXsuLi5KQSwuLi5tdH07ZnVuY3Rpb24gSEEoQSx0KXtyZXR1cm4gSihBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oSSxlLGcscil7cmV0dXJuIHcuaXNOb2RlJiZDLmlzQnVmZmVyKEkpPyh0aGlzLmFwcGVuZChlLEkudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6ci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gSWUoQSl7cmV0dXJuIEMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBlZShBKXtsZXQgdD17fSxJPU9iamVjdC5rZXlzKEEpLGUsZz1JLmxlbmd0aCxyO2ZvcihlPTA7ZTxnO2UrKylyPUlbZV0sdFtyXT1BW3JdO3JldHVybiB0fWZ1bmN0aW9uIGdlKEEpe2Z1bmN0aW9uIHQoSSxlLGcscil7bGV0IG89SVtyKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgbj1OdW1iZXIuaXNGaW5pdGUoK28pLGE9cj49SS5sZW5ndGg7cmV0dXJuIG89IW8mJkMuaXNBcnJheShnKT9nLmxlbmd0aDpvLGE/KEMuaGFzT3duUHJvcChnLG8pP2dbb109W2dbb10sZV06Z1tvXT1lLCFuKTooKCFnW29dfHwhQy5pc09iamVjdChnW29dKSkmJihnW29dPVtdKSx0KEksZSxnW29dLHIpJiZDLmlzQXJyYXkoZ1tvXSkmJihnW29dPWVlKGdbb10pKSwhbil9aWYoQy5pc0Zvcm1EYXRhKEEpJiZDLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IEk9e307cmV0dXJuIEMuZm9yRWFjaEVudHJ5KEEsKGUsZyk9Pnt0KEllKGUpLGcsSSwwKX0pLEl9cmV0dXJuIG51bGx9dmFyIGNBPWdlO2Z1bmN0aW9uIHJlKEEsdCxJKXtpZihDLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksQy50cmltKEEpfWNhdGNoKGUpe2lmKGUubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgZX1yZXR1cm4oSXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBZQT17dHJhbnNpdGlvbmFsOmFBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxJKXtsZXQgZT1JLmdldENvbnRlbnRUeXBlKCl8fCIiLGc9ZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEscj1DLmlzT2JqZWN0KHQpO2lmKHImJkMuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxDLmlzRm9ybURhdGEodCkpcmV0dXJuIGc/SlNPTi5zdHJpbmdpZnkoY0EodCkpOnQ7aWYoQy5pc0FycmF5QnVmZmVyKHQpfHxDLmlzQnVmZmVyKHQpfHxDLmlzU3RyZWFtKHQpfHxDLmlzRmlsZSh0KXx8Qy5pc0Jsb2IodCkpcmV0dXJuIHQ7aWYoQy5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoQy5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IG47aWYocil7aWYoZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gSEEodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChuPUMuaXNGaWxlTGlzdCh0KSl8fGUuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEoobj97ImZpbGVzW10iOnR9OnQsYSYmbmV3IGEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiByfHxnPyhJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSkscmUodCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IEk9dGhpcy50cmFuc2l0aW9uYWx8fFlBLnRyYW5zaXRpb25hbCxlPUkmJkkuZm9yY2VkSlNPTlBhcnNpbmcsZz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZih0JiZDLmlzU3RyaW5nKHQpJiYoZSYmIXRoaXMucmVzcG9uc2VUeXBlfHxnKSl7bGV0IG89IShJJiZJLnNpbGVudEpTT05QYXJzaW5nKSYmZzt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2gobil7aWYobyl0aHJvdyBuLm5hbWU9PT0iU3ludGF4RXJyb3IiP2wuZnJvbShuLGwuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bn19cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57WUEuaGVhZGVyc1tBXT17fX0pO3ZhciBUPVlBO3ZhciBvZT1DLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLFN0PUE9PntsZXQgdD17fSxJLGUsZztyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihvKXtnPW8uaW5kZXhPZigiOiIpLEk9by5zdWJzdHJpbmcoMCxnKS50cmltKCkudG9Mb3dlckNhc2UoKSxlPW8uc3Vic3RyaW5nKGcrMSkudHJpbSgpLCEoIUl8fHRbSV0mJm9lW0ldKSYmKEk9PT0ic2V0LWNvb2tpZSI/dFtJXT90W0ldLnB1c2goZSk6dFtJXT1bZV06dFtJXT10W0ldP3RbSV0rIiwgIitlOmUpfSksdH07dmFyIEZ0PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24geihBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpDLmlzQXJyYXkoQSk/QS5tYXAoZkEpOlN0cmluZyhBKX1mdW5jdGlvbiBpZShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLEk9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxlO2Zvcig7ZT1JLmV4ZWMoQSk7KXRbZVsxXV09ZVsyXTtyZXR1cm4gdH12YXIgQ2U9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gYkEoQSx0LEksZSxnKXtpZihDLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHQsSSk7aWYoZyYmKHQ9SSksISFDLmlzU3RyaW5nKHQpKXtpZihDLmlzU3RyaW5nKGUpKXJldHVybiB0LmluZGV4T2YoZSkhPT0tMTtpZihDLmlzUmVnRXhwKGUpKXJldHVybiBlLnRlc3QodCl9fWZ1bmN0aW9uIEJlKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxJLGUpPT5JLnRvVXBwZXJDYXNlKCkrZSl9ZnVuY3Rpb24gbmUoQSx0KXtsZXQgST1DLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGUrSSx7dmFsdWU6ZnVuY3Rpb24oZyxyLG8pe3JldHVybiB0aGlzW2VdLmNhbGwodGhpcyx0LGcscixvKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxJLGUpe2xldCBnPXRoaXM7ZnVuY3Rpb24gcihuLGEsUSl7bGV0IEI9eihhKTtpZighQil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGk9Qy5maW5kS2V5KGcsQik7KCFpfHxnW2ldPT09dm9pZCAwfHxRPT09ITB8fFE9PT12b2lkIDAmJmdbaV0hPT0hMSkmJihnW2l8fGFdPWZBKG4pKX1sZXQgbz0obixhKT0+Qy5mb3JFYWNoKG4sKFEsQik9PnIoUSxCLGEpKTtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKHQsSSk6Qy5pc1N0cmluZyh0KSYmKHQ9dC50cmltKCkpJiYhQ2UodCk/byhTdCh0KSxJKTp0IT1udWxsJiZyKEksdCxlKSx0aGlzfWdldCh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtpZihlKXtsZXQgZz10aGlzW2VdO2lmKCFJKXJldHVybiBnO2lmKEk9PT0hMClyZXR1cm4gaWUoZyk7aWYoQy5pc0Z1bmN0aW9uKEkpKXJldHVybiBJLmNhbGwodGhpcyxnLGUpO2lmKEMuaXNSZWdFeHAoSSkpcmV0dXJuIEkuZXhlYyhnKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKGUmJnRoaXNbZV0hPT12b2lkIDAmJighSXx8YkEodGhpcyx0aGlzW2VdLGUsSSkpKX1yZXR1cm4hMX1kZWxldGUodCxJKXtsZXQgZT10aGlzLGc9ITE7ZnVuY3Rpb24gcihvKXtpZihvPXoobyksbyl7bGV0IG49Qy5maW5kS2V5KGUsbyk7biYmKCFJfHxiQShlLGVbbl0sbixJKSkmJihkZWxldGUgZVtuXSxnPSEwKX19cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSxnfWNsZWFyKHQpe2xldCBJPU9iamVjdC5rZXlzKHRoaXMpLGU9SS5sZW5ndGgsZz0hMTtmb3IoO2UtLTspe2xldCByPUlbZV07KCF0fHxiQSh0aGlzLHRoaXNbcl0scix0LCEwKSkmJihkZWxldGUgdGhpc1tyXSxnPSEwKX1yZXR1cm4gZ31ub3JtYWxpemUodCl7bGV0IEk9dGhpcyxlPXt9O3JldHVybiBDLmZvckVhY2godGhpcywoZyxyKT0+e2xldCBvPUMuZmluZEtleShlLHIpO2lmKG8pe0lbb109ZkEoZyksZGVsZXRlIElbcl07cmV0dXJufWxldCBuPXQ/QmUocik6U3RyaW5nKHIpLnRyaW0oKTtuIT09ciYmZGVsZXRlIElbcl0sSVtuXT1mQShnKSxlW25dPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChlLGcpPT57ZSE9bnVsbCYmZSE9PSExJiYoSVtnXT10JiZDLmlzQXJyYXkoZSk/ZS5qb2luKCIsICIpOmUpfSksSX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxJXSk9PnQrIjogIitJKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5JKXtsZXQgZT1uZXcgdGhpcyh0KTtyZXR1cm4gSS5mb3JFYWNoKGc9PmUuc2V0KGcpKSxlfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgZT0odGhpc1tGdF09dGhpc1tGdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxnPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIobyl7bGV0IG49eihvKTtlW25dfHwobmUoZyxvKSxlW25dPSEwKX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLHRoaXN9fTtQLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtDLnJlZHVjZURlc2NyaXB0b3JzKFAucHJvdG90eXBlLCh7dmFsdWU6QX0sdCk9PntsZXQgST10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChlKXt0aGlzW0ldPWV9fX0pO0MuZnJlZXplTWV0aG9kcyhQKTt2YXIgbT1QO2Z1bmN0aW9uIF8oQSx0KXtsZXQgST10aGlzfHxULGU9dHx8SSxnPW0uZnJvbShlLmhlYWRlcnMpLHI9ZS5kYXRhO3JldHVybiBDLmZvckVhY2goQSxmdW5jdGlvbihuKXtyPW4uY2FsbChJLHIsZy5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxnLm5vcm1hbGl6ZSgpLHJ9ZnVuY3Rpb24gdihBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFJ0KEEsdCxJKXtsLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGwuRVJSX0NBTkNFTEVELHQsSSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1DLmluaGVyaXRzKFJ0LGwse19fQ0FOQ0VMX186ITB9KTt2YXIgSD1SdDtmdW5jdGlvbiBNQShBLHQsSSl7bGV0IGU9SS5jb25maWcudmFsaWRhdGVTdGF0dXM7IUkuc3RhdHVzfHwhZXx8ZShJLnN0YXR1cyk/QShJKTp0KG5ldyBsKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrSS5zdGF0dXMsW2wuRVJSX0JBRF9SRVFVRVNULGwuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihJLnN0YXR1cy8xMDApLTRdLEkuY29uZmlnLEkucmVxdWVzdCxJKSl9dmFyIE50PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsSSxlLGcscil7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07Qy5pc051bWJlcihJKSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoSSkudG9HTVRTdHJpbmcoKSksQy5pc1N0cmluZyhlKSYmby5wdXNoKCJwYXRoPSIrZSksQy5pc1N0cmluZyhnKSYmby5wdXNoKCJkb21haW49IitnKSxyPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gcUEoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gS0EoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uICQoQSx0KXtyZXR1cm4gQSYmIXFBKHQpP0tBKEEsdCk6dH12YXIgVXQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLGU7ZnVuY3Rpb24gZyhyKXtsZXQgbz1yO3JldHVybiB0JiYoSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLG89SS5ocmVmKSxJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbykse2hyZWY6SS5ocmVmLHByb3RvY29sOkkucHJvdG9jb2w/SS5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6SS5ob3N0LHNlYXJjaDpJLnNlYXJjaD9JLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDpJLmhhc2g/SS5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTpJLmhvc3RuYW1lLHBvcnQ6SS5wb3J0LHBhdGhuYW1lOkkucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP0kucGF0aG5hbWU6Ii8iK0kucGF0aG5hbWV9fXJldHVybiBlPWcod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG8pe2xldCBuPUMuaXNTdHJpbmcobyk/ZyhvKTpvO3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiBPQShBKXtsZXQgdD0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gdCYmdFsxXXx8IiJ9ZnVuY3Rpb24gc2UoQSx0KXtBPUF8fDEwO2xldCBJPW5ldyBBcnJheShBKSxlPW5ldyBBcnJheShBKSxnPTAscj0wLG87cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjFlMyxmdW5jdGlvbihhKXtsZXQgUT1EYXRlLm5vdygpLEI9ZVtyXTtvfHwobz1RKSxJW2ddPWEsZVtnXT1RO2xldCBpPXIsZj0wO2Zvcig7aSE9PWc7KWYrPUlbaSsrXSxpPWklQTtpZihnPShnKzEpJUEsZz09PXImJihyPShyKzEpJUEpLFEtbzx0KXJldHVybjtsZXQgcz1CJiZRLUI7cmV0dXJuIHM/TWF0aC5yb3VuZChmKjFlMy9zKTp2b2lkIDB9fXZhciBHdD1zZTtmdW5jdGlvbiBrdChBLHQpe2xldCBJPTAsZT1HdCg1MCwyNTApO3JldHVybiBnPT57bGV0IHI9Zy5sb2FkZWQsbz1nLmxlbmd0aENvbXB1dGFibGU/Zy50b3RhbDp2b2lkIDAsbj1yLUksYT1lKG4pLFE9cjw9bztJPXI7bGV0IEI9e2xvYWRlZDpyLHRvdGFsOm8scHJvZ3Jlc3M6bz9yL286dm9pZCAwLGJ5dGVzOm4scmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJm8mJlE/KG8tcikvYTp2b2lkIDAsZXZlbnQ6Z307Qlt0PyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEoQil9fXZhciBRZT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLEx0PVFlJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSSxlKXtsZXQgZz1BLmRhdGEscj1tLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm8sd2l0aFhTUkZUb2tlbjpufT1BLGE7ZnVuY3Rpb24gUSgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQjtpZihDLmlzRm9ybURhdGEoZykpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilyLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChCPXIuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4udV09Qj9CLnNwbGl0KCI7IikubWFwKHk9PnkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107ci5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLnVdLmpvaW4oIjsgIikpfX1sZXQgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgYz1BLmF1dGgudXNlcm5hbWV8fCIiLHU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShjKyI6Iit1KSl9bGV0IGY9JChBLmJhc2VVUkwsQS51cmwpO2kub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoZixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxpLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIHMoKXtpZighaSlyZXR1cm47bGV0IGM9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gaSYmaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkseT17ZGF0YTohb3x8bz09PSJ0ZXh0Inx8bz09PSJqc29uIj9pLnJlc3BvbnNlVGV4dDppLnJlc3BvbnNlLHN0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDppfTtNQShmdW5jdGlvbihOKXtJKE4pLFEoKX0sZnVuY3Rpb24oTil7ZShOKSxRKCl9LHkpLGk9bnVsbH1pZigib25sb2FkZW5kImluIGk/aS5vbmxvYWRlbmQ9czppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFpfHxpLnJlYWR5U3RhdGUhPT00fHxpLnN0YXR1cz09PTAmJiEoaS5yZXNwb25zZVVSTCYmaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocyl9LGkub25hYm9ydD1mdW5jdGlvbigpe2kmJihlKG5ldyBsKCJSZXF1ZXN0IGFib3J0ZWQiLGwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbCl9LGkub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IGwoIk5ldHdvcmsgRXJyb3IiLGwuRVJSX05FVFdPUkssQSxpKSksaT1udWxsfSxpLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIix5PUEudHJhbnNpdGlvbmFsfHxhQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksZShuZXcgbCh1LHkuY2xhcmlmeVRpbWVvdXRFcnJvcj9sLkVUSU1FRE9VVDpsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobiYmQy5pc0Z1bmN0aW9uKG4pJiYobj1uKEEpKSxufHxuIT09ITEmJlV0KGYpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmTnQucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfWc9PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gaSYmQy5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24odSx5KXtpLnNldFJlcXVlc3RIZWFkZXIoeSx1KX0pLEMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoaS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksbyYmbyE9PSJqc29uIiYmKGkucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS51cGxvYWQmJmkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYT1jPT57aSYmKGUoIWN8fGMudHlwZT9uZXcgSChudWxsLEEsaSk6YyksaS5hYm9ydCgpLGk9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9hKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IEU9T0EoZik7aWYoRSYmdy5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtlKG5ldyBsKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGwuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59aS5zZW5kKGd8fG51bGwpfSl9O3ZhciBUQT17aHR0cDpRQSx4aHI6THR9O0MuZm9yRWFjaChUQSwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBKdD1BPT5gLSAke0F9YCxFZT1BPT5DLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbEE9e2dldEFkYXB0ZXI6QT0+e0E9Qy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxJLGUsZz17fTtmb3IobGV0IHI9MDtyPHQ7cisrKXtJPUFbcl07bGV0IG87aWYoZT1JLCFFZShJKSYmKGU9VEFbKG89U3RyaW5nKEkpKS50b0xvd2VyQ2FzZSgpXSxlPT09dm9pZCAwKSl0aHJvdyBuZXcgbChgVW5rbm93biBhZGFwdGVyIFwnJHtvfVwnYCk7aWYoZSlicmVhaztnW298fCIlMjMiK3JdPWV9aWYoIWUpe2xldCByPU9iamVjdC5lbnRyaWVzKGcpLm1hcCgoW24sYV0pPT5gYWRhcHRlciAke259IGArKGE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPXQ/ci5sZW5ndGg+MT9gc2luY2UgOiUwQWArci5tYXAoSnQpLmpvaW4oYCUwQWApOiIgIitKdChyWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBsKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIGV9LGFkYXB0ZXJzOlRBfTtmdW5jdGlvbiBQQShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSChudWxsLEEpfWZ1bmN0aW9uIERBKEEpe3JldHVybiBQQShBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGxBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxULmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFBBKEEpLGUuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUpLGUuaGVhZGVycz1tLmZyb20oZS5oZWFkZXJzKSxlfSxmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8KFBBKEEpLGUmJmUucmVzcG9uc2UmJihlLnJlc3BvbnNlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlLnJlc3BvbnNlKSxlLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKGUucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChlKX0pfXZhciBIdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgST17fTtmdW5jdGlvbiBlKFEsQixpKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KFEpJiZDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZS5jYWxsKHtjYXNlbGVzczppfSxRLEIpOkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlKHt9LEIpOkMuaXNBcnJheShCKT9CLnNsaWNlKCk6Qn1mdW5jdGlvbiBnKFEsQixpKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSxpKX1lbHNlIHJldHVybiBlKFEsQixpKX1mdW5jdGlvbiByKFEsQil7aWYoIUMuaXNVbmRlZmluZWQoQikpcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG8oUSxCKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSl9ZWxzZSByZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbihRLEIsaSl7aWYoaSBpbiB0KXJldHVybiBlKFEsQik7aWYoaSBpbiBBKXJldHVybiBlKHZvaWQgMCxRKX1sZXQgYT17dXJsOnIsbWV0aG9kOnIsZGF0YTpyLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpuLGhlYWRlcnM6KFEsQik9PmcoSHQoUSksSHQoQiksITApfTtyZXR1cm4gQy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24oQil7bGV0IGk9YVtCXXx8ZyxmPWkoQVtCXSx0W0JdLEIpO0MuaXNVbmRlZmluZWQoZikmJmkhPT1ufHwoSVtCXT1mKX0pLEl9dmFyIHVBPSIxLjYuOCI7dmFyIHhBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSx0KT0+e3hBW0FdPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09PUF8fCJhIisodDwxPyJuICI6IiAiKStBfX0pO3ZhciBZdD17fTt4QS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxJLGUpe2Z1bmN0aW9uIGcocixvKXtyZXR1cm4iW0F4aW9zIHYiK3VBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK3IrIlwnIitvKyhlPyIuICIrZToiIil9cmV0dXJuKHIsbyxuKT0+e2lmKHQ9PT0hMSl0aHJvdyBuZXcgbChnKG8sIiBoYXMgYmVlbiByZW1vdmVkIisoST8iIGluICIrSToiIikpLGwuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBJJiYhWXRbb10mJihZdFtvXT0hMCxjb25zb2xlLndhcm4oZyhvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitJKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLHQ/dChyLG8sbik6ITB9fTtmdW5jdGlvbiBhZShBLHQsSSl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBsKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxnPWUubGVuZ3RoO2Zvcig7Zy0tID4wOyl7bGV0IHI9ZVtnXSxvPXRbcl07aWYobyl7bGV0IG49QVtyXSxhPW49PT12b2lkIDB8fG8obixyLEEpO2lmKGEhPT0hMCl0aHJvdyBuZXcgbCgib3B0aW9uICIrcisiIG11c3QgYmUgIithLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKEkhPT0hMCl0aHJvdyBuZXcgbCgiVW5rbm93biBvcHRpb24gIityLGwuRVJSX0JBRF9PUFRJT04pfX12YXIgaEE9e2Fzc2VydE9wdGlvbnM6YWUsdmFsaWRhdG9yczp4QX07dmFyIFk9aEEudmFsaWRhdG9ycyx4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdHM9dCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgTEEscmVzcG9uc2U6bmV3IExBfX1hc3luYyByZXF1ZXN0KHQsSSl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KHQsSSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgZztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShnPXt9KTpnPW5ldyBFcnJvcjtsZXQgcj1nLnN0YWNrP2cuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7ZS5zdGFjaz9yJiYhU3RyaW5nKGUuc3RhY2spLmVuZHNXaXRoKHIucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihlLnN0YWNrKz1gJTBBYCtyKTplLnN0YWNrPXJ9dGhyb3cgZX19X3JlcXVlc3QodCxJKXt0eXBlb2YgdD09InN0cmluZyI/KEk9SXx8e30sSS51cmw9dCk6ST10fHx7fSxJPWsodGhpcy5kZWZhdWx0cyxJKTtsZXR7dHJhbnNpdGlvbmFsOmUscGFyYW1zU2VyaWFsaXplcjpnLGhlYWRlcnM6cn09STtlIT09dm9pZCAwJiZoQS5hc3NlcnRPcHRpb25zKGUse3NpbGVudEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbil9LCExKSxnIT1udWxsJiYoQy5pc0Z1bmN0aW9uKGcpP0kucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOmd9OmhBLmFzc2VydE9wdGlvbnMoZyx7ZW5jb2RlOlkuZnVuY3Rpb24sc2VyaWFsaXplOlkuZnVuY3Rpb259LCEwKSksSS5tZXRob2Q9KEkubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89ciYmQy5tZXJnZShyLmNvbW1vbixyW0kubWV0aG9kXSk7ciYmQy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgcltFXX0pLEkuaGVhZGVycz1tLmNvbmNhdChvLHIpO2xldCBuPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3R5cGVvZiBjLnJ1bldoZW49PSJmdW5jdGlvbiImJmMucnVuV2hlbihJKT09PSExfHwoYT1hJiZjLnN5bmNocm9ub3VzLG4udW5zaGlmdChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKSl9KTtsZXQgUT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGMpe1EucHVzaChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKX0pO2xldCBCLGk9MCxmO2lmKCFhKXtsZXQgRT1bREEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxuKSxFLnB1c2guYXBwbHkoRSxRKSxmPUUubGVuZ3RoLEI9UHJvbWlzZS5yZXNvbHZlKEkpO2k8ZjspQj1CLnRoZW4oRVtpKytdLEVbaSsrXSk7cmV0dXJuIEJ9Zj1uLmxlbmd0aDtsZXQgcz1JO2ZvcihpPTA7aTxmOyl7bGV0IEU9bltpKytdLGM9bltpKytdO3RyeXtzPUUocyl9Y2F0Y2godSl7Yy5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXtCPURBLmNhbGwodGhpcyxzKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKGk9MCxmPVEubGVuZ3RoO2k8ZjspQj1CLnRoZW4oUVtpKytdLFFbaSsrXSk7cmV0dXJuIEJ9Z2V0VXJpKHQpe3Q9ayh0aGlzLmRlZmF1bHRzLHQpO2xldCBJPSQodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gWChJLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe3gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKEksZSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKGV8fHt9LHttZXRob2Q6dCx1cmw6SSxkYXRhOihlfHx7fSkuZGF0YX0pKX19KTtDLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBJKGUpe3JldHVybiBmdW5jdGlvbihyLG8sbil7cmV0dXJuIHRoaXMucmVxdWVzdChrKG58fHt9LHttZXRob2Q6dCxoZWFkZXJzOmU/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTpvfSkpfX14LnByb3RvdHlwZVt0XT1JKCkseC5wcm90b3R5cGVbdCsiRm9ybSJdPUkoITApfSk7dmFyIEFBPXg7dmFyIGpBPWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBJO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXtJPXJ9KTtsZXQgZT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGc9PntpZighZS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1lLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOyllLl9saXN0ZW5lcnNbcl0oZyk7ZS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1nPT57bGV0IHIsbz1uZXcgUHJvbWlzZShuPT57ZS5zdWJzY3JpYmUobikscj1ufSkudGhlbihnKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKHIpfSxvfSx0KGZ1bmN0aW9uKHIsbyxuKXtlLnJlYXNvbnx8KGUucmVhc29uPW5ldyBIKHIsbyxuKSxJKGUucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IEk9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7SSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEksMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihnKXt0PWd9KSxjYW5jZWw6dH19fSxidD1qQTtmdW5jdGlvbiBXQShBKXtyZXR1cm4gZnVuY3Rpb24oSSl7cmV0dXJuIEEuYXBwbHkobnVsbCxJKX19ZnVuY3Rpb24gWkEoQSl7cmV0dXJuIEMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFZBPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhWQSkuZm9yRWFjaCgoW0EsdF0pPT57VkFbdF09QX0pO3ZhciBNdD1WQTtmdW5jdGlvbiBxdChBKXtsZXQgdD1uZXcgQUEoQSksST1XKEFBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBDLmV4dGVuZChJLEFBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksQy5leHRlbmQoSSx0LG51bGwse2FsbE93bktleXM6ITB9KSxJLmNyZWF0ZT1mdW5jdGlvbihnKXtyZXR1cm4gcXQoayhBLGcpKX0sSX12YXIgaD1xdChUKTtoLkF4aW9zPUFBO2guQ2FuY2VsZWRFcnJvcj1IO2guQ2FuY2VsVG9rZW49YnQ7aC5pc0NhbmNlbD12O2guVkVSU0lPTj11QTtoLnRvRm9ybURhdGE9SjtoLkF4aW9zRXJyb3I9bDtoLkNhbmNlbD1oLkNhbmNlbGVkRXJyb3I7aC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtoLnNwcmVhZD1XQTtoLmlzQXhpb3NFcnJvcj1aQTtoLm1lcmdlQ29uZmlnPWs7aC5BeGlvc0hlYWRlcnM9bTtoLmZvcm1Ub0pTT049QT0+Y0EoQy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtoLmdldEFkYXB0ZXI9bEEuZ2V0QWRhcHRlcjtoLkh0dHBTdGF0dXNDb2RlPU10O2guZGVmYXVsdD1oO3ZhciBkQT1oO3ZhcntBeGlvczppbyxBeGlvc0Vycm9yOkNvLENhbmNlbGVkRXJyb3I6Qm8saXNDYW5jZWw6bm8sQ2FuY2VsVG9rZW46c28sVkVSU0lPTjpRbyxhbGw6RW8sQ2FuY2VsOmFvLGlzQXhpb3NFcnJvcjpjbyxzcHJlYWQ6Zm8sdG9Gb3JtRGF0YTpsbyxBeGlvc0hlYWRlcnM6RG8sSHR0cFN0YXR1c0NvZGU6dW8sZm9ybVRvSlNPTjpobyxnZXRBZGFwdGVyOnlvLG1lcmdlQ29uZmlnOndvfT1kQTt2YXIgdEEsTCx6QSxYQT17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe3pBPW5ldyBVaW50OEFycmF5KEwuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSx5QT1jbGFzc3tpbml0KCl7cmV0dXJuIHRBfHwodHlwZW9mIGZldGNoPCJ1Ij90QT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK0t0KS50aGVuKHQ9PnQuYXJyYXlCdWZmZXIoKSkudGhlbih0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0LFhBKSkudGhlbih0aGlzLl9pbml0KTp0QT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShLdCwiYmFzZTY0IiksWEEpLnRoZW4odGhpcy5faW5pdCksdEEpfV9pbml0KHQpe0w9dC5pbnN0YW5jZSxYQS5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUodCxJPTApe2lmKCFMKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBlPXQuYnl0ZUxlbmd0aCxnPUwuZXhwb3J0cy5tYWxsb2MoZSk7ekEuc2V0KHQsZyksST1JfHxOdW1iZXIoTC5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUoZyxlKSk7bGV0IHI9TC5leHBvcnRzLm1hbGxvYyhJKSxvPUwuZXhwb3J0cy5aU1REX2RlY29tcHJlc3MocixJLGcsZSksbj16QS5zbGljZShyLHIrbyk7cmV0dXJuIEwuZXhwb3J0cy5mcmVlKGcpLEwuZXhwb3J0cy5mcmVlKHIpLG59fSxLdD0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBPdD1uZXcgeUEsVHQ9ITE7YXN5bmMgZnVuY3Rpb24gY2UoQSx0LEkpe2xldCBlPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP2U9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP2U9QTplPWAke3R9LyR7QX1gLGUuZW5kc1dpdGgoIi5qcyIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTMpKSxlLmVuZHNXaXRoKCIud2FzbSIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTUpKTtsZXQgZz1gJHtlfS53YXNtYCxyPWF3YWl0IGRBLmdldChgJHtnfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6SX0pO1R0fHwoYXdhaXQgT3QuaW5pdCgpLFR0PSEwKTtsZXQgbj1PdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7ZX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIFB0PWNlO3ZhciB3QT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGZlKEEsdCxJKXtsZXQgZT1BLGc9QSxyPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKGU9bmV3IFVSTChBLmhyZWYpLGc9ZS5ocmVmKSx3QS5oYXMoZyk/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLFB0KGUsdCxJKSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIHh0PWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9dWU7ZnVuY3Rpb24gaGUoQSx0KXtsZXQgST1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e0k9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDg6e0k9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFMuVUludDE2OntJPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFMuSW50MTY6e0k9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7ST1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDMyOntJPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ0ludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQzMjp7ST1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDY0OntJPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ST1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ST1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIEl9dmFyIEc9aGU7dmFyIFp0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGp0PW5ldyBUZXh0RW5jb2RlcixXdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSx0KXtsZXQgST17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3Blbih0LEkuZmxhZ3MpLHI9QS5mc19zdGF0KHQpLnNpemUsbz1udWxsO1p0P289bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOm89bmV3IEFycmF5QnVmZmVyKHIpO2xldCBuPW5ldyBVaW50OEFycmF5KG8pO3JldHVybiBBLmZzX3JlYWQoZSxuLDAsciwwKSxBLmZzX2Nsb3NlKGUpLG59ZnVuY3Rpb24gVnQoQSx0LEkpe2xldCBlPW51bGw7WnQ/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoSSk6ZT1uZXcgQXJyYXlCdWZmZXIoSSk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxJKTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiBkKEEsdCxJLGUpe2xldCBnPTA7cmV0dXJuIHQhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGUsdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gTShBLHQsSSl7bGV0IGU9SlNPTi5zdHJpbmdpZnkodCksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gcChBLHQsSSxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLG89VnQoQSxnLHIpO3JldHVybiBHKGUsby5idWZmZXIpfWZ1bmN0aW9uIG1BKEEsdCl7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksZT1BLlVURjhUb1N0cmluZyhJKTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLHQsSSxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxCKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IGk9anQuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IGk9anQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IGk9US5kYXRhLmRhdGEsZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IGk9US5kYXRhLGY9ZChBLGkuZGF0YSxCLDApLHM9ZChBLGkuZGlyZWN0aW9uLEIsMSksRT10eXBlb2YgaS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShpLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOmkuaW1hZ2VUeXBlLG5hbWU6aS5uYW1lLG9yaWdpbjppLm9yaWdpbixzcGFjaW5nOmkuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsc2l6ZTppLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtNKEEsYyxCKTticmVha31jYXNlIEQuTWVzaDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5jZWxscyxCLDEpLEU9ZChBLGkucG9pbnREYXRhLEIsMiksYz1kKEEsaS5jZWxsRGF0YSxCLDMpLHU9e21lc2hUeXBlOmkubWVzaFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczppLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsY2VsbEJ1ZmZlclNpemU6aS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsdSxCKTticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkucG9pbnREYXRhLEIsMSksRT17cG9pbnRTZXRUeXBlOmkucG9pbnRTZXRUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YH07TShBLEUsQik7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnZlcnRpY2VzLEIsMSksRT1kKEEsaS5saW5lcyxCLDIpLGM9ZChBLGkucG9seWdvbnMsQiwzKSx1PWQoQSxpLnRyaWFuZ2xlU3RyaXBzLEIsNCkseT1kKEEsaS5wb2ludERhdGEsQiw1KSxSPWQoQSxpLnBvaW50RGF0YSxCLDYpLE49e3BvbHlEYXRhVHlwZTppLnBvbHlEYXRhVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6aS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsbGluZXNCdWZmZXJTaXplOmkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTppLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6aS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07TShBLE4sQik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgbz1BLmdldE1vZHVsZVN0ZG91dCgpLG49QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiBJIT1udWxsJiZJLmxlbmd0aD4wJiZyPT09MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7bGV0IGk9bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9e2RhdGE6V3QuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPUpTT04ucGFyc2UoV3QuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pO2k9e2RhdGE6VnQoQSxzLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgcz1tQShBLEIpO3MuZGF0YT1wKEEsQiwwLHMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLHMuZGlyZWN0aW9uPXAoQSxCLDEsai5GbG9hdDY0KSxzLm1ldGFkYXRhPW5ldyBNYXAocy5tZXRhZGF0YSksaT1zO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxzPjA/cy5jZWxscz1wKEEsQiwxLHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOnMuY2VsbHM9RyhzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMixzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsMyxzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgcz1tQShBLEIpO2NvbnNvbGUubG9nKHMpLHMubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwxLHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxqLkZsb2F0MzIpOnMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXkscy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9zLnZlcnRpY2VzPXAoQSxCLDEsUy5VSW50MzIpOnMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LHMubGluZXNCdWZmZXJTaXplPjA/cy5saW5lcz1wKEEsQiwyLFMuVUludDMyKTpzLmxpbmVzPW5ldyBVaW50MzJBcnJheSxzLnBvbHlnb25zQnVmZmVyU2l6ZT4wP3MucG9seWdvbnM9cChBLEIsMyxTLlVJbnQzMik6cy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXkscy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9zLnRyaWFuZ2xlU3RyaXBzPXAoQSxCLDQsUy5VSW50MzIpOnMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDUscy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsNixzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOlEudHlwZSxkYXRhOml9O2EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpyLHN0ZG91dDpvLHN0ZGVycjpuLG91dHB1dHM6YX19dmFyIFh0PXllO3ZhciB3ZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gbWUoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBJPVtdO2ZvcihsZXQgZT0wO2U8QS5sZW5ndGg7ZSsrKXtsZXQgZz1wZShBW2VdLHQpO2chPT1udWxsJiZJLnB1c2goZyl9cmV0dXJuIEl9ZnVuY3Rpb24gcGUoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBJPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP0k9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoST1BKSx3ZSYmSSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9JOkkuc2xpY2UoMCl9dmFyIHp0PW1lO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBfdD1TZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgdnQ9RmU7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyICR0PVJlO2FzeW5jIGZ1bmN0aW9uIE5lKEEsdCxJLGUpe2xldCBnPVh0KEEsdCxJLGUpLHI9W107cmV0dXJuIGcub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8udHlwZT09PUQuQmluYXJ5U3RyZWFtfHxvLnR5cGU9PT1ELkJpbmFyeUZpbGUpe2xldCBuPW8uZGF0YTtyLnB1c2gobil9ZWxzZSBpZihvLnR5cGU9PT1ELkltYWdlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLl90KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuTWVzaCl7bGV0IG49by5kYXRhO3IucHVzaCguLi52dChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELlBvbHlEYXRhKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLiR0KG4pKX19KSxGQShnLHp0KHIsITApKX12YXIgQUk9TmU7dmFyIFVlPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsSSxlLGcscil7bGV0IG89YXdhaXQgeHQoQSx0LHIpO3JldHVybiBhd2FpdCBBSShvLEksZSxnKX19O2lBKFVlKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO2R0KGh0KTtleHBvcnR7c2UgYXMgY29tcGFyZURvdWJsZUltYWdlcyxFbiBhcyBjb21wYXJlSW1hZ2VzLHl0IGFzIGdldERlZmF1bHRXZWJXb3JrZXIsdiBhcyBnZXRQaXBlbGluZVdvcmtlclVybCxrQSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLE9zIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsZHQgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsUnMgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCxnZSBhcyB2ZWN0b3JNYWduaXR1ZGUsUkEgYXMgdmVyc2lvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" +default_js_module = """data:text/javascript;base64,dmFyIER0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgU3Q9KEEsZSk9Pntmb3IodmFyIHIgaW4gZSlEdChBLHIse2dldDplW3JdLGVudW1lcmFibGU6ITB9KX07dmFyIGJ0PSI1LjIuMCIsUkE9YnQ7dmFyIEZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sZj1GdDt2YXIga3Q9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LHc9a3Q7ZnVuY3Rpb24gUnQoQSxlKXtsZXQgcj1udWxsO3N3aXRjaChBKXtjYXNlIGYuVUludDg6e3I9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDg6e3I9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIGYuVUludDE2OntyPW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIGYuSW50MTY6e3I9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLlVJbnQzMjp7cj1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDMyOntyPW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgZi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnI9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ0ludDY0QXJyYXkoZSk6cj1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIHcuRmxvYXQzMjp7cj1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2Ugdy5GbG9hdDY0OntyPW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7cj1udWxsO2JyZWFrfWNhc2UgbnVsbDp7cj1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHJ9dmFyIE49UnQ7dmFyIFV0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sRj1VdDt2YXIgVUE9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHI9Zi5VSW50OCx0PUYuU2NhbGFyLG49MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9cix0aGlzLnBpeGVsVHlwZT10LHRoaXMuY29tcG9uZW50cz1ufX0sQ2U9VUE7ZnVuY3Rpb24gTnQoQSxlLHIsdCxuKXtBW3QrciplXT1ufXZhciBCZT1OdDt2YXIgTkE9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IENlKXt0aGlzLmltYWdlVHlwZT1lO2xldCByPWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheShyKSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkociksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheShyKnIpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCB0PTA7dDxyO3QrKylCZSh0aGlzLmRpcmVjdGlvbixyLHQsdCwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHIpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LGxlPU5BO2Z1bmN0aW9uIEd0KEEsZSl7bGV0IHI9ey4uLkEuaW1hZ2VUeXBlfTtpZih0eXBlb2YgZTwidSImJnR5cGVvZiBlLnBpeGVsVHlwZTwidSImJihyLnBpeGVsVHlwZT1lLnBpeGVsVHlwZSxlLnBpeGVsVHlwZT09PUYuU2NhbGFyJiZyLmNvbXBvbmVudHMhPT0xKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYXN0IG11bHRpLWNvbXBvbmVudCBpbWFnZSB0byBhIHNjYWxhciBpbWFnZSIpO3R5cGVvZiBlPCJ1IiYmdHlwZW9mIGUuY29tcG9uZW50VHlwZTwidSImJmUuY29tcG9uZW50VHlwZSE9PUEuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUmJihyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlKTtsZXQgdD1uZXcgbGUocik7aWYodC5uYW1lPUEubmFtZSx0Lm9yaWdpbj1BcnJheS5mcm9tKEEub3JpZ2luKSx0LnNwYWNpbmc9QXJyYXkuZnJvbShBLnNwYWNpbmcpLHQuZGlyZWN0aW9uPUEuZGlyZWN0aW9uLnNsaWNlKCksdC5zaXplPUFycmF5LmZyb20oQS5zaXplKSx0Lm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKEEubWV0YWRhdGEpKSkpLEEuZGF0YSE9PW51bGwpaWYodHlwZW9mIGU8InUiJiZ0eXBlb2YgZS5jb21wb25lbnRUeXBlPCJ1IiYmZS5jb21wb25lbnRUeXBlIT09QS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goQS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBmLlVJbnQ4OmNhc2UgZi5JbnQ4OmNhc2UgZi5VSW50MTY6Y2FzZSBmLkludDE2OmNhc2UgZi5VSW50MzI6Y2FzZSBmLkludDMyOmNhc2Ugdy5GbG9hdDMyOmNhc2Ugdy5GbG9hdDY0OnN3aXRjaCh0LmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIGYuVUludDg6dC5kYXRhPW5ldyBVaW50OEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuVUludDE2OnQuZGF0YT1uZXcgVWludDE2QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuSW50MTY6dC5kYXRhPW5ldyBJbnQxNkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDMyOnQuZGF0YT1uZXcgSW50MzJBcnJheShBLmRhdGEpO2JyZWFrO2Nhc2Ugdy5GbG9hdDMyOnQuZGF0YT1uZXcgRmxvYXQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSB3LkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuVUludDY0OnQuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWs7Y2FzZSBmLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQuZGF0YS5sZW5ndGg7bisrKXQuZGF0YVtuXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWt9YnJlYWs7Y2FzZSBmLlVJbnQ2NDpjYXNlIGYuSW50NjQ6c3dpdGNoKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgZi5VSW50ODp0LmRhdGE9bmV3IFVpbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQxNjp0LmRhdGE9bmV3IFVpbnQxNkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgZi5JbnQxNjp0LmRhdGE9bmV3IEludDE2QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgZi5JbnQzMjp0LmRhdGE9bmV3IEludDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSB3LkZsb2F0MzI6dC5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSB3LkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQ2NDp0LmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG49QS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgbihBLmRhdGEubGVuZ3RoKSx0LmRhdGEhPW51bGwmJnQuZGF0YS5zZXQoQS5kYXRhLDApfXJldHVybiB0fXZhciBpQT1HdDt2YXIgTHQ9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybToiVHJhbnNmb3JtIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxkPUx0O3ZhciBFZT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxUdD1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxUQT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksR0E9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLHNBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxRZT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIix4dD17Y2FuSGFuZGxlOkE9PlFlKEEpJiZBW0VlXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOmUscG9ydDI6cn09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiB1ZShBLGUpLFtyLFtyXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCkseEEoQSl9fSxPdD17Y2FuSGFuZGxlOkE9PlFlKEEpJiZzQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBlO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ZT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OmU9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW2UsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sZmU9bmV3IE1hcChbWyJwcm94eSIseHRdLFsidGhyb3ciLE90XV0pO2Z1bmN0aW9uIFB0KEEsZSl7Zm9yKGxldCByIG9mIEEpaWYoZT09PXJ8fHI9PT0iKiJ8fHIgaW5zdGFuY2VvZiBSZWdFeHAmJnIudGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB1ZShBLGU9Z2xvYmFsVGhpcyxyPVsiKiJdKXtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHQobil7aWYoIW58fCFuLmRhdGEpcmV0dXJuO2lmKCFQdChyLG4ub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiAnJHtuLm9yaWdpbn0nIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpvLHR5cGU6aSxwYXRoOkN9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LG4uZGF0YSksbD0obi5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChQKSxCO3RyeXtsZXQgST1DLnNsaWNlKDAsLTEpLnJlZHVjZSgoUSxnKT0+UVtnXSxBKSxhPUMucmVkdWNlKChRLGcpPT5RW2ddLEEpO3N3aXRjaChpKXtjYXNlIkdFVCI6Qj1hO2JyZWFrO2Nhc2UiU0VUIjpJW0Muc2xpY2UoLTEpWzBdXT1QKG4uZGF0YS52YWx1ZSksQj0hMDticmVhaztjYXNlIkFQUExZIjpCPWEuYXBwbHkoSSxsKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBRPW5ldyBhKC4uLmwpO0I9cXQoUSl9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpRLHBvcnQyOmd9PW5ldyBNZXNzYWdlQ2hhbm5lbDt1ZShBLGcpLEI9T0EoUSxbUV0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6Qj12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEkpe0I9e3ZhbHVlOkksW3NBXTowfX1Qcm9taXNlLnJlc29sdmUoQikuY2F0Y2goST0+KHt2YWx1ZTpJLFtzQV06MH0pKS50aGVuKEk9PntsZXRbYSxRXT1DQShJKTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6b30pLFEpLGk9PT0iUkVMRUFTRSImJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHQpLHBlKGUpLEdBIGluIEEmJnR5cGVvZiBBW0dBXT09ImZ1bmN0aW9uIiYmQVtHQV0oKSl9KS5jYXRjaChJPT57bGV0W2EsUV09Q0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtzQV06MH0pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtpZDpvfSksUSl9KX0pLGUuc3RhcnQmJmUuc3RhcnQoKX1mdW5jdGlvbiBKdChBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBwZShBKXtKdChBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIHhBKEEsZSl7cmV0dXJuIExBKEEsW10sZSl9ZnVuY3Rpb24gYUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIGRlKEEpe3JldHVybiBNKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3BlKEEpfSl9dmFyIElBPW5ldyBXZWFrTWFwLGdBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBlPShJQS5nZXQoQSl8fDApLTE7SUEuc2V0KEEsZSksZT09PTAmJmRlKEEpfSk7ZnVuY3Rpb24gTXQoQSxlKXtsZXQgcj0oSUEuZ2V0KGUpfHwwKSsxO0lBLnNldChlLHIpLGdBJiZnQS5yZWdpc3RlcihBLGUsQSl9ZnVuY3Rpb24gSHQoQSl7Z0EmJmdBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gTEEoQSxlPVtdLHI9ZnVuY3Rpb24oKXt9KXtsZXQgdD0hMSxuPW5ldyBQcm94eShyLHtnZXQobyxpKXtpZihhQSh0KSxpPT09VEEpcmV0dXJuKCk9PntIdChuKSxkZShBKSx0PSEwfTtpZihpPT09InRoZW4iKXtpZihlLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pm59O2xldCBDPU0oQSx7dHlwZToiR0VUIixwYXRoOmUubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKFApO3JldHVybiBDLnRoZW4uYmluZChDKX1yZXR1cm4gTEEoQSxbLi4uZSxpXSl9LHNldChvLGksQyl7YUEodCk7bGV0W2wsQl09Q0EoQyk7cmV0dXJuIE0oQSx7dHlwZToiU0VUIixwYXRoOlsuLi5lLGldLm1hcChJPT5JLnRvU3RyaW5nKCkpLHZhbHVlOmx9LEIpLnRoZW4oUCl9LGFwcGx5KG8saSxDKXthQSh0KTtsZXQgbD1lW2UubGVuZ3RoLTFdO2lmKGw9PT1UdClyZXR1cm4gTShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKFApO2lmKGw9PT0iYmluZCIpcmV0dXJuIExBKEEsZS5zbGljZSgwLC0xKSk7bGV0W0IsSV09Y2UoQyk7cmV0dXJuIE0oQSx7dHlwZToiQVBQTFkiLHBhdGg6ZS5tYXAoYT0+YS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Qn0sSSkudGhlbihQKX0sY29uc3RydWN0KG8saSl7YUEodCk7bGV0W0MsbF09Y2UoaSk7cmV0dXJuIE0oQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOmUubWFwKEI9PkIudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkN9LGwpLnRoZW4oUCl9fSk7cmV0dXJuIE10KG4sQSksbn1mdW5jdGlvbiBZdChBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBjZShBKXtsZXQgZT1BLm1hcChDQSk7cmV0dXJuW2UubWFwKHI9PnJbMF0pLFl0KGUubWFwKHI9PnJbMV0pKV19dmFyIG1lPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIE9BKEEsZSl7cmV0dXJuIG1lLnNldChBLGUpLEF9ZnVuY3Rpb24gcXQoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W0VlXTohMH0pfWZ1bmN0aW9uIENBKEEpe2ZvcihsZXRbZSxyXW9mIGZlKWlmKHIuY2FuSGFuZGxlKEEpKXtsZXRbdCxuXT1yLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6ZSx2YWx1ZTp0fSxuXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sbWUuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gUChBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBmZS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIE0oQSxlLHIpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57bGV0IG49S3QoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIG8oaSl7IWkuZGF0YXx8IWkuZGF0YS5pZHx8aS5kYXRhLmlkIT09bnx8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksdChpLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOm59LGUpLHIpfSl9ZnVuY3Rpb24gS3QoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFYoQSxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseShlLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpXdH09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6TUF9PU9iamVjdCxsQT0oQT0+ZT0+e2xldCByPVd0LmNhbGwoZSk7cmV0dXJuIEFbcl18fChBW3JdPXIuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxHPUE9PihBPUEudG9Mb3dlckNhc2UoKSxlPT5sQShlKT09PUEpLGNBPUE9PmU9PnR5cGVvZiBlPT09QSx7aXNBcnJheTpIfT1BcnJheSx6PWNBKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBqdChBKXtyZXR1cm4gQSE9PW51bGwmJiF6KEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIXooQS5jb25zdHJ1Y3RvcikmJmsoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIERlPUcoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gdnQoQSl7bGV0IGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhBKTplPUEmJkEuYnVmZmVyJiZEZShBLmJ1ZmZlciksZX12YXIgX3Q9Y0EoInN0cmluZyIpLGs9Y0EoImZ1bmN0aW9uIiksU2U9Y0EoIm51bWJlciIpLEVBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsVnQ9QT0+QT09PSEwfHxBPT09ITEsQkE9QT0+e2lmKGxBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IGU9TUEoQSk7cmV0dXJuKGU9PT1udWxsfHxlPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0senQ9RygiRGF0ZSIpLFp0PUcoIkZpbGUiKSxYdD1HKCJCbG9iIiksJHQ9RygiRmlsZUxpc3QiKSxBcj1BPT5FQShBKSYmayhBLnBpcGUpLGVyPUE9PntsZXQgZTtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxrKEEuYXBwZW5kKSYmKChlPWxBKEEpKT09PSJmb3JtZGF0YSJ8fGU9PT0ib2JqZWN0IiYmayhBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSx0cj1HKCJVUkxTZWFyY2hQYXJhbXMiKSxycj1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gWihBLGUse2FsbE93bktleXM6cj0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCB0LG47aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEgoQSkpZm9yKHQ9MCxuPUEubGVuZ3RoO3Q8bjt0KyspZS5jYWxsKG51bGwsQVt0XSx0LEEpO2Vsc2V7bGV0IG89cj9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxpPW8ubGVuZ3RoLEM7Zm9yKHQ9MDt0PGk7dCsrKUM9b1t0XSxlLmNhbGwobnVsbCxBW0NdLEMsQSl9fWZ1bmN0aW9uIGJlKEEsZSl7ZT1lLnRvTG93ZXJDYXNlKCk7bGV0IHI9T2JqZWN0LmtleXMoQSksdD1yLmxlbmd0aCxuO2Zvcig7dC0tID4wOylpZihuPXJbdF0sZT09PW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gbjtyZXR1cm4gbnVsbH12YXIgRmU9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxrZT1BPT4heihBKSYmQSE9PUZlO2Z1bmN0aW9uIEpBKCl7bGV0e2Nhc2VsZXNzOkF9PWtlKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHI9KHQsbik9PntsZXQgbz1BJiZiZShlLG4pfHxuO0JBKGVbb10pJiZCQSh0KT9lW29dPUpBKGVbb10sdCk6QkEodCk/ZVtvXT1KQSh7fSx0KTpIKHQpP2Vbb109dC5zbGljZSgpOmVbb109dH07Zm9yKGxldCB0PTAsbj1hcmd1bWVudHMubGVuZ3RoO3Q8bjt0KyspYXJndW1lbnRzW3RdJiZaKGFyZ3VtZW50c1t0XSxyKTtyZXR1cm4gZX12YXIgbnI9KEEsZSxyLHthbGxPd25LZXlzOnR9PXt9KT0+KFooZSwobixvKT0+e3ImJmsobik/QVtvXT1WKG4scik6QVtvXT1ufSx7YWxsT3duS2V5czp0fSksQSksb3I9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxpcj0oQSxlLHIsdCk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHQpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6ZS5wcm90b3R5cGV9KSxyJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHIpfSxhcj0oQSxlLHIsdCk9PntsZXQgbixvLGksQz17fTtpZihlPWV8fHt9LEE9PW51bGwpcmV0dXJuIGU7ZG97Zm9yKG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksbz1uLmxlbmd0aDtvLS0gPjA7KWk9bltvXSwoIXR8fHQoaSxBLGUpKSYmIUNbaV0mJihlW2ldPUFbaV0sQ1tpXT0hMCk7QT1yIT09ITEmJk1BKEEpfXdoaWxlKEEmJighcnx8cihBLGUpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBlfSxzcj0oQSxlLHIpPT57QT1TdHJpbmcoQSksKHI9PT12b2lkIDB8fHI+QS5sZW5ndGgpJiYocj1BLmxlbmd0aCksci09ZS5sZW5ndGg7bGV0IHQ9QS5pbmRleE9mKGUscik7cmV0dXJuIHQhPT0tMSYmdD09PXJ9LElyPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihIKEEpKXJldHVybiBBO2xldCBlPUEubGVuZ3RoO2lmKCFTZShlKSlyZXR1cm4gbnVsbDtsZXQgcj1uZXcgQXJyYXkoZSk7Zm9yKDtlLS0gPjA7KXJbZV09QVtlXTtyZXR1cm4gcn0sZ3I9KEE9PmU9PkEmJmUgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJk1BKFVpbnQ4QXJyYXkpKSxDcj0oQSxlKT0+e2xldCB0PShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksbjtmb3IoOyhuPXQubmV4dCgpKSYmIW4uZG9uZTspe2xldCBvPW4udmFsdWU7ZS5jYWxsKEEsb1swXSxvWzFdKX19LEJyPShBLGUpPT57bGV0IHIsdD1bXTtmb3IoOyhyPUEuZXhlYyhlKSkhPT1udWxsOyl0LnB1c2gocik7cmV0dXJuIHR9LGxyPUcoIkhUTUxGb3JtRWxlbWVudCIpLGNyPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpK259KSxoZT0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihlLHIpPT5BLmNhbGwoZSxyKSkoT2JqZWN0LnByb3RvdHlwZSksRXI9RygiUmVnRXhwIiksUmU9KEEsZSk9PntsZXQgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSx0PXt9O1oociwobixvKT0+e2xldCBpOyhpPWUobixvLEEpKSE9PSExJiYodFtvXT1pfHxuKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsdCl9LFFyPUE9PntSZShBLChlLHIpPT57aWYoayhBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHIpIT09LTEpcmV0dXJuITE7bGV0IHQ9QVtyXTtpZihrKHQpKXtpZihlLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIGUpe2Uud3JpdGFibGU9ITE7cmV0dXJufWUuc2V0fHwoZS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrcisiJyIpfSl9fSl9LGZyPShBLGUpPT57bGV0IHI9e30sdD1uPT57bi5mb3JFYWNoKG89PntyW29dPSEwfSl9O3JldHVybiBIKEEpP3QoQSk6dChTdHJpbmcoQSkuc3BsaXQoZSkpLHJ9LHVyPSgpPT57fSxwcj0oQSxlKT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6ZSksUEE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix3ZT0iMDEyMzQ1Njc4OSIsVWU9e0RJR0lUOndlLEFMUEhBOlBBLEFMUEhBX0RJR0lUOlBBK1BBLnRvVXBwZXJDYXNlKCkrd2V9LGRyPShBPTE2LGU9VWUuQUxQSEFfRElHSVQpPT57bGV0IHI9IiIse2xlbmd0aDp0fT1lO2Zvcig7QS0tOylyKz1lW01hdGgucmFuZG9tKCkqdHwwXTtyZXR1cm4gcn07ZnVuY3Rpb24gbXIoQSl7cmV0dXJuISEoQSYmayhBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIHlyPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHI9KHQsbik9PntpZihFQSh0KSl7aWYoZS5pbmRleE9mKHQpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gdCkpe2Vbbl09dDtsZXQgbz1IKHQpP1tdOnt9O3JldHVybiBaKHQsKGksQyk9PntsZXQgbD1yKGksbisxKTsheihsKSYmKG9bQ109bCl9KSxlW25dPXZvaWQgMCxvfX1yZXR1cm4gdH07cmV0dXJuIHIoQSwwKX0saHI9RygiQXN5bmNGdW5jdGlvbiIpLHdyPUE9PkEmJihFQShBKXx8ayhBKSkmJmsoQS50aGVuKSYmayhBLmNhdGNoKSxzPXtpc0FycmF5OkgsaXNBcnJheUJ1ZmZlcjpEZSxpc0J1ZmZlcjpqdCxpc0Zvcm1EYXRhOmVyLGlzQXJyYXlCdWZmZXJWaWV3OnZ0LGlzU3RyaW5nOl90LGlzTnVtYmVyOlNlLGlzQm9vbGVhbjpWdCxpc09iamVjdDpFQSxpc1BsYWluT2JqZWN0OkJBLGlzVW5kZWZpbmVkOnosaXNEYXRlOnp0LGlzRmlsZTpadCxpc0Jsb2I6WHQsaXNSZWdFeHA6RXIsaXNGdW5jdGlvbjprLGlzU3RyZWFtOkFyLGlzVVJMU2VhcmNoUGFyYW1zOnRyLGlzVHlwZWRBcnJheTpncixpc0ZpbGVMaXN0OiR0LGZvckVhY2g6WixtZXJnZTpKQSxleHRlbmQ6bnIsdHJpbTpycixzdHJpcEJPTTpvcixpbmhlcml0czppcix0b0ZsYXRPYmplY3Q6YXIsa2luZE9mOmxBLGtpbmRPZlRlc3Q6RyxlbmRzV2l0aDpzcix0b0FycmF5OklyLGZvckVhY2hFbnRyeTpDcixtYXRjaEFsbDpCcixpc0hUTUxGb3JtOmxyLGhhc093blByb3BlcnR5OmhlLGhhc093blByb3A6aGUscmVkdWNlRGVzY3JpcHRvcnM6UmUsZnJlZXplTWV0aG9kczpRcix0b09iamVjdFNldDpmcix0b0NhbWVsQ2FzZTpjcixub29wOnVyLHRvRmluaXRlTnVtYmVyOnByLGZpbmRLZXk6YmUsZ2xvYmFsOkZlLGlzQ29udGV4dERlZmluZWQ6a2UsQUxQSEFCRVQ6VWUsZ2VuZXJhdGVTdHJpbmc6ZHIsaXNTcGVjQ29tcGxpYW50Rm9ybTptcix0b0pTT05PYmplY3Q6eXIsaXNBc3luY0ZuOmhyLGlzVGhlbmFibGU6d3J9O2Z1bmN0aW9uIFkoQSxlLHIsdCxuKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGUmJih0aGlzLmNvZGU9ZSksciYmKHRoaXMuY29uZmlnPXIpLHQmJih0aGlzLnJlcXVlc3Q9dCksbiYmKHRoaXMucmVzcG9uc2U9bil9cy5pbmhlcml0cyhZLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6cy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgTmU9WS5wcm90b3R5cGUsR2U9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57R2VbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWSxHZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE5lLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO1kuZnJvbT0oQSxlLHIsdCxuLG8pPT57bGV0IGk9T2JqZWN0LmNyZWF0ZShOZSk7cmV0dXJuIHMudG9GbGF0T2JqZWN0KEEsaSxmdW5jdGlvbihsKXtyZXR1cm4gbCE9PUVycm9yLnByb3RvdHlwZX0sQz0+QyE9PSJpc0F4aW9zRXJyb3IiKSxZLmNhbGwoaSxBLm1lc3NhZ2UsZSxyLHQsbiksaS5jYXVzZT1BLGkubmFtZT1BLm5hbWUsbyYmT2JqZWN0LmFzc2lnbihpLG8pLGl9O3ZhciBwPVk7dmFyIFFBPW51bGw7ZnVuY3Rpb24gSEEoQSl7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChBKXx8cy5pc0FycmF5KEEpfWZ1bmN0aW9uIFRlKEEpe3JldHVybiBzLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIExlKEEsZSxyKXtyZXR1cm4gQT9BLmNvbmNhdChlKS5tYXAoZnVuY3Rpb24obixvKXtyZXR1cm4gbj1UZShuKSwhciYmbz8iWyIrbisiXSI6bn0pLmpvaW4ocj8iLiI6IiIpOmV9ZnVuY3Rpb24gRHIoQSl7cmV0dXJuIHMuaXNBcnJheShBKSYmIUEuc29tZShIQSl9dmFyIFNyPXMudG9GbGF0T2JqZWN0KHMse30sbnVsbCxmdW5jdGlvbihlKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoZSl9KTtmdW5jdGlvbiBicihBLGUscil7aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ZT1lfHxuZXcoUUF8fEZvcm1EYXRhKSxyPXMudG9GbGF0T2JqZWN0KHIse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihFLHUpe3JldHVybiFzLmlzVW5kZWZpbmVkKHVbRV0pfSk7bGV0IHQ9ci5tZXRhVG9rZW5zLG49ci52aXNpdG9yfHxJLG89ci5kb3RzLGk9ci5pbmRleGVzLGw9KHIuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmcy5pc1NwZWNDb21wbGlhbnRGb3JtKGUpO2lmKCFzLmlzRnVuY3Rpb24obikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBCKGMpe2lmKGM9PT1udWxsKXJldHVybiIiO2lmKHMuaXNEYXRlKGMpKXJldHVybiBjLnRvSVNPU3RyaW5nKCk7aWYoIWwmJnMuaXNCbG9iKGMpKXRocm93IG5ldyBwKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBzLmlzQXJyYXlCdWZmZXIoYyl8fHMuaXNUeXBlZEFycmF5KGMpP2wmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtjXSk6QnVmZmVyLmZyb20oYyk6Y31mdW5jdGlvbiBJKGMsRSx1KXtsZXQgbT1jO2lmKGMmJiF1JiZ0eXBlb2YgYz09Im9iamVjdCIpe2lmKHMuZW5kc1dpdGgoRSwie30iKSlFPXQ/RTpFLnNsaWNlKDAsLTIpLGM9SlNPTi5zdHJpbmdpZnkoYyk7ZWxzZSBpZihzLmlzQXJyYXkoYykmJkRyKGMpfHwocy5pc0ZpbGVMaXN0KGMpfHxzLmVuZHNXaXRoKEUsIltdIikpJiYobT1zLnRvQXJyYXkoYykpKXJldHVybiBFPVRlKEUpLG0uZm9yRWFjaChmdW5jdGlvbihVLHd0KXshKHMuaXNVbmRlZmluZWQoVSl8fFU9PT1udWxsKSYmZS5hcHBlbmQoaT09PSEwP0xlKFtFXSx3dCxvKTppPT09bnVsbD9FOkUrIltdIixCKFUpKX0pLCExfXJldHVybiBIQShjKT8hMDooZS5hcHBlbmQoTGUodSxFLG8pLEIoYykpLCExKX1sZXQgYT1bXSxRPU9iamVjdC5hc3NpZ24oU3Ise2RlZmF1bHRWaXNpdG9yOkksY29udmVydFZhbHVlOkIsaXNWaXNpdGFibGU6SEF9KTtmdW5jdGlvbiBnKGMsRSl7aWYoIXMuaXNVbmRlZmluZWQoYykpe2lmKGEuaW5kZXhPZihjKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitFLmpvaW4oIi4iKSk7YS5wdXNoKGMpLHMuZm9yRWFjaChjLGZ1bmN0aW9uKG0sUil7KCEocy5pc1VuZGVmaW5lZChtKXx8bT09PW51bGwpJiZuLmNhbGwoZSxtLHMuaXNTdHJpbmcoUik/Ui50cmltKCk6UixFLFEpKT09PSEwJiZnKG0sRT9FLmNvbmNhdChSKTpbUl0pfSksYS5wb3AoKX19aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBnKEEpLGV9dmFyIFQ9YnI7ZnVuY3Rpb24geGUoQSl7bGV0IGU9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KX1mdW5jdGlvbiBPZShBLGUpe3RoaXMuX3BhaXJzPVtdLEEmJlQoQSx0aGlzLGUpfXZhciBQZT1PZS5wcm90b3R5cGU7UGUuYXBwZW5kPWZ1bmN0aW9uKGUscil7dGhpcy5fcGFpcnMucHVzaChbZSxyXSl9O1BlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe2xldCByPWU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzLHQseGUpfTp4ZTtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiByKG5bMF0pKyI9IityKG5bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgZkE9T2U7ZnVuY3Rpb24gRnIoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gWChBLGUscil7aWYoIWUpcmV0dXJuIEE7bGV0IHQ9ciYmci5lbmNvZGV8fEZyLG49ciYmci5zZXJpYWxpemUsbztpZihuP289bihlLHIpOm89cy5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IGZBKGUscikudG9TdHJpbmcodCksbyl7bGV0IGk9QS5pbmRleE9mKCIjIik7aSE9PS0xJiYoQT1BLnNsaWNlKDAsaSkpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK299cmV0dXJuIEF9dmFyIFlBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSxyLHQpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnIsc3luY2hyb25vdXM6dD90LnN5bmNocm9ub3VzOiExLHJ1bldoZW46dD90LnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXtzLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbih0KXt0IT09bnVsbCYmZSh0KX0pfX0scUE9WUE7dmFyIHVBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgSmU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOmZBO3ZhciBNZT10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIEhlPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIFllPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOkplLEZvcm1EYXRhOk1lLEJsb2I6SGV9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgS0E9e307U3QoS0Ese2hhc0Jyb3dzZXJFbnY6KCk9PnFlLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+a3IsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5Scn0pO3ZhciBxZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixrcj0oQT0+cWUmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxScj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIEQ9ey4uLktBLC4uLlllfTtmdW5jdGlvbiBXQShBLGUpe3JldHVybiBUKEEsbmV3IEQuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihyLHQsbixvKXtyZXR1cm4gRC5pc05vZGUmJnMuaXNCdWZmZXIocik/KHRoaXMuYXBwZW5kKHQsci50b1N0cmluZygiYmFzZTY0IikpLCExKTpvLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBVcihBKXtyZXR1cm4gcy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIE5yKEEpe2xldCBlPXt9LHI9T2JqZWN0LmtleXMoQSksdCxuPXIubGVuZ3RoLG87Zm9yKHQ9MDt0PG47dCsrKW89clt0XSxlW29dPUFbb107cmV0dXJuIGV9ZnVuY3Rpb24gR3IoQSl7ZnVuY3Rpb24gZShyLHQsbixvKXtsZXQgaT1yW28rK107aWYoaT09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBDPU51bWJlci5pc0Zpbml0ZSgraSksbD1vPj1yLmxlbmd0aDtyZXR1cm4gaT0haSYmcy5pc0FycmF5KG4pP24ubGVuZ3RoOmksbD8ocy5oYXNPd25Qcm9wKG4saSk/bltpXT1bbltpXSx0XTpuW2ldPXQsIUMpOigoIW5baV18fCFzLmlzT2JqZWN0KG5baV0pKSYmKG5baV09W10pLGUocix0LG5baV0sbykmJnMuaXNBcnJheShuW2ldKSYmKG5baV09TnIobltpXSkpLCFDKX1pZihzLmlzRm9ybURhdGEoQSkmJnMuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgcj17fTtyZXR1cm4gcy5mb3JFYWNoRW50cnkoQSwodCxuKT0+e2UoVXIodCksbixyLDApfSkscn1yZXR1cm4gbnVsbH12YXIgcEE9R3I7ZnVuY3Rpb24gTHIoQSxlLHIpe2lmKHMuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxzLnRyaW0oQSl9Y2F0Y2godCl7aWYodC5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyB0fXJldHVybihyfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIGpBPXt0cmFuc2l0aW9uYWw6dUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHIpe2xldCB0PXIuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj10LmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPXMuaXNPYmplY3QoZSk7aWYobyYmcy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLHMuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShwQShlKSk6ZTtpZihzLmlzQXJyYXlCdWZmZXIoZSl8fHMuaXNCdWZmZXIoZSl8fHMuaXNTdHJlYW0oZSl8fHMuaXNGaWxlKGUpfHxzLmlzQmxvYihlKSlyZXR1cm4gZTtpZihzLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihzLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiByLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgQztpZihvKXtpZih0LmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBXQShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEM9cy5pc0ZpbGVMaXN0KGUpKXx8dC5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBsPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gVChDP3siZmlsZXNbXSI6ZX06ZSxsJiZuZXcgbCx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIG98fG4/KHIuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxMcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgcj10aGlzLnRyYW5zaXRpb25hbHx8akEudHJhbnNpdGlvbmFsLHQ9ciYmci5mb3JjZWRKU09OUGFyc2luZyxuPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJnMuaXNTdHJpbmcoZSkmJih0JiYhdGhpcy5yZXNwb25zZVR5cGV8fG4pKXtsZXQgaT0hKHImJnIuc2lsZW50SlNPTlBhcnNpbmcpJiZuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChDKXtpZihpKXRocm93IEMubmFtZT09PSJTeW50YXhFcnJvciI/cC5mcm9tKEMscC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpDfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6RC5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6RC5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07cy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntqQS5oZWFkZXJzW0FdPXt9fSk7dmFyIHE9akE7dmFyIFRyPXMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksS2U9QT0+e2xldCBlPXt9LHIsdCxuO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihpKXtuPWkuaW5kZXhPZigiOiIpLHI9aS5zdWJzdHJpbmcoMCxuKS50cmltKCkudG9Mb3dlckNhc2UoKSx0PWkuc3Vic3RyaW5nKG4rMSkudHJpbSgpLCEoIXJ8fGVbcl0mJlRyW3JdKSYmKHI9PT0ic2V0LWNvb2tpZSI/ZVtyXT9lW3JdLnB1c2godCk6ZVtyXT1bdF06ZVtyXT1lW3JdP2Vbcl0rIiwgIit0OnQpfSksZX07dmFyIFdlPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gJChBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGRBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAoZEEpOlN0cmluZyhBKX1mdW5jdGlvbiB4cihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHI9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyx0O2Zvcig7dD1yLmV4ZWMoQSk7KWVbdFsxXV09dFsyXTtyZXR1cm4gZX12YXIgT3I9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gdkEoQSxlLHIsdCxuKXtpZihzLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLGUscik7aWYobiYmKGU9ciksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHQpKXJldHVybiBlLmluZGV4T2YodCkhPT0tMTtpZihzLmlzUmVnRXhwKHQpKXJldHVybiB0LnRlc3QoZSl9fWZ1bmN0aW9uIFByKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUscix0KT0+ci50b1VwcGVyQ2FzZSgpK3QpfWZ1bmN0aW9uIEpyKEEsZSl7bGV0IHI9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHQ9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSx0K3Ise3ZhbHVlOmZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gdGhpc1t0XS5jYWxsKHRoaXMsZSxuLG8saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIEs9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUscix0KXtsZXQgbj10aGlzO2Z1bmN0aW9uIG8oQyxsLEIpe2xldCBJPSQobCk7aWYoIUkpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBhPXMuZmluZEtleShuLEkpOyghYXx8blthXT09PXZvaWQgMHx8Qj09PSEwfHxCPT09dm9pZCAwJiZuW2FdIT09ITEpJiYoblthfHxsXT1kQShDKSl9bGV0IGk9KEMsbCk9PnMuZm9yRWFjaChDLChCLEkpPT5vKEIsSSxsKSk7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/aShlLHIpOnMuaXNTdHJpbmcoZSkmJihlPWUudHJpbSgpKSYmIU9yKGUpP2koS2UoZSkscik6ZSE9bnVsbCYmbyhyLGUsdCksdGhpc31nZXQoZSxyKXtpZihlPSQoZSksZSl7bGV0IHQ9cy5maW5kS2V5KHRoaXMsZSk7aWYodCl7bGV0IG49dGhpc1t0XTtpZighcilyZXR1cm4gbjtpZihyPT09ITApcmV0dXJuIHhyKG4pO2lmKHMuaXNGdW5jdGlvbihyKSlyZXR1cm4gci5jYWxsKHRoaXMsbix0KTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLmV4ZWMobik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHIpe2lmKGU9JChlKSxlKXtsZXQgdD1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hISh0JiZ0aGlzW3RdIT09dm9pZCAwJiYoIXJ8fHZBKHRoaXMsdGhpc1t0XSx0LHIpKSl9cmV0dXJuITF9ZGVsZXRlKGUscil7bGV0IHQ9dGhpcyxuPSExO2Z1bmN0aW9uIG8oaSl7aWYoaT0kKGkpLGkpe2xldCBDPXMuZmluZEtleSh0LGkpO0MmJighcnx8dkEodCx0W0NdLEMscikpJiYoZGVsZXRlIHRbQ10sbj0hMCl9fXJldHVybiBzLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKG8pOm8oZSksbn1jbGVhcihlKXtsZXQgcj1PYmplY3Qua2V5cyh0aGlzKSx0PXIubGVuZ3RoLG49ITE7Zm9yKDt0LS07KXtsZXQgbz1yW3RdOyghZXx8dkEodGhpcyx0aGlzW29dLG8sZSwhMCkpJiYoZGVsZXRlIHRoaXNbb10sbj0hMCl9cmV0dXJuIG59bm9ybWFsaXplKGUpe2xldCByPXRoaXMsdD17fTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKG4sbyk9PntsZXQgaT1zLmZpbmRLZXkodCxvKTtpZihpKXtyW2ldPWRBKG4pLGRlbGV0ZSByW29dO3JldHVybn1sZXQgQz1lP1ByKG8pOlN0cmluZyhvKS50cmltKCk7QyE9PW8mJmRlbGV0ZSByW29dLHJbQ109ZEEobiksdFtDXT0hMH0pLHRoaXN9Y29uY2F0KC4uLmUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLmUpfXRvSlNPTihlKXtsZXQgcj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBzLmZvckVhY2godGhpcywodCxuKT0+e3QhPW51bGwmJnQhPT0hMSYmKHJbbl09ZSYmcy5pc0FycmF5KHQpP3Quam9pbigiLCAiKTp0KX0pLHJ9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2Uscl0pPT5lKyI6ICIrcikuam9pbihgCmApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzP2U6bmV3IHRoaXMoZSl9c3RhdGljIGNvbmNhdChlLC4uLnIpe2xldCB0PW5ldyB0aGlzKGUpO3JldHVybiByLmZvckVhY2gobj0+dC5zZXQobikpLHR9c3RhdGljIGFjY2Vzc29yKGUpe2xldCB0PSh0aGlzW1dlXT10aGlzW1dlXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLG49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gbyhpKXtsZXQgQz0kKGkpO3RbQ118fChKcihuLGkpLHRbQ109ITApfXJldHVybiBzLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKG8pOm8oZSksdGhpc319O0suYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO3MucmVkdWNlRGVzY3JpcHRvcnMoSy5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCByPWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHQpe3RoaXNbcl09dH19fSk7cy5mcmVlemVNZXRob2RzKEspO3ZhciBTPUs7ZnVuY3Rpb24gQUEoQSxlKXtsZXQgcj10aGlzfHxxLHQ9ZXx8cixuPVMuZnJvbSh0LmhlYWRlcnMpLG89dC5kYXRhO3JldHVybiBzLmZvckVhY2goQSxmdW5jdGlvbihDKXtvPUMuY2FsbChyLG8sbi5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxuLm5vcm1hbGl6ZSgpLG99ZnVuY3Rpb24gZUEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBqZShBLGUscil7cC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixwLkVSUl9DQU5DRUxFRCxlLHIpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9cy5pbmhlcml0cyhqZSxwLHtfX0NBTkNFTF9fOiEwfSk7dmFyIHg9amU7ZnVuY3Rpb24gX0EoQSxlLHIpe2xldCB0PXIuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFyLnN0YXR1c3x8IXR8fHQoci5zdGF0dXMpP0Eocik6ZShuZXcgcCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Iuc3RhdHVzLFtwLkVSUl9CQURfUkVRVUVTVCxwLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3Ioci5zdGF0dXMvMTAwKS00XSxyLmNvbmZpZyxyLnJlcXVlc3QscikpfXZhciB2ZT1ELmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHIsdCxuLG8pe2xldCBpPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO3MuaXNOdW1iZXIocikmJmkucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHIpLnRvR01UU3RyaW5nKCkpLHMuaXNTdHJpbmcodCkmJmkucHVzaCgicGF0aD0iK3QpLHMuaXNTdHJpbmcobikmJmkucHVzaCgiZG9tYWluPSIrbiksbz09PSEwJiZpLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1pLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBWQShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIHpBKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiB0QShBLGUpe3JldHVybiBBJiYhVkEoZSk/ekEoQSxlKTplfXZhciBfZT1ELmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksdDtmdW5jdGlvbiBuKG8pe2xldCBpPW87cmV0dXJuIGUmJihyLnNldEF0dHJpYnV0ZSgiaHJlZiIsaSksaT1yLmhyZWYpLHIuc2V0QXR0cmlidXRlKCJocmVmIixpKSx7aHJlZjpyLmhyZWYscHJvdG9jb2w6ci5wcm90b2NvbD9yLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpyLmhvc3Qsc2VhcmNoOnIuc2VhcmNoP3Iuc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6ci5oYXNoP3IuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnIuaG9zdG5hbWUscG9ydDpyLnBvcnQscGF0aG5hbWU6ci5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/ci5wYXRobmFtZToiLyIrci5wYXRobmFtZX19cmV0dXJuIHQ9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oaSl7bGV0IEM9cy5pc1N0cmluZyhpKT9uKGkpOmk7cmV0dXJuIEMucHJvdG9jb2w9PT10LnByb3RvY29sJiZDLmhvc3Q9PT10Lmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIFpBKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBNcihBLGUpe0E9QXx8MTA7bGV0IHI9bmV3IEFycmF5KEEpLHQ9bmV3IEFycmF5KEEpLG49MCxvPTAsaTtyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKGwpe2xldCBCPURhdGUubm93KCksST10W29dO2l8fChpPUIpLHJbbl09bCx0W25dPUI7bGV0IGE9byxRPTA7Zm9yKDthIT09bjspUSs9clthKytdLGE9YSVBO2lmKG49KG4rMSklQSxuPT09byYmKG89KG8rMSklQSksQi1pPGUpcmV0dXJuO2xldCBnPUkmJkItSTtyZXR1cm4gZz9NYXRoLnJvdW5kKFEqMWUzL2cpOnZvaWQgMH19dmFyIFZlPU1yO2Z1bmN0aW9uIHplKEEsZSl7bGV0IHI9MCx0PVZlKDUwLDI1MCk7cmV0dXJuIG49PntsZXQgbz1uLmxvYWRlZCxpPW4ubGVuZ3RoQ29tcHV0YWJsZT9uLnRvdGFsOnZvaWQgMCxDPW8tcixsPXQoQyksQj1vPD1pO3I9bztsZXQgST17bG9hZGVkOm8sdG90YWw6aSxwcm9ncmVzczppP28vaTp2b2lkIDAsYnl0ZXM6QyxyYXRlOmx8fHZvaWQgMCxlc3RpbWF0ZWQ6bCYmaSYmQj8oaS1vKS9sOnZvaWQgMCxldmVudDpufTtJW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShJKX19dmFyIEhyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsWmU9SHImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLHQpe2xldCBuPUEuZGF0YSxvPVMuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6aSx3aXRoWFNSRlRva2VuOkN9PUEsbDtmdW5jdGlvbiBCKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShsKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpfWxldCBJO2lmKHMuaXNGb3JtRGF0YShuKSl7aWYoRC5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fEQuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KW8uc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEk9by5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbRSwuLi51XT1JP0kuc3BsaXQoIjsiKS5tYXAobT0+bS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtvLnNldENvbnRlbnRUeXBlKFtFfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBhPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBFPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO28uc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKEUrIjoiK3UpKX1sZXQgUT10QShBLmJhc2VVUkwsQS51cmwpO2Eub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoUSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxhLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIGcoKXtpZighYSlyZXR1cm47bGV0IEU9Uy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYSYmYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksbT17ZGF0YTohaXx8aT09PSJ0ZXh0Inx8aT09PSJqc29uIj9hLnJlc3BvbnNlVGV4dDphLnJlc3BvbnNlLHN0YXR1czphLnN0YXR1cyxzdGF0dXNUZXh0OmEuc3RhdHVzVGV4dCxoZWFkZXJzOkUsY29uZmlnOkEscmVxdWVzdDphfTtfQShmdW5jdGlvbihVKXtyKFUpLEIoKX0sZnVuY3Rpb24oVSl7dChVKSxCKCl9LG0pLGE9bnVsbH1pZigib25sb2FkZW5kImluIGE/YS5vbmxvYWRlbmQ9ZzphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFhfHxhLnJlYWR5U3RhdGUhPT00fHxhLnN0YXR1cz09PTAmJiEoYS5yZXNwb25zZVVSTCYmYS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoZyl9LGEub25hYm9ydD1mdW5jdGlvbigpe2EmJih0KG5ldyBwKCJSZXF1ZXN0IGFib3J0ZWQiLHAuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbCl9LGEub25lcnJvcj1mdW5jdGlvbigpe3QobmV3IHAoIk5ldHdvcmsgRXJyb3IiLHAuRVJSX05FVFdPUkssQSxhKSksYT1udWxsfSxhLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixtPUEudHJhbnNpdGlvbmFsfHx1QTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksdChuZXcgcCh1LG0uY2xhcmlmeVRpbWVvdXRFcnJvcj9wLkVUSU1FRE9VVDpwLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGx9LEQuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoQyYmcy5pc0Z1bmN0aW9uKEMpJiYoQz1DKEEpKSxDfHxDIT09ITEmJl9lKFEpKSl7bGV0IEU9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmdmUucmVhZChBLnhzcmZDb29raWVOYW1lKTtFJiZvLnNldChBLnhzcmZIZWFkZXJOYW1lLEUpfW49PT12b2lkIDAmJm8uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYSYmcy5mb3JFYWNoKG8udG9KU09OKCksZnVuY3Rpb24odSxtKXthLnNldFJlcXVlc3RIZWFkZXIobSx1KX0pLHMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoYS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksaSYmaSE9PSJqc29uIiYmKGEucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHplKEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS51cGxvYWQmJmEudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix6ZShBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYobD1FPT57YSYmKHQoIUV8fEUudHlwZT9uZXcgeChudWxsLEEsYSk6RSksYS5hYm9ydCgpLGE9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9sKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpKSk7bGV0IGM9WkEoUSk7aWYoYyYmRC5wcm90b2NvbHMuaW5kZXhPZihjKT09PS0xKXt0KG5ldyBwKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2MrIjoiLHAuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59YS5zZW5kKG58fG51bGwpfSl9O3ZhciBYQT17aHR0cDpRQSx4aHI6WmV9O3MuZm9yRWFjaChYQSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBYZT1BPT5gLSAke0F9YCxZcj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbUE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSxyLHQsbj17fTtmb3IobGV0IG89MDtvPGU7bysrKXtyPUFbb107bGV0IGk7aWYodD1yLCFZcihyKSYmKHQ9WEFbKGk9U3RyaW5nKHIpKS50b0xvd2VyQ2FzZSgpXSx0PT09dm9pZCAwKSl0aHJvdyBuZXcgcChgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHQpYnJlYWs7bltpfHwiIyIrb109dH1pZighdCl7bGV0IG89T2JqZWN0LmVudHJpZXMobikubWFwKChbQyxsXSk9PmBhZGFwdGVyICR7Q30gYCsobD09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9vLmxlbmd0aD4xP2BzaW5jZSA6CmArby5tYXAoWGUpLmpvaW4oYApgKToiICIrWGUob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgcCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiB0fSxhZGFwdGVyczpYQX07ZnVuY3Rpb24gJEEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHgobnVsbCxBKX1mdW5jdGlvbiB5QShBKXtyZXR1cm4gJEEoQSksQS5oZWFkZXJzPVMuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1BQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fHEuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gJEEoQSksdC5kYXRhPUFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHQpLHQuaGVhZGVycz1TLmZyb20odC5oZWFkZXJzKSx0fSxmdW5jdGlvbih0KXtyZXR1cm4gZUEodCl8fCgkQShBKSx0JiZ0LnJlc3BvbnNlJiYodC5yZXNwb25zZS5kYXRhPUFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHQucmVzcG9uc2UpLHQucmVzcG9uc2UuaGVhZGVycz1TLmZyb20odC5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHQpfSl9dmFyICRlPUE9PkEgaW5zdGFuY2VvZiBTP3suLi5BfTpBO2Z1bmN0aW9uIEwoQSxlKXtlPWV8fHt9O2xldCByPXt9O2Z1bmN0aW9uIHQoQixJLGEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQikmJnMuaXNQbGFpbk9iamVjdChJKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOmF9LEIsSSk6cy5pc1BsYWluT2JqZWN0KEkpP3MubWVyZ2Uoe30sSSk6cy5pc0FycmF5KEkpP0kuc2xpY2UoKTpJfWZ1bmN0aW9uIG4oQixJLGEpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEIpKXJldHVybiB0KHZvaWQgMCxCLGEpfWVsc2UgcmV0dXJuIHQoQixJLGEpfWZ1bmN0aW9uIG8oQixJKXtpZighcy5pc1VuZGVmaW5lZChJKSlyZXR1cm4gdCh2b2lkIDAsSSl9ZnVuY3Rpb24gaShCLEkpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEIpKXJldHVybiB0KHZvaWQgMCxCKX1lbHNlIHJldHVybiB0KHZvaWQgMCxJKX1mdW5jdGlvbiBDKEIsSSxhKXtpZihhIGluIGUpcmV0dXJuIHQoQixJKTtpZihhIGluIEEpcmV0dXJuIHQodm9pZCAwLEIpfWxldCBsPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOkMsaGVhZGVyczooQixJKT0+bigkZShCKSwkZShJKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihJKXtsZXQgYT1sW0ldfHxuLFE9YShBW0ldLGVbSV0sSSk7cy5pc1VuZGVmaW5lZChRKSYmYSE9PUN8fChyW0ldPVEpfSkscn12YXIgaEE9IjEuNi44Ijt2YXIgQWU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57QWVbQV09ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIEF0PXt9O0FlLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHIsdCl7ZnVuY3Rpb24gbihvLGkpe3JldHVybiJbQXhpb3MgdiIraEErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitpKyh0PyIuICIrdDoiIil9cmV0dXJuKG8saSxDKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgcChuKGksIiBoYXMgYmVlbiByZW1vdmVkIisocj8iIGluICIrcjoiIikpLHAuRVJSX0RFUFJFQ0FURUQpO3JldHVybiByJiYhQXRbaV0mJihBdFtpXT0hMCxjb25zb2xlLndhcm4obihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IityKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLGksQyk6ITB9fTtmdW5jdGlvbiBxcihBLGUscil7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBwKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixwLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxuPXQubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IG89dFtuXSxpPWVbb107aWYoaSl7bGV0IEM9QVtvXSxsPUM9PT12b2lkIDB8fGkoQyxvLEEpO2lmKGwhPT0hMCl0aHJvdyBuZXcgcCgib3B0aW9uICIrbysiIG11c3QgYmUgIitsLHAuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHIhPT0hMCl0aHJvdyBuZXcgcCgiVW5rbm93biBvcHRpb24gIitvLHAuRVJSX0JBRF9PUFRJT04pfX12YXIgd0E9e2Fzc2VydE9wdGlvbnM6cXIsdmFsaWRhdG9yczpBZX07dmFyIE89d0EudmFsaWRhdG9ycyxXPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgcUEscmVzcG9uc2U6bmV3IHFBfX1hc3luYyByZXF1ZXN0KGUscil7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUscil9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgbz1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjt0LnN0YWNrP28mJiFTdHJpbmcodC5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJih0LnN0YWNrKz1gCmArbyk6dC5zdGFjaz1vfXRocm93IHR9fV9yZXF1ZXN0KGUscil7dHlwZW9mIGU9PSJzdHJpbmciPyhyPXJ8fHt9LHIudXJsPWUpOnI9ZXx8e30scj1MKHRoaXMuZGVmYXVsdHMscik7bGV0e3RyYW5zaXRpb25hbDp0LHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOm99PXI7dCE9PXZvaWQgMCYmd0EuYXNzZXJ0T3B0aW9ucyh0LHtzaWxlbnRKU09OUGFyc2luZzpPLnRyYW5zaXRpb25hbChPLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOk8udHJhbnNpdGlvbmFsKE8uYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpPLnRyYW5zaXRpb25hbChPLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKHMuaXNGdW5jdGlvbihuKT9yLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTp3QS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpPLmZ1bmN0aW9uLHNlcmlhbGl6ZTpPLmZ1bmN0aW9ufSwhMCkpLHIubWV0aG9kPShyLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPW8mJnMubWVyZ2Uoby5jb21tb24sb1tyLm1ldGhvZF0pO28mJnMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxjPT57ZGVsZXRlIG9bY119KSxyLmhlYWRlcnM9Uy5jb25jYXQoaSxvKTtsZXQgQz1bXSxsPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihFKXt0eXBlb2YgRS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZFLnJ1bldoZW4ocik9PT0hMXx8KGw9bCYmRS5zeW5jaHJvbm91cyxDLnVuc2hpZnQoRS5mdWxmaWxsZWQsRS5yZWplY3RlZCkpfSk7bGV0IEI9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihFKXtCLnB1c2goRS5mdWxmaWxsZWQsRS5yZWplY3RlZCl9KTtsZXQgSSxhPTAsUTtpZighbCl7bGV0IGM9W3lBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoYy51bnNoaWZ0LmFwcGx5KGMsQyksYy5wdXNoLmFwcGx5KGMsQiksUT1jLmxlbmd0aCxJPVByb21pc2UucmVzb2x2ZShyKTthPFE7KUk9SS50aGVuKGNbYSsrXSxjW2ErK10pO3JldHVybiBJfVE9Qy5sZW5ndGg7bGV0IGc9cjtmb3IoYT0wO2E8UTspe2xldCBjPUNbYSsrXSxFPUNbYSsrXTt0cnl7Zz1jKGcpfWNhdGNoKHUpe0UuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7ST15QS5jYWxsKHRoaXMsZyl9Y2F0Y2goYyl7cmV0dXJuIFByb21pc2UucmVqZWN0KGMpfWZvcihhPTAsUT1CLmxlbmd0aDthPFE7KUk9SS50aGVuKEJbYSsrXSxCW2ErK10pO3JldHVybiBJfWdldFVyaShlKXtlPUwodGhpcy5kZWZhdWx0cyxlKTtsZXQgcj10QShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBYKHIsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKX19O3MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oZSl7Vy5wcm90b3R5cGVbZV09ZnVuY3Rpb24ocix0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEwodHx8e30se21ldGhvZDplLHVybDpyLGRhdGE6KHR8fHt9KS5kYXRhfSkpfX0pO3MuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKG8saSxDKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEwoQ3x8e30se21ldGhvZDplLGhlYWRlcnM6dD97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6byxkYXRhOml9KSl9fVcucHJvdG90eXBlW2VdPXIoKSxXLnByb3RvdHlwZVtlKyJGb3JtIl09cighMCl9KTt2YXIgckE9Vzt2YXIgZWU9Y2xhc3MgQXtjb25zdHJ1Y3RvcihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHI7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG8pe3I9b30pO2xldCB0PXRoaXM7dGhpcy5wcm9taXNlLnRoZW4obj0+e2lmKCF0Ll9saXN0ZW5lcnMpcmV0dXJuO2xldCBvPXQuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtvLS0gPjA7KXQuX2xpc3RlbmVyc1tvXShuKTt0Ll9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPW49PntsZXQgbyxpPW5ldyBQcm9taXNlKEM9Pnt0LnN1YnNjcmliZShDKSxvPUN9KS50aGVuKG4pO3JldHVybiBpLmNhbmNlbD1mdW5jdGlvbigpe3QudW5zdWJzY3JpYmUobyl9LGl9LGUoZnVuY3Rpb24obyxpLEMpe3QucmVhc29ufHwodC5yZWFzb249bmV3IHgobyxpLEMpLHIodC5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoZSl7aWYodGhpcy5yZWFzb24pe2UodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX11bnN1YnNjcmliZShlKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTtyIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UociwxKX1zdGF0aWMgc291cmNlKCl7bGV0IGU7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKG4pe2U9bn0pLGNhbmNlbDplfX19LGV0PWVlO2Z1bmN0aW9uIHRlKEEpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gQS5hcHBseShudWxsLHIpfX1mdW5jdGlvbiByZShBKXtyZXR1cm4gcy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgbmU9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKG5lKS5mb3JFYWNoKChbQSxlXSk9PntuZVtlXT1BfSk7dmFyIHR0PW5lO2Z1bmN0aW9uIHJ0KEEpe2xldCBlPW5ldyByQShBKSxyPVYockEucHJvdG90eXBlLnJlcXVlc3QsZSk7cmV0dXJuIHMuZXh0ZW5kKHIsckEucHJvdG90eXBlLGUse2FsbE93bktleXM6ITB9KSxzLmV4dGVuZChyLGUsbnVsbCx7YWxsT3duS2V5czohMH0pLHIuY3JlYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBydChMKEEsbikpfSxyfXZhciB5PXJ0KHEpO3kuQXhpb3M9ckE7eS5DYW5jZWxlZEVycm9yPXg7eS5DYW5jZWxUb2tlbj1ldDt5LmlzQ2FuY2VsPWVBO3kuVkVSU0lPTj1oQTt5LnRvRm9ybURhdGE9VDt5LkF4aW9zRXJyb3I9cDt5LkNhbmNlbD15LkNhbmNlbGVkRXJyb3I7eS5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfTt5LnNwcmVhZD10ZTt5LmlzQXhpb3NFcnJvcj1yZTt5Lm1lcmdlQ29uZmlnPUw7eS5BeGlvc0hlYWRlcnM9Uzt5LmZvcm1Ub0pTT049QT0+cEEocy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTt5LmdldEFkYXB0ZXI9bUEuZ2V0QWRhcHRlcjt5Lkh0dHBTdGF0dXNDb2RlPXR0O3kuZGVmYXVsdD15O3ZhciBqPXk7dmFye0F4aW9zOkRhLEF4aW9zRXJyb3I6U2EsQ2FuY2VsZWRFcnJvcjpiYSxpc0NhbmNlbDpGYSxDYW5jZWxUb2tlbjprYSxWRVJTSU9OOlJhLGFsbDpVYSxDYW5jZWw6TmEsaXNBeGlvc0Vycm9yOkdhLHNwcmVhZDpMYSx0b0Zvcm1EYXRhOlRhLEF4aW9zSGVhZGVyczp4YSxIdHRwU3RhdHVzQ29kZTpPYSxmb3JtVG9KU09OOlBhLGdldEFkYXB0ZXI6SmEsbWVyZ2VDb25maWc6TWF9PWo7YXN5bmMgZnVuY3Rpb24gS3IoQSxlKXtsZXQgcj1BLHQ9bnVsbDtpZihyPT1udWxsKXQ9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYoci5zdGFydHNXaXRoKCJodHRwIikpe2xldCBuPWF3YWl0IGouZ2V0KHIse3Jlc3BvbnNlVHlwZToiYmxvYiIscGFyYW1zOmV9KSxvPVVSTC5jcmVhdGVPYmplY3RVUkwobi5kYXRhKTt0PW5ldyBXb3JrZXIobyx7dHlwZToibW9kdWxlIn0pfWVsc2UgdD1uZXcgV29ya2VyKHIse3R5cGU6Im1vZHVsZSJ9KTtyZXR1cm4gdH12YXIgbkE9S3I7ZnVuY3Rpb24gbnQoQSl7bGV0IGU9eEEoQSkscj1BO3JldHVybiByLnRlcm1pbmF0ZWQ9ITEsci53b3JrZXJQcm94eT1lLHIub3JpZ2luYWxUZXJtaW5hdGU9ci50ZXJtaW5hdGUsci50ZXJtaW5hdGU9KCk9PntyLnRlcm1pbmF0ZWQ9ITAsci53b3JrZXJQcm94eVtUQV0oKSxyLm9yaWdpbmFsVGVybWluYXRlKCl9LHt3b3JrZXJQcm94eTplLHdvcmtlcjpyfX1hc3luYyBmdW5jdGlvbiBXcihBLGUscil7bGV0IHQ7aWYoQSE9bnVsbCl7bGV0IG89QTtyZXR1cm4gby53b3JrZXJQcm94eSE9PXZvaWQgMD8odD1vLndvcmtlclByb3h5LHt3b3JrZXJQcm94eTp0LHdvcmtlcjpvfSk6bnQoQSl9bGV0IG49YXdhaXQgbkEoZSxyKTtyZXR1cm4gbnQobil9dmFyIG90PVdyO2FzeW5jIGZ1bmN0aW9uIGpyKEEsZSxyKXtsZXQgdD0idW5rbm93biI7dHlwZW9mIEEhPSJzdHJpbmciP3Q9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP3Q9QTp0PXR5cGVvZiBlPCJ1Ij9gJHtlfS8ke0F9YDpBLHQuZW5kc1dpdGgoIi5qcyIpJiYodD10LnN1YnN0cmluZygwLHQubGVuZ3RoLTMpKSx0LmVuZHNXaXRoKCIud2FzbSIpJiYodD10LnN1YnN0cmluZygwLHQubGVuZ3RoLTUpKTtsZXQgbj1gJHt0fS53YXNtYCxpPShhd2FpdCBqLmdldChuLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6cn0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7dH0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTppfSl9dmFyIGl0PWpyO3ZhciBhdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgZ3Q9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsc3Q9bmV3IFRleHRFbmNvZGVyLEl0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiB2cihBLGUpe2xldCByPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHQ9QS5mc19vcGVuKGUsci5mbGFncyksbz1BLmZzX3N0YXQoZSkuc2l6ZSxpPW51bGw7Z3Q/aT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIobyk6aT1uZXcgQXJyYXlCdWZmZXIobyk7bGV0IEM9bmV3IFVpbnQ4QXJyYXkoaSk7cmV0dXJuIEEuZnNfcmVhZCh0LEMsMCxvLDApLEEuZnNfY2xvc2UodCksQ31mdW5jdGlvbiBDdChBLGUscil7bGV0IHQ9bnVsbDtndD90PW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTp0PW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgbj1uZXcgVWludDhBcnJheSh0KSxvPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHIpO3JldHVybiBuLnNldChvKSxufWZ1bmN0aW9uIGgoQSxlLHIsdCl7bGV0IG49MDtyZXR1cm4gZSE9PW51bGwmJihuPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHIsdCxlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxuKSksbn1mdW5jdGlvbiBKKEEsZSxyKXtsZXQgdD1KU09OLnN0cmluZ2lmeShlKSxuPUEubGVuZ3RoQnl0ZXNVVEY4KHQpKzEsbz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHIsbl0pO0Euc3RyaW5nVG9VVEY4KHQsbyxuKX1mdW5jdGlvbiBiKEEsZSxyLHQpe2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUscl0pLG89QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxyXSksaT1DdChBLG4sbyk7cmV0dXJuIE4odCxpLmJ1ZmZlcil9ZnVuY3Rpb24gREEoQSxlKXtsZXQgcj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSx0PUEuVVRGOFRvU3RyaW5nKHIpO3JldHVybiBKU09OLnBhcnNlKHQpfWZ1bmN0aW9uIF9yKEEsZSxyLHQpe3QhPW51bGwmJnQubGVuZ3RoPjAmJnQuZm9yRWFjaChmdW5jdGlvbihCLEkpe3N3aXRjaChCLnR5cGUpe2Nhc2UgZC5UZXh0U3RyZWFtOntsZXQgYT1zdC5lbmNvZGUoQi5kYXRhLmRhdGEpLFE9aChBLGEsSSwwKSxnPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YH07SihBLGcsSSk7YnJlYWt9Y2FzZSBkLkpzb25Db21wYXRpYmxlOntsZXQgYT1zdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoQi5kYXRhKSksUT1oKEEsYSxJLDApLGc9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTtKKEEsZyxJKTticmVha31jYXNlIGQuQmluYXJ5U3RyZWFtOntsZXQgYT1CLmRhdGEuZGF0YSxRPWgoQSxhLEksMCksZz17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWB9O0ooQSxnLEkpO2JyZWFrfWNhc2UgZC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoQi5kYXRhLnBhdGgsQi5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgZC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShCLmRhdGEucGF0aCxCLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBkLkltYWdlOntsZXQgYT1CLmRhdGEsUT1oKEEsYS5kYXRhLEksMCksZz1oKEEsYS5kaXJlY3Rpb24sSSwxKSxjPXR5cGVvZiBhLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGEubWV0YWRhdGEuZW50cmllcygpKTpbXSxFPXtpbWFnZVR5cGU6YS5pbWFnZVR5cGUsbmFtZTphLm5hbWUsb3JpZ2luOmEub3JpZ2luLHNwYWNpbmc6YS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2d9YCxzaXplOmEuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG1ldGFkYXRhOmN9O0ooQSxFLEkpO2JyZWFrfWNhc2UgZC5NZXNoOntsZXQgYT1CLmRhdGEsUT1oKEEsYS5wb2ludHMsSSwwKSxnPWgoQSxhLmNlbGxzLEksMSksYz1oKEEsYS5wb2ludERhdGEsSSwyKSxFPWgoQSxhLmNlbGxEYXRhLEksMyksdT17bWVzaFR5cGU6YS5tZXNoVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxudW1iZXJPZkNlbGxzOmEubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2d9YCxjZWxsQnVmZmVyU2l6ZTphLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWB9O0ooQSx1LEkpO2JyZWFrfWNhc2UgZC5Qb2ludFNldDp7bGV0IGE9Qi5kYXRhLFE9aChBLGEucG9pbnRzLEksMCksZz1oKEEsYS5wb2ludERhdGEsSSwxKSxjPXtwb2ludFNldFR5cGU6YS5wb2ludFNldFR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gfTtKKEEsYyxJKTticmVha31jYXNlIGQuUG9seURhdGE6e2xldCBhPUIuZGF0YSxRPWgoQSxhLnBvaW50cyxJLDApLGc9aChBLGEudmVydGljZXMsSSwxKSxjPWgoQSxhLmxpbmVzLEksMiksRT1oKEEsYS5wb2x5Z29ucyxJLDMpLHU9aChBLGEudHJpYW5nbGVTdHJpcHMsSSw0KSxtPWgoQSxhLnBvaW50RGF0YSxJLDUpLFI9aChBLGEucG9pbnREYXRhLEksNiksVT17cG9seURhdGFUeXBlOmEucG9seURhdGFUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLHZlcnRpY2VzQnVmZmVyU2l6ZTphLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2d9YCxsaW5lc0J1ZmZlclNpemU6YS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAscG9seWdvbnNCdWZmZXJTaXplOmEucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTphLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHttfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtKKEEsVSxJKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgbj1BLnN0YWNrU2F2ZSgpLG89MDt0cnl7bz1BLmNhbGxNYWluKGUuc2xpY2UoKSl9Y2F0Y2goQil7dGhyb3cgdHlwZW9mIEI9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoQikpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksQn1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKG4pfWxldCBpPUEuZ2V0TW9kdWxlU3Rkb3V0KCksQz1BLmdldE1vZHVsZVN0ZGVycigpLGw9W107cmV0dXJuIHIhPW51bGwmJnIubGVuZ3RoPjAmJm89PT0wJiZyLmZvckVhY2goZnVuY3Rpb24oQixJKXtsZXQgYT1udWxsO3N3aXRjaChCLnR5cGUpe2Nhc2UgZC5UZXh0U3RyZWFtOntsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxjPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLEU9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGcsYyk7YT17ZGF0YTpJdC5kZWNvZGUoRSl9O2JyZWFrfWNhc2UgZC5Kc29uQ29tcGF0aWJsZTp7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksYz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixnLGMpO2E9SlNPTi5wYXJzZShJdC5kZWNvZGUoRSkpO2JyZWFrfWNhc2UgZC5CaW5hcnlTdHJlYW06e2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLGM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSk7YT17ZGF0YTpDdChBLGcsYyl9O2JyZWFrfWNhc2UgZC5UZXh0RmlsZTp7YT17cGF0aDpCLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoQi5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIGQuQmluYXJ5RmlsZTp7YT17cGF0aDpCLmRhdGEucGF0aCxkYXRhOnZyKEEsQi5kYXRhLnBhdGgpfTticmVha31jYXNlIGQuSW1hZ2U6e2xldCBnPURBKEEsSSk7Zy5kYXRhPWIoQSxJLDAsZy5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksZy5kaXJlY3Rpb249YihBLEksMSx3LkZsb2F0NjQpLGcubWV0YWRhdGE9bmV3IE1hcChnLm1ldGFkYXRhKSxhPWc7YnJlYWt9Y2FzZSBkLk1lc2g6e2xldCBnPURBKEEsSSk7Zy5udW1iZXJPZlBvaW50cz4wP2cucG9pbnRzPWIoQSxJLDAsZy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmcucG9pbnRzPU4oZy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mQ2VsbHM+MD9nLmNlbGxzPWIoQSxJLDEsZy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6Zy5jZWxscz1OKGcubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mUG9pbnRQaXhlbHM+MD9nLnBvaW50RGF0YT1iKEEsSSwyLGcubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOmcucG9pbnREYXRhPU4oZy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Zy5jZWxsRGF0YT1iKEEsSSwzLGcubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5jZWxsRGF0YT1OKGcubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9ZzticmVha31jYXNlIGQuUG9pbnRTZXQ6e2xldCBnPURBKEEsSSk7Zy5udW1iZXJPZlBvaW50cz4wP2cucG9pbnRzPWIoQSxJLDAsZy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpnLnBvaW50cz1OKGcucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZQb2ludFBpeGVscz4wP2cucG9pbnREYXRhPWIoQSxJLDEsZy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOmcucG9pbnREYXRhPU4oZy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPWc7YnJlYWt9Y2FzZSBkLlBvbHlEYXRhOntsZXQgZz1EQShBLEkpO2cubnVtYmVyT2ZQb2ludHM+MD9nLnBvaW50cz1iKEEsSSwwLHcuRmxvYXQzMik6Zy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxnLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP2cudmVydGljZXM9YihBLEksMSxmLlVJbnQzMik6Zy52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksZy5saW5lc0J1ZmZlclNpemU+MD9nLmxpbmVzPWIoQSxJLDIsZi5VSW50MzIpOmcubGluZXM9bmV3IFVpbnQzMkFycmF5LGcucG9seWdvbnNCdWZmZXJTaXplPjA/Zy5wb2x5Z29ucz1iKEEsSSwzLGYuVUludDMyKTpnLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxnLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP2cudHJpYW5nbGVTdHJpcHM9YihBLEksNCxmLlVJbnQzMik6Zy50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksZy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Zy5wb2ludERhdGE9YihBLEksNSxnLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9TihnLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Zy5jZWxsRGF0YT1iKEEsSSw2LGcucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOmcuY2VsbERhdGE9TihnLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1nO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IFE9e3R5cGU6Qi50eXBlLGRhdGE6YX07bC5wdXNoKFEpfSkse3JldHVyblZhbHVlOm8sc3Rkb3V0Omksc3RkZXJyOkMsb3V0cHV0czpsfX12YXIgQnQ9X3I7dmFyIFZyPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiB6cihBLGUpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHI9W107Zm9yKGxldCB0PTA7dDxBLmxlbmd0aDt0Kyspe2xldCBuPVpyKEFbdF0sZSk7biE9PW51bGwmJnIucHVzaChuKX1yZXR1cm4gcn1mdW5jdGlvbiBacihBLGUpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHI9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/cj1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihyPUEpLFZyJiZyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDplP3I6ci5zbGljZSgwKX12YXIgbHQ9enI7ZnVuY3Rpb24gWHIoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIGN0PVhyO2Z1bmN0aW9uICRyKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciBFdD0kcjtmdW5jdGlvbiBBbihBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgUXQ9QW47dmFyIGVuO2Z1bmN0aW9uIFNBKCl7cmV0dXJuIGVufXZhciB0bjtmdW5jdGlvbiBmdCgpe3JldHVybiB0bn12YXIgcm47ZnVuY3Rpb24gYkEoKXtyZXR1cm4gcm59dmFyIG9lPW5ldyBNYXA7ZnVuY3Rpb24gbm4oKXtsZXQgQT1iQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW51bGwpLEF9ZnVuY3Rpb24gdXQoKXtsZXQgQT1TQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW5ldyBVUkwoIi9waXBlbGluZXMiLGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbikuaHJlZiksQX1mdW5jdGlvbiBGQSgpe2xldCBBPWZ0KCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9e30pLEF9YXN5bmMgZnVuY3Rpb24gb24oQSxlLHIpe2xldCB0PUEsbj1BO2lmKHR5cGVvZiBBIT0ic3RyaW5nIiYmKHQ9bmV3IFVSTChBLmhyZWYpLG49dC5ocmVmKSxvZS5oYXMobikpcmV0dXJuIG9lLmdldChuKTt7bGV0IG89YXdhaXQgaXQoQSxlPy50b1N0cmluZygpPz91dCgpLHI/P0ZBKCkpO3JldHVybiBvZS5zZXQobixvKSxvfX1hc3luYyBmdW5jdGlvbiBhbihBLGUscix0LG4pe2lmKCFhd2FpdCBhdCgpKXtsZXQgdT0iV2ViQXNzZW1ibHkgU0lNRCBzdXBwb3J0IGlzIHJlcXVpcmVkIC0tIHBsZWFzZSB1cGRhdGUgeW91ciBicm93c2VyLiI7dGhyb3cgYWxlcnQodSksbmV3IEVycm9yKHUpfWxldCBvPW4/LndlYldvcmtlcj8/bnVsbDtpZihvPT09ITEpe2xldCB1PWF3YWl0IG9uKEEudG9TdHJpbmcoKSxuPy5waXBlbGluZUJhc2VVcmwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/RkEoKSk7cmV0dXJuIEJ0KHUsZSxyLHQpfWxldCBpPW8sQz1uPy5waXBlbGluZVdvcmtlclVybD8/bm4oKSxsPXR5cGVvZiBDIT0ic3RyaW5nIiYmdHlwZW9mIEM/LmhyZWY8InUiP0MuaHJlZjpDLHt3b3JrZXJQcm94eTpCLHdvcmtlcjpJfT1hd2FpdCBvdChpLGwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/RkEoKSk7aT1JO2xldCBhPVtdO3QhPW51bGwmJnQubGVuZ3RoPjAmJnQuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1LnR5cGU9PT1kLkJpbmFyeVN0cmVhbSl7bGV0IG09dS5kYXRhLmRhdGE7YS5wdXNoKG0pfWVsc2UgaWYodS50eXBlPT09ZC5CaW5hcnlGaWxlKXtsZXQgbT11LmRhdGEuZGF0YTthLnB1c2gobSl9ZWxzZSBpZih1LnR5cGU9PT1kLkltYWdlKXtsZXQgbT11LmRhdGE7bS5kYXRhIT09bnVsbCYmYS5wdXNoKC4uLmN0KG0pKX1lbHNlIGlmKHUudHlwZT09PWQuTWVzaCl7bGV0IG09dS5kYXRhO2EucHVzaCguLi5FdChtKSl9ZWxzZSBpZih1LnR5cGU9PT1kLlBvbHlEYXRhKXtsZXQgbT11LmRhdGE7YS5wdXNoKC4uLlF0KG0pKX19KTtsZXQgUT1uPy5waXBlbGluZUJhc2VVcmw/P3V0KCksZz10eXBlb2YgUSE9InN0cmluZyImJnR5cGVvZiBRPy5ocmVmPCJ1Ij9RLmhyZWY6USxjPXQhPW51bGw/T0EodCxsdChhLG4/Lm5vQ29weSkpOm51bGwsRT1hd2FpdCBCLnJ1blBpcGVsaW5lKEEudG9TdHJpbmcoKSxnLGUscixjLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P0ZBKCkpO3JldHVybntyZXR1cm5WYWx1ZTpFLnJldHVyblZhbHVlLHN0ZG91dDpFLnN0ZG91dCxzdGRlcnI6RS5zdGRlcnIsb3V0cHV0czpFLm91dHB1dHMsd2ViV29ya2VyOml9fXZhciBvQT1hbjt2YXIgc249bnVsbDtmdW5jdGlvbiBwdCgpe3JldHVybiBzbn12YXIgaWUsSW49YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGl0ay13YXNtL2NvbXBhcmUtaW1hZ2VzQCR7UkF9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBScyhBKXtpZT1BfWZ1bmN0aW9uIGtBKCl7aWYodHlwZW9mIGllPCJ1IilyZXR1cm4gaWU7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6SW59dmFyIGFlLGduPW51bGw7ZnVuY3Rpb24gZHQoQSl7YWU9QX1mdW5jdGlvbiB2KCl7aWYodHlwZW9mIGFlPCJ1IilyZXR1cm4gYWU7bGV0IEE9YkEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6Z259dmFyIF89bnVsbDthc3luYyBmdW5jdGlvbiBtdCgpe2xldCBBPXYoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO189YXdhaXQgbkEoZSl9ZnVuY3Rpb24gT3MoQSl7Xz1BfWFzeW5jIGZ1bmN0aW9uIHl0KCl7aWYoXyE9PW51bGwpcmV0dXJuIF8udGVybWluYXRlZCYmYXdhaXQgbXQoKSxfO2xldCBBPXB0KCk7cmV0dXJuIEEhPT1udWxsP0E6KGF3YWl0IG10KCksXyl9YXN5bmMgZnVuY3Rpb24gQ24oQSxlPXtiYXNlbGluZUltYWdlczpbXX0pe2xldCByPVt7dHlwZTpkLkpzb25Db21wYXRpYmxlfSx7dHlwZTpkLkltYWdlfSx7dHlwZTpkLkltYWdlfV0sdD1be3R5cGU6ZC5JbWFnZSxkYXRhOkF9XSxuPVtdO2lmKG4ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiMSIpLG4ucHVzaCgiMiIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgZS5iYXNlbGluZUltYWdlczwidSIpe2lmKGUuYmFzZWxpbmVJbWFnZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCciYmFzZWxpbmUtaW1hZ2VzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO24ucHVzaCgiLS1iYXNlbGluZS1pbWFnZXMiKSxhd2FpdCBQcm9taXNlLmFsbChlLmJhc2VsaW5lSW1hZ2VzLm1hcChhc3luYyBFPT57bGV0IHU9dC5sZW5ndGgudG9TdHJpbmcoKTt0LnB1c2goe3R5cGU6ZC5JbWFnZSxkYXRhOkV9KSxuLnB1c2godSl9KSl9dHlwZW9mIGUuZGlmZmVyZW5jZVRocmVzaG9sZDwidSImJm4ucHVzaCgiLS1kaWZmZXJlbmNlLXRocmVzaG9sZCIsZS5kaWZmZXJlbmNlVGhyZXNob2xkLnRvU3RyaW5nKCkpLHR5cGVvZiBlLnJhZGl1c1RvbGVyYW5jZTwidSImJm4ucHVzaCgiLS1yYWRpdXMtdG9sZXJhbmNlIixlLnJhZGl1c1RvbGVyYW5jZS50b1N0cmluZygpKSx0eXBlb2YgZS5zcGF0aWFsVG9sZXJhbmNlPCJ1IiYmbi5wdXNoKCItLXNwYXRpYWwtdG9sZXJhbmNlIixlLnNwYXRpYWxUb2xlcmFuY2UudG9TdHJpbmcoKSksdHlwZW9mIGUubnVtYmVyT2ZQaXhlbHNUb2xlcmFuY2U8InUiJiZuLnB1c2goIi0tbnVtYmVyLW9mLXBpeGVscy10b2xlcmFuY2UiLGUubnVtYmVyT2ZQaXhlbHNUb2xlcmFuY2UudG9TdHJpbmcoKSksdHlwZW9mIGUuaWdub3JlQm91bmRhcnlQaXhlbHM8InUiJiZlLmlnbm9yZUJvdW5kYXJ5UGl4ZWxzJiZuLnB1c2goIi0taWdub3JlLWJvdW5kYXJ5LXBpeGVscyIpO2xldCBCPSJjb21wYXJlLWRvdWJsZS1pbWFnZXMiLHt3ZWJXb3JrZXI6SSxyZXR1cm5WYWx1ZTphLHN0ZGVycjpRLG91dHB1dHM6Z309YXdhaXQgb0EoQixuLHIsdCx7cGlwZWxpbmVCYXNlVXJsOmtBKCkscGlwZWxpbmVXb3JrZXJVcmw6digpLHdlYldvcmtlcjplPy53ZWJXb3JrZXI/P251bGx9KTtpZihhIT09MCl0aHJvdyBuZXcgRXJyb3IoUSk7cmV0dXJue3dlYldvcmtlcjpJLG1ldHJpY3M6Z1swXS5kYXRhLGRpZmZlcmVuY2VJbWFnZTpnWzFdLmRhdGEsZGlmZmVyZW5jZVVjaGFyMmRJbWFnZTpnWzJdLmRhdGF9fXZhciBzZT1Dbjthc3luYyBmdW5jdGlvbiBCbihBLGUpe2xldCByPWU7aWYoci5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSE9PXcuRmxvYXQ2NCl7bGV0IHQ7ZS5pbWFnZVR5cGUucGl4ZWxUeXBlIT09Ri5TY2FsYXImJmUuaW1hZ2VUeXBlLnBpeGVsVHlwZSE9PUYuVmFyaWFibGVMZW5ndGhWZWN0b3ImJih0PUYuVmFyaWFibGVMZW5ndGhWZWN0b3IpLHI9aUEoZSx7Y29tcG9uZW50VHlwZTp3LkZsb2F0NjQscGl4ZWxUeXBlOnR9KX1lbHNlIGlmKGUuaW1hZ2VUeXBlLnBpeGVsVHlwZSE9PUYuU2NhbGFyJiZlLmltYWdlVHlwZS5waXhlbFR5cGUhPT1GLlZhcmlhYmxlTGVuZ3RoVmVjdG9yKXtsZXQgdD1GLlZhcmlhYmxlTGVuZ3RoVmVjdG9yO3I9aUEoZSx7cGl4ZWxUeXBlOnR9KX1yZXR1cm4gci5pbWFnZVR5cGUucGl4ZWxUeXBlPT09Ri5WYXJpYWJsZUxlbmd0aFZlY3RvciYmKHI9KGF3YWl0IEEocikpLm1hZ25pdHVkZUltYWdlKSxyfXZhciBJZT1Cbjthc3luYyBmdW5jdGlvbiBsbihBLGU9e30pe2xldCByPVt7dHlwZTpkLkltYWdlfV0sdD1be3R5cGU6ZC5JbWFnZSxkYXRhOkF9XSxuPVtdO24ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKTtsZXQgQz0idmVjdG9yLW1hZ25pdHVkZSIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgeXQoKSk7bGV0e3dlYldvcmtlcjpCLHJldHVyblZhbHVlOkksc3RkZXJyOmEsb3V0cHV0czpRfT1hd2FpdCBvQShDLG4scix0LHtwaXBlbGluZUJhc2VVcmw6a0EoKSxwaXBlbGluZVdvcmtlclVybDp2KCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEkhPT0wJiZhIT09IiIpdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6QixtYWduaXR1ZGVJbWFnZTpRWzBdPy5kYXRhfX12YXIgZ2U9bG47YXN5bmMgZnVuY3Rpb24gY24oQSxlPXtiYXNlbGluZUltYWdlczpbXX0pe2FzeW5jIGZ1bmN0aW9uIHIoaSl7bGV0e3dlYldvcmtlcjpDLG1hZ25pdHVkZUltYWdlOmx9PWF3YWl0IGdlKGkpO3JldHVybiBDPy50ZXJtaW5hdGUoKSx7bWFnbml0dWRlSW1hZ2U6bH19bGV0IHQ9YXdhaXQgSWUocixBKSxuPWF3YWl0IFByb21pc2UuYWxsKGUuYmFzZWxpbmVJbWFnZXMubWFwKGFzeW5jIGk9PmF3YWl0IEllKHIsaSkpKSxvPXsuLi5lfTtyZXR1cm4gby5iYXNlbGluZUltYWdlcz1uLHNlKHQsbyl9dmFyIEVuPWNuO3ZhciBodD0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgSUk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBlST0oQSx0KT0+e2Zvcih2YXIgSSBpbiB0KUlJKEEsSSx7Z2V0OnRbSV0sZW51bWVyYWJsZTohMH0pfTt2YXIgdkE9U3ltYm9sKCJDb21saW5rLnByb3h5IiksZ0k9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50Iiksckk9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLHBBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxlQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksJEE9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsb0k9e2NhbkhhbmRsZTpBPT4kQShBKSYmQVt2QV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTp0LHBvcnQyOkl9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gaUEoQSx0KSxbSSxbSV1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLG5JKEEpfX0saUk9e2NhbkhhbmRsZTpBPT4kQShBKSYmZUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgdDtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOkF9LFt0LFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LEF0PW5ldyBNYXAoW1sicHJveHkiLG9JXSxbInRocm93IixpSV1dKTtmdW5jdGlvbiBDSShBLHQpe2ZvcihsZXQgSSBvZiBBKWlmKHQ9PT1JfHxJPT09IioifHxJIGluc3RhbmNlb2YgUmVnRXhwJiZJLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaUEoQSx0PWdsb2JhbFRoaXMsST1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBlKGcpe2lmKCFnfHwhZy5kYXRhKXJldHVybjtpZighQ0koSSxnLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke2cub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpyLHR5cGU6byxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGcuZGF0YSksYT0oZy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChiKSxRO3RyeXtsZXQgQj1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixzKT0+ZltzXSxBKSxpPW4ucmVkdWNlKChmLHMpPT5mW3NdLEEpO3N3aXRjaChvKXtjYXNlIkdFVCI6UT1pO2JyZWFrO2Nhc2UiU0VUIjpCW24uc2xpY2UoLTEpWzBdXT1iKGcuZGF0YS52YWx1ZSksUT0hMDticmVhaztjYXNlIkFQUExZIjpRPWkuYXBwbHkoQixhKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBpKC4uLmEpO1E9YUkoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOnN9PW5ldyBNZXNzYWdlQ2hhbm5lbDtpQShBLHMpLFE9RkEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6UT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEIpe1E9e3ZhbHVlOkIsW2VBXTowfX1Qcm9taXNlLnJlc29sdmUoUSkuY2F0Y2goQj0+KHt2YWx1ZTpCLFtlQV06MH0pKS50aGVuKEI9PntsZXRbaSxmXT1vQShCKTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpLG89PT0iUkVMRUFTRSImJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGUpLHR0KHQpLHBBIGluIEEmJnR5cGVvZiBBW3BBXT09ImZ1bmN0aW9uIiYmQVtwQV0oKSl9KS5jYXRjaChCPT57bGV0W2ksZl09b0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtlQV06MH0pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZil9KX0pLHQuc3RhcnQmJnQuc3RhcnQoKX1mdW5jdGlvbiBCSShBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiB0dChBKXtCSShBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIG5JKEEsdCl7cmV0dXJuIFNBKEEsW10sdCl9ZnVuY3Rpb24gSUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIEl0KEEpe3JldHVybiBxKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3R0KEEpfSl9dmFyIGdBPW5ldyBXZWFrTWFwLHJBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCB0PShnQS5nZXQoQSl8fDApLTE7Z0Euc2V0KEEsdCksdD09PTAmJkl0KEEpfSk7ZnVuY3Rpb24gc0koQSx0KXtsZXQgST0oZ0EuZ2V0KHQpfHwwKSsxO2dBLnNldCh0LEkpLHJBJiZyQS5yZWdpc3RlcihBLHQsQSl9ZnVuY3Rpb24gUUkoQSl7ckEmJnJBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gU0EoQSx0PVtdLEk9ZnVuY3Rpb24oKXt9KXtsZXQgZT0hMSxnPW5ldyBQcm94eShJLHtnZXQocixvKXtpZihJQShlKSxvPT09ckkpcmV0dXJuKCk9PntRSShnKSxJdChBKSxlPSEwfTtpZihvPT09InRoZW4iKXtpZih0Lmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pmd9O2xldCBuPXEoQSx7dHlwZToiR0VUIixwYXRoOnQubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKGIpO3JldHVybiBuLnRoZW4uYmluZChuKX1yZXR1cm4gU0EoQSxbLi4udCxvXSl9LHNldChyLG8sbil7SUEoZSk7bGV0W2EsUV09b0Eobik7cmV0dXJuIHEoQSx7dHlwZToiU0VUIixwYXRoOlsuLi50LG9dLm1hcChCPT5CLnRvU3RyaW5nKCkpLHZhbHVlOmF9LFEpLnRoZW4oYil9LGFwcGx5KHIsbyxuKXtJQShlKTtsZXQgYT10W3QubGVuZ3RoLTFdO2lmKGE9PT1nSSlyZXR1cm4gcShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKGIpO2lmKGE9PT0iYmluZCIpcmV0dXJuIFNBKEEsdC5zbGljZSgwLC0xKSk7bGV0W1EsQl09X0Eobik7cmV0dXJuIHEoQSx7dHlwZToiQVBQTFkiLHBhdGg6dC5tYXAoaT0+aS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6UX0sQikudGhlbihiKX0sY29uc3RydWN0KHIsbyl7SUEoZSk7bGV0W24sYV09X0Eobyk7cmV0dXJuIHEoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOnQubWFwKFE9PlEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Om59LGEpLnRoZW4oYil9fSk7cmV0dXJuIHNJKGcsQSksZ31mdW5jdGlvbiBFSShBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBfQShBKXtsZXQgdD1BLm1hcChvQSk7cmV0dXJuW3QubWFwKEk9PklbMF0pLEVJKHQubWFwKEk9PklbMV0pKV19dmFyIGV0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEZBKEEsdCl7cmV0dXJuIGV0LnNldChBLHQpLEF9ZnVuY3Rpb24gYUkoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3ZBXTohMH0pfWZ1bmN0aW9uIG9BKEEpe2ZvcihsZXRbdCxJXW9mIEF0KWlmKEkuY2FuSGFuZGxlKEEpKXtsZXRbZSxnXT1JLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6dCx2YWx1ZTplfSxnXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZXQuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gYihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBBdC5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIHEoQSx0LEkpe3JldHVybiBuZXcgUHJvbWlzZShlPT57bGV0IGc9Y0koKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobyl7IW8uZGF0YXx8IW8uZGF0YS5pZHx8by5kYXRhLmlkIT09Z3x8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZShvLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmd9LHQpLEkpfSl9ZnVuY3Rpb24gY0koKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFcoQSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseSh0LGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpmSX09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6VUF9PU9iamVjdCxCQT0oQT0+dD0+e2xldCBJPWZJLmNhbGwodCk7cmV0dXJuIEFbSV18fChBW0ldPUkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxVPUE9PihBPUEudG9Mb3dlckNhc2UoKSx0PT5CQSh0KT09PUEpLG5BPUE9PnQ9PnR5cGVvZiB0PT09QSx7aXNBcnJheTpLfT1BcnJheSxaPW5BKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBsSShBKXtyZXR1cm4gQSE9PW51bGwmJiFaKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIVooQS5jb25zdHJ1Y3RvcikmJkYoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIGl0PVUoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gREkoQSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz90PUFycmF5QnVmZmVyLmlzVmlldyhBKTp0PUEmJkEuYnVmZmVyJiZpdChBLmJ1ZmZlciksdH12YXIgdUk9bkEoInN0cmluZyIpLEY9bkEoImZ1bmN0aW9uIiksQ3Q9bkEoIm51bWJlciIpLHNBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsaEk9QT0+QT09PSEwfHxBPT09ITEsQ0E9QT0+e2lmKEJBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IHQ9VUEoQSk7cmV0dXJuKHQ9PT1udWxsfHx0PT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZEk9VSgiRGF0ZSIpLHlJPVUoIkZpbGUiKSx3ST1VKCJCbG9iIiksbUk9VSgiRmlsZUxpc3QiKSxwST1BPT5zQShBKSYmRihBLnBpcGUpLFNJPUE9PntsZXQgdDtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxGKEEuYXBwZW5kKSYmKCh0PUJBKEEpKT09PSJmb3JtZGF0YSJ8fHQ9PT0ib2JqZWN0IiYmRihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxGST1VKCJVUkxTZWFyY2hQYXJhbXMiKSxSST1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gVihBLHQse2FsbE93bktleXM6ST0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBlLGc7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEsoQSkpZm9yKGU9MCxnPUEubGVuZ3RoO2U8ZztlKyspdC5jYWxsKG51bGwsQVtlXSxlLEEpO2Vsc2V7bGV0IHI9ST9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxvPXIubGVuZ3RoLG47Zm9yKGU9MDtlPG87ZSsrKW49cltlXSx0LmNhbGwobnVsbCxBW25dLG4sQSl9fWZ1bmN0aW9uIEJ0KEEsdCl7dD10LnRvTG93ZXJDYXNlKCk7bGV0IEk9T2JqZWN0LmtleXMoQSksZT1JLmxlbmd0aCxnO2Zvcig7ZS0tID4wOylpZihnPUlbZV0sdD09PWcudG9Mb3dlckNhc2UoKSlyZXR1cm4gZztyZXR1cm4gbnVsbH12YXIgbnQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxzdD1BPT4hWihBKSYmQSE9PW50O2Z1bmN0aW9uIE5BKCl7bGV0e2Nhc2VsZXNzOkF9PXN0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LEk9KGUsZyk9PntsZXQgcj1BJiZCdCh0LGcpfHxnO0NBKHRbcl0pJiZDQShlKT90W3JdPU5BKHRbcl0sZSk6Q0EoZSk/dFtyXT1OQSh7fSxlKTpLKGUpP3Rbcl09ZS5zbGljZSgpOnRbcl09ZX07Zm9yKGxldCBlPTAsZz1hcmd1bWVudHMubGVuZ3RoO2U8ZztlKyspYXJndW1lbnRzW2VdJiZWKGFyZ3VtZW50c1tlXSxJKTtyZXR1cm4gdH12YXIgTkk9KEEsdCxJLHthbGxPd25LZXlzOmV9PXt9KT0+KFYodCwoZyxyKT0+e0kmJkYoZyk/QVtyXT1XKGcsSSk6QVtyXT1nfSx7YWxsT3duS2V5czplfSksQSksVUk9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxHST0oQSx0LEksZSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6dC5wcm90b3R5cGV9KSxJJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLEkpfSxrST0oQSx0LEksZSk9PntsZXQgZyxyLG8sbj17fTtpZih0PXR8fHt9LEE9PW51bGwpcmV0dXJuIHQ7ZG97Zm9yKGc9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSkscj1nLmxlbmd0aDtyLS0gPjA7KW89Z1tyXSwoIWV8fGUobyxBLHQpKSYmIW5bb10mJih0W29dPUFbb10sbltvXT0hMCk7QT1JIT09ITEmJlVBKEEpfXdoaWxlKEEmJighSXx8SShBLHQpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB0fSxMST0oQSx0LEkpPT57QT1TdHJpbmcoQSksKEk9PT12b2lkIDB8fEk+QS5sZW5ndGgpJiYoST1BLmxlbmd0aCksSS09dC5sZW5ndGg7bGV0IGU9QS5pbmRleE9mKHQsSSk7cmV0dXJuIGUhPT0tMSYmZT09PUl9LEpJPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihLKEEpKXJldHVybiBBO2xldCB0PUEubGVuZ3RoO2lmKCFDdCh0KSlyZXR1cm4gbnVsbDtsZXQgST1uZXcgQXJyYXkodCk7Zm9yKDt0LS0gPjA7KUlbdF09QVt0XTtyZXR1cm4gSX0sSEk9KEE9PnQ9PkEmJnQgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJlVBKFVpbnQ4QXJyYXkpKSxZST0oQSx0KT0+e2xldCBlPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksZztmb3IoOyhnPWUubmV4dCgpKSYmIWcuZG9uZTspe2xldCByPWcudmFsdWU7dC5jYWxsKEEsclswXSxyWzFdKX19LGJJPShBLHQpPT57bGV0IEksZT1bXTtmb3IoOyhJPUEuZXhlYyh0KSkhPT1udWxsOyllLnB1c2goSSk7cmV0dXJuIGV9LE1JPVUoIkhUTUxGb3JtRWxlbWVudCIpLHFJPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKEksZSxnKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK2d9KSxydD0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9Pih0LEkpPT5BLmNhbGwodCxJKSkoT2JqZWN0LnByb3RvdHlwZSksS0k9VSgiUmVnRXhwIiksUXQ9KEEsdCk9PntsZXQgST1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxlPXt9O1YoSSwoZyxyKT0+e2xldCBvOyhvPXQoZyxyLEEpKSE9PSExJiYoZVtyXT1vfHxnKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsZSl9LE9JPUE9PntRdChBLCh0LEkpPT57aWYoRihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKEkpIT09LTEpcmV0dXJuITE7bGV0IGU9QVtJXTtpZihGKGUpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK0krIlwnIil9KX19KX0sVEk9KEEsdCk9PntsZXQgST17fSxlPWc9PntnLmZvckVhY2gocj0+e0lbcl09ITB9KX07cmV0dXJuIEsoQSk/ZShBKTplKFN0cmluZyhBKS5zcGxpdCh0KSksSX0sUEk9KCk9Pnt9LHhJPShBLHQpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTp0KSxSQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLG90PSIwMTIzNDU2Nzg5IixFdD17RElHSVQ6b3QsQUxQSEE6UkEsQUxQSEFfRElHSVQ6UkErUkEudG9VcHBlckNhc2UoKStvdH0sakk9KEE9MTYsdD1FdC5BTFBIQV9ESUdJVCk9PntsZXQgST0iIix7bGVuZ3RoOmV9PXQ7Zm9yKDtBLS07KUkrPXRbTWF0aC5yYW5kb20oKSplfDBdO3JldHVybiBJfTtmdW5jdGlvbiBXSShBKXtyZXR1cm4hIShBJiZGKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgWkk9QT0+e2xldCB0PW5ldyBBcnJheSgxMCksST0oZSxnKT0+e2lmKHNBKGUpKXtpZih0LmluZGV4T2YoZSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBlKSl7dFtnXT1lO2xldCByPUsoZSk/W106e307cmV0dXJuIFYoZSwobyxuKT0+e2xldCBhPUkobyxnKzEpOyFaKGEpJiYocltuXT1hKX0pLHRbZ109dm9pZCAwLHJ9fXJldHVybiBlfTtyZXR1cm4gSShBLDApfSxWST1VKCJBc3luY0Z1bmN0aW9uIiksWEk9QT0+QSYmKHNBKEEpfHxGKEEpKSYmRihBLnRoZW4pJiZGKEEuY2F0Y2gpLEM9e2lzQXJyYXk6Syxpc0FycmF5QnVmZmVyOml0LGlzQnVmZmVyOmxJLGlzRm9ybURhdGE6U0ksaXNBcnJheUJ1ZmZlclZpZXc6REksaXNTdHJpbmc6dUksaXNOdW1iZXI6Q3QsaXNCb29sZWFuOmhJLGlzT2JqZWN0OnNBLGlzUGxhaW5PYmplY3Q6Q0EsaXNVbmRlZmluZWQ6Wixpc0RhdGU6ZEksaXNGaWxlOnlJLGlzQmxvYjp3SSxpc1JlZ0V4cDpLSSxpc0Z1bmN0aW9uOkYsaXNTdHJlYW06cEksaXNVUkxTZWFyY2hQYXJhbXM6RkksaXNUeXBlZEFycmF5OkhJLGlzRmlsZUxpc3Q6bUksZm9yRWFjaDpWLG1lcmdlOk5BLGV4dGVuZDpOSSx0cmltOlJJLHN0cmlwQk9NOlVJLGluaGVyaXRzOkdJLHRvRmxhdE9iamVjdDprSSxraW5kT2Y6QkEsa2luZE9mVGVzdDpVLGVuZHNXaXRoOkxJLHRvQXJyYXk6SkksZm9yRWFjaEVudHJ5OllJLG1hdGNoQWxsOmJJLGlzSFRNTEZvcm06TUksaGFzT3duUHJvcGVydHk6cnQsaGFzT3duUHJvcDpydCxyZWR1Y2VEZXNjcmlwdG9yczpRdCxmcmVlemVNZXRob2RzOk9JLHRvT2JqZWN0U2V0OlRJLHRvQ2FtZWxDYXNlOnFJLG5vb3A6UEksdG9GaW5pdGVOdW1iZXI6eEksZmluZEtleTpCdCxnbG9iYWw6bnQsaXNDb250ZXh0RGVmaW5lZDpzdCxBTFBIQUJFVDpFdCxnZW5lcmF0ZVN0cmluZzpqSSxpc1NwZWNDb21wbGlhbnRGb3JtOldJLHRvSlNPTk9iamVjdDpaSSxpc0FzeW5jRm46VkksaXNUaGVuYWJsZTpYSX07ZnVuY3Rpb24gTyhBLHQsSSxlLGcpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxJJiYodGhpcy5jb25maWc9SSksZSYmKHRoaXMucmVxdWVzdD1lKSxnJiYodGhpcy5yZXNwb25zZT1nKX1DLmluaGVyaXRzKE8sRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpDLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBhdD1PLnByb3RvdHlwZSxjdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntjdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLGN0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXQsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Ty5mcm9tPShBLHQsSSxlLGcscik9PntsZXQgbz1PYmplY3QuY3JlYXRlKGF0KTtyZXR1cm4gQy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGEpe3JldHVybiBhIT09RXJyb3IucHJvdG90eXBlfSxuPT5uIT09ImlzQXhpb3NFcnJvciIpLE8uY2FsbChvLEEubWVzc2FnZSx0LEksZSxnKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxyJiZPYmplY3QuYXNzaWduKG8sciksb307dmFyIGw9Tzt2YXIgUUE9bnVsbDtmdW5jdGlvbiBHQShBKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KEEpfHxDLmlzQXJyYXkoQSl9ZnVuY3Rpb24gbHQoQSl7cmV0dXJuIEMuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gZnQoQSx0LEkpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihnLHIpe3JldHVybiBnPWx0KGcpLCFJJiZyPyJbIitnKyJdIjpnfSkuam9pbihJPyIuIjoiIik6dH1mdW5jdGlvbiB6SShBKXtyZXR1cm4gQy5pc0FycmF5KEEpJiYhQS5zb21lKEdBKX12YXIgX0k9Qy50b0ZsYXRPYmplY3QoQyx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHZJKEEsdCxJKXtpZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhRQXx8Rm9ybURhdGEpLEk9Qy50b0ZsYXRPYmplY3QoSSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIUMuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgZT1JLm1ldGFUb2tlbnMsZz1JLnZpc2l0b3J8fEIscj1JLmRvdHMsbz1JLmluZGV4ZXMsYT0oSS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZDLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIUMuaXNGdW5jdGlvbihnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIFEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoQy5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYSYmQy5pc0Jsb2IoRSkpdGhyb3cgbmV3IGwoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEMuaXNBcnJheUJ1ZmZlcihFKXx8Qy5pc1R5cGVkQXJyYXkoRSk/YSYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEIoRSxjLHUpe2xldCB5PUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoQy5lbmRzV2l0aChjLCJ7fSIpKWM9ZT9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKEMuaXNBcnJheShFKSYmekkoRSl8fChDLmlzRmlsZUxpc3QoRSl8fEMuZW5kc1dpdGgoYywiW10iKSkmJih5PUMudG9BcnJheShFKSkpcmV0dXJuIGM9bHQoYykseS5mb3JFYWNoKGZ1bmN0aW9uKE4sdEkpeyEoQy5pc1VuZGVmaW5lZChOKXx8Tj09PW51bGwpJiZ0LmFwcGVuZChvPT09ITA/ZnQoW2NdLHRJLHIpOm89PT1udWxsP2M6YysiW10iLFEoTikpfSksITF9cmV0dXJuIEdBKEUpPyEwOih0LmFwcGVuZChmdCh1LGMsciksUShFKSksITEpfWxldCBpPVtdLGY9T2JqZWN0LmFzc2lnbihfSSx7ZGVmYXVsdFZpc2l0b3I6Qixjb252ZXJ0VmFsdWU6USxpc1Zpc2l0YWJsZTpHQX0pO2Z1bmN0aW9uIHMoRSxjKXtpZighQy5pc1VuZGVmaW5lZChFKSl7aWYoaS5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTtpLnB1c2goRSksQy5mb3JFYWNoKEUsZnVuY3Rpb24oeSxSKXsoIShDLmlzVW5kZWZpbmVkKHkpfHx5PT09bnVsbCkmJmcuY2FsbCh0LHksQy5pc1N0cmluZyhSKT9SLnRyaW0oKTpSLGMsZikpPT09ITAmJnMoeSxjP2MuY29uY2F0KFIpOltSXSl9KSxpLnBvcCgpfX1pZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIHMoQSksdH12YXIgSj12STtmdW5jdGlvbiBEdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIHV0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmSihBLHRoaXMsdCl9dmFyIGh0PXV0LnByb3RvdHlwZTtodC5hcHBlbmQ9ZnVuY3Rpb24odCxJKXt0aGlzLl9wYWlycy5wdXNoKFt0LEldKX07aHQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IEk9dD9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxEdCl9OkR0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIEkoZ1swXSkrIj0iK0koZ1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciBFQT11dDtmdW5jdGlvbiAkSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiBYKEEsdCxJKXtpZighdClyZXR1cm4gQTtsZXQgZT1JJiZJLmVuY29kZXx8JEksZz1JJiZJLnNlcmlhbGl6ZSxyO2lmKGc/cj1nKHQsSSk6cj1DLmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcgRUEodCxJKS50b1N0cmluZyhlKSxyKXtsZXQgbz1BLmluZGV4T2YoIiUyMyIpO28hPT0tMSYmKEE9QS5zbGljZSgwLG8pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStyfXJldHVybiBBfXZhciBrQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsSSxlKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDpJLHN5bmNocm9ub3VzOmU/ZS5zeW5jaHJvbm91czohMSxydW5XaGVuOmU/ZS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7Qy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oZSl7ZSE9PW51bGwmJnQoZSl9KX19LExBPWtBO3ZhciBhQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGR0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpFQTt2YXIgeXQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciB3dD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBtdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpkdCxGb3JtRGF0YTp5dCxCbG9iOnd0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIEpBPXt9O2VJKEpBLHtoYXNCcm93c2VyRW52OigpPT5wdCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFlLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+dGV9KTt2YXIgcHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsQWU9KEE9PnB0JiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksdGU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciB3PXsuLi5KQSwuLi5tdH07ZnVuY3Rpb24gSEEoQSx0KXtyZXR1cm4gSihBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oSSxlLGcscil7cmV0dXJuIHcuaXNOb2RlJiZDLmlzQnVmZmVyKEkpPyh0aGlzLmFwcGVuZChlLEkudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6ci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gSWUoQSl7cmV0dXJuIEMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBlZShBKXtsZXQgdD17fSxJPU9iamVjdC5rZXlzKEEpLGUsZz1JLmxlbmd0aCxyO2ZvcihlPTA7ZTxnO2UrKylyPUlbZV0sdFtyXT1BW3JdO3JldHVybiB0fWZ1bmN0aW9uIGdlKEEpe2Z1bmN0aW9uIHQoSSxlLGcscil7bGV0IG89SVtyKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgbj1OdW1iZXIuaXNGaW5pdGUoK28pLGE9cj49SS5sZW5ndGg7cmV0dXJuIG89IW8mJkMuaXNBcnJheShnKT9nLmxlbmd0aDpvLGE/KEMuaGFzT3duUHJvcChnLG8pP2dbb109W2dbb10sZV06Z1tvXT1lLCFuKTooKCFnW29dfHwhQy5pc09iamVjdChnW29dKSkmJihnW29dPVtdKSx0KEksZSxnW29dLHIpJiZDLmlzQXJyYXkoZ1tvXSkmJihnW29dPWVlKGdbb10pKSwhbil9aWYoQy5pc0Zvcm1EYXRhKEEpJiZDLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IEk9e307cmV0dXJuIEMuZm9yRWFjaEVudHJ5KEEsKGUsZyk9Pnt0KEllKGUpLGcsSSwwKX0pLEl9cmV0dXJuIG51bGx9dmFyIGNBPWdlO2Z1bmN0aW9uIHJlKEEsdCxJKXtpZihDLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksQy50cmltKEEpfWNhdGNoKGUpe2lmKGUubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgZX1yZXR1cm4oSXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBZQT17dHJhbnNpdGlvbmFsOmFBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxJKXtsZXQgZT1JLmdldENvbnRlbnRUeXBlKCl8fCIiLGc9ZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEscj1DLmlzT2JqZWN0KHQpO2lmKHImJkMuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxDLmlzRm9ybURhdGEodCkpcmV0dXJuIGc/SlNPTi5zdHJpbmdpZnkoY0EodCkpOnQ7aWYoQy5pc0FycmF5QnVmZmVyKHQpfHxDLmlzQnVmZmVyKHQpfHxDLmlzU3RyZWFtKHQpfHxDLmlzRmlsZSh0KXx8Qy5pc0Jsb2IodCkpcmV0dXJuIHQ7aWYoQy5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoQy5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IG47aWYocil7aWYoZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gSEEodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChuPUMuaXNGaWxlTGlzdCh0KSl8fGUuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEoobj97ImZpbGVzW10iOnR9OnQsYSYmbmV3IGEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiByfHxnPyhJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSkscmUodCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IEk9dGhpcy50cmFuc2l0aW9uYWx8fFlBLnRyYW5zaXRpb25hbCxlPUkmJkkuZm9yY2VkSlNPTlBhcnNpbmcsZz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZih0JiZDLmlzU3RyaW5nKHQpJiYoZSYmIXRoaXMucmVzcG9uc2VUeXBlfHxnKSl7bGV0IG89IShJJiZJLnNpbGVudEpTT05QYXJzaW5nKSYmZzt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2gobil7aWYobyl0aHJvdyBuLm5hbWU9PT0iU3ludGF4RXJyb3IiP2wuZnJvbShuLGwuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bn19cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57WUEuaGVhZGVyc1tBXT17fX0pO3ZhciBUPVlBO3ZhciBvZT1DLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLFN0PUE9PntsZXQgdD17fSxJLGUsZztyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihvKXtnPW8uaW5kZXhPZigiOiIpLEk9by5zdWJzdHJpbmcoMCxnKS50cmltKCkudG9Mb3dlckNhc2UoKSxlPW8uc3Vic3RyaW5nKGcrMSkudHJpbSgpLCEoIUl8fHRbSV0mJm9lW0ldKSYmKEk9PT0ic2V0LWNvb2tpZSI/dFtJXT90W0ldLnB1c2goZSk6dFtJXT1bZV06dFtJXT10W0ldP3RbSV0rIiwgIitlOmUpfSksdH07dmFyIEZ0PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24geihBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpDLmlzQXJyYXkoQSk/QS5tYXAoZkEpOlN0cmluZyhBKX1mdW5jdGlvbiBpZShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLEk9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxlO2Zvcig7ZT1JLmV4ZWMoQSk7KXRbZVsxXV09ZVsyXTtyZXR1cm4gdH12YXIgQ2U9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gYkEoQSx0LEksZSxnKXtpZihDLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHQsSSk7aWYoZyYmKHQ9SSksISFDLmlzU3RyaW5nKHQpKXtpZihDLmlzU3RyaW5nKGUpKXJldHVybiB0LmluZGV4T2YoZSkhPT0tMTtpZihDLmlzUmVnRXhwKGUpKXJldHVybiBlLnRlc3QodCl9fWZ1bmN0aW9uIEJlKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxJLGUpPT5JLnRvVXBwZXJDYXNlKCkrZSl9ZnVuY3Rpb24gbmUoQSx0KXtsZXQgST1DLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGUrSSx7dmFsdWU6ZnVuY3Rpb24oZyxyLG8pe3JldHVybiB0aGlzW2VdLmNhbGwodGhpcyx0LGcscixvKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxJLGUpe2xldCBnPXRoaXM7ZnVuY3Rpb24gcihuLGEsUSl7bGV0IEI9eihhKTtpZighQil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGk9Qy5maW5kS2V5KGcsQik7KCFpfHxnW2ldPT09dm9pZCAwfHxRPT09ITB8fFE9PT12b2lkIDAmJmdbaV0hPT0hMSkmJihnW2l8fGFdPWZBKG4pKX1sZXQgbz0obixhKT0+Qy5mb3JFYWNoKG4sKFEsQik9PnIoUSxCLGEpKTtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKHQsSSk6Qy5pc1N0cmluZyh0KSYmKHQ9dC50cmltKCkpJiYhQ2UodCk/byhTdCh0KSxJKTp0IT1udWxsJiZyKEksdCxlKSx0aGlzfWdldCh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtpZihlKXtsZXQgZz10aGlzW2VdO2lmKCFJKXJldHVybiBnO2lmKEk9PT0hMClyZXR1cm4gaWUoZyk7aWYoQy5pc0Z1bmN0aW9uKEkpKXJldHVybiBJLmNhbGwodGhpcyxnLGUpO2lmKEMuaXNSZWdFeHAoSSkpcmV0dXJuIEkuZXhlYyhnKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKGUmJnRoaXNbZV0hPT12b2lkIDAmJighSXx8YkEodGhpcyx0aGlzW2VdLGUsSSkpKX1yZXR1cm4hMX1kZWxldGUodCxJKXtsZXQgZT10aGlzLGc9ITE7ZnVuY3Rpb24gcihvKXtpZihvPXoobyksbyl7bGV0IG49Qy5maW5kS2V5KGUsbyk7biYmKCFJfHxiQShlLGVbbl0sbixJKSkmJihkZWxldGUgZVtuXSxnPSEwKX19cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSxnfWNsZWFyKHQpe2xldCBJPU9iamVjdC5rZXlzKHRoaXMpLGU9SS5sZW5ndGgsZz0hMTtmb3IoO2UtLTspe2xldCByPUlbZV07KCF0fHxiQSh0aGlzLHRoaXNbcl0scix0LCEwKSkmJihkZWxldGUgdGhpc1tyXSxnPSEwKX1yZXR1cm4gZ31ub3JtYWxpemUodCl7bGV0IEk9dGhpcyxlPXt9O3JldHVybiBDLmZvckVhY2godGhpcywoZyxyKT0+e2xldCBvPUMuZmluZEtleShlLHIpO2lmKG8pe0lbb109ZkEoZyksZGVsZXRlIElbcl07cmV0dXJufWxldCBuPXQ/QmUocik6U3RyaW5nKHIpLnRyaW0oKTtuIT09ciYmZGVsZXRlIElbcl0sSVtuXT1mQShnKSxlW25dPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChlLGcpPT57ZSE9bnVsbCYmZSE9PSExJiYoSVtnXT10JiZDLmlzQXJyYXkoZSk/ZS5qb2luKCIsICIpOmUpfSksSX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxJXSk9PnQrIjogIitJKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5JKXtsZXQgZT1uZXcgdGhpcyh0KTtyZXR1cm4gSS5mb3JFYWNoKGc9PmUuc2V0KGcpKSxlfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgZT0odGhpc1tGdF09dGhpc1tGdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxnPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIobyl7bGV0IG49eihvKTtlW25dfHwobmUoZyxvKSxlW25dPSEwKX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLHRoaXN9fTtQLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtDLnJlZHVjZURlc2NyaXB0b3JzKFAucHJvdG90eXBlLCh7dmFsdWU6QX0sdCk9PntsZXQgST10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChlKXt0aGlzW0ldPWV9fX0pO0MuZnJlZXplTWV0aG9kcyhQKTt2YXIgbT1QO2Z1bmN0aW9uIF8oQSx0KXtsZXQgST10aGlzfHxULGU9dHx8SSxnPW0uZnJvbShlLmhlYWRlcnMpLHI9ZS5kYXRhO3JldHVybiBDLmZvckVhY2goQSxmdW5jdGlvbihuKXtyPW4uY2FsbChJLHIsZy5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxnLm5vcm1hbGl6ZSgpLHJ9ZnVuY3Rpb24gdihBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFJ0KEEsdCxJKXtsLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGwuRVJSX0NBTkNFTEVELHQsSSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1DLmluaGVyaXRzKFJ0LGwse19fQ0FOQ0VMX186ITB9KTt2YXIgSD1SdDtmdW5jdGlvbiBNQShBLHQsSSl7bGV0IGU9SS5jb25maWcudmFsaWRhdGVTdGF0dXM7IUkuc3RhdHVzfHwhZXx8ZShJLnN0YXR1cyk/QShJKTp0KG5ldyBsKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrSS5zdGF0dXMsW2wuRVJSX0JBRF9SRVFVRVNULGwuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihJLnN0YXR1cy8xMDApLTRdLEkuY29uZmlnLEkucmVxdWVzdCxJKSl9dmFyIE50PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsSSxlLGcscil7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07Qy5pc051bWJlcihJKSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoSSkudG9HTVRTdHJpbmcoKSksQy5pc1N0cmluZyhlKSYmby5wdXNoKCJwYXRoPSIrZSksQy5pc1N0cmluZyhnKSYmby5wdXNoKCJkb21haW49IitnKSxyPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gcUEoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gS0EoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uICQoQSx0KXtyZXR1cm4gQSYmIXFBKHQpP0tBKEEsdCk6dH12YXIgVXQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLGU7ZnVuY3Rpb24gZyhyKXtsZXQgbz1yO3JldHVybiB0JiYoSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLG89SS5ocmVmKSxJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbykse2hyZWY6SS5ocmVmLHByb3RvY29sOkkucHJvdG9jb2w/SS5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6SS5ob3N0LHNlYXJjaDpJLnNlYXJjaD9JLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDpJLmhhc2g/SS5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTpJLmhvc3RuYW1lLHBvcnQ6SS5wb3J0LHBhdGhuYW1lOkkucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP0kucGF0aG5hbWU6Ii8iK0kucGF0aG5hbWV9fXJldHVybiBlPWcod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG8pe2xldCBuPUMuaXNTdHJpbmcobyk/ZyhvKTpvO3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiBPQShBKXtsZXQgdD0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gdCYmdFsxXXx8IiJ9ZnVuY3Rpb24gc2UoQSx0KXtBPUF8fDEwO2xldCBJPW5ldyBBcnJheShBKSxlPW5ldyBBcnJheShBKSxnPTAscj0wLG87cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjFlMyxmdW5jdGlvbihhKXtsZXQgUT1EYXRlLm5vdygpLEI9ZVtyXTtvfHwobz1RKSxJW2ddPWEsZVtnXT1RO2xldCBpPXIsZj0wO2Zvcig7aSE9PWc7KWYrPUlbaSsrXSxpPWklQTtpZihnPShnKzEpJUEsZz09PXImJihyPShyKzEpJUEpLFEtbzx0KXJldHVybjtsZXQgcz1CJiZRLUI7cmV0dXJuIHM/TWF0aC5yb3VuZChmKjFlMy9zKTp2b2lkIDB9fXZhciBHdD1zZTtmdW5jdGlvbiBrdChBLHQpe2xldCBJPTAsZT1HdCg1MCwyNTApO3JldHVybiBnPT57bGV0IHI9Zy5sb2FkZWQsbz1nLmxlbmd0aENvbXB1dGFibGU/Zy50b3RhbDp2b2lkIDAsbj1yLUksYT1lKG4pLFE9cjw9bztJPXI7bGV0IEI9e2xvYWRlZDpyLHRvdGFsOm8scHJvZ3Jlc3M6bz9yL286dm9pZCAwLGJ5dGVzOm4scmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJm8mJlE/KG8tcikvYTp2b2lkIDAsZXZlbnQ6Z307Qlt0PyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEoQil9fXZhciBRZT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLEx0PVFlJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSSxlKXtsZXQgZz1BLmRhdGEscj1tLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm8sd2l0aFhTUkZUb2tlbjpufT1BLGE7ZnVuY3Rpb24gUSgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQjtpZihDLmlzRm9ybURhdGEoZykpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilyLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChCPXIuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4udV09Qj9CLnNwbGl0KCI7IikubWFwKHk9PnkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107ci5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLnVdLmpvaW4oIjsgIikpfX1sZXQgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgYz1BLmF1dGgudXNlcm5hbWV8fCIiLHU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShjKyI6Iit1KSl9bGV0IGY9JChBLmJhc2VVUkwsQS51cmwpO2kub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoZixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxpLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIHMoKXtpZighaSlyZXR1cm47bGV0IGM9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gaSYmaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkseT17ZGF0YTohb3x8bz09PSJ0ZXh0Inx8bz09PSJqc29uIj9pLnJlc3BvbnNlVGV4dDppLnJlc3BvbnNlLHN0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDppfTtNQShmdW5jdGlvbihOKXtJKE4pLFEoKX0sZnVuY3Rpb24oTil7ZShOKSxRKCl9LHkpLGk9bnVsbH1pZigib25sb2FkZW5kImluIGk/aS5vbmxvYWRlbmQ9czppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFpfHxpLnJlYWR5U3RhdGUhPT00fHxpLnN0YXR1cz09PTAmJiEoaS5yZXNwb25zZVVSTCYmaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocyl9LGkub25hYm9ydD1mdW5jdGlvbigpe2kmJihlKG5ldyBsKCJSZXF1ZXN0IGFib3J0ZWQiLGwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbCl9LGkub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IGwoIk5ldHdvcmsgRXJyb3IiLGwuRVJSX05FVFdPUkssQSxpKSksaT1udWxsfSxpLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIix5PUEudHJhbnNpdGlvbmFsfHxhQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksZShuZXcgbCh1LHkuY2xhcmlmeVRpbWVvdXRFcnJvcj9sLkVUSU1FRE9VVDpsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobiYmQy5pc0Z1bmN0aW9uKG4pJiYobj1uKEEpKSxufHxuIT09ITEmJlV0KGYpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmTnQucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfWc9PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gaSYmQy5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24odSx5KXtpLnNldFJlcXVlc3RIZWFkZXIoeSx1KX0pLEMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoaS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksbyYmbyE9PSJqc29uIiYmKGkucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS51cGxvYWQmJmkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYT1jPT57aSYmKGUoIWN8fGMudHlwZT9uZXcgSChudWxsLEEsaSk6YyksaS5hYm9ydCgpLGk9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9hKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IEU9T0EoZik7aWYoRSYmdy5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtlKG5ldyBsKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGwuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59aS5zZW5kKGd8fG51bGwpfSl9O3ZhciBUQT17aHR0cDpRQSx4aHI6THR9O0MuZm9yRWFjaChUQSwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBKdD1BPT5gLSAke0F9YCxFZT1BPT5DLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbEE9e2dldEFkYXB0ZXI6QT0+e0E9Qy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxJLGUsZz17fTtmb3IobGV0IHI9MDtyPHQ7cisrKXtJPUFbcl07bGV0IG87aWYoZT1JLCFFZShJKSYmKGU9VEFbKG89U3RyaW5nKEkpKS50b0xvd2VyQ2FzZSgpXSxlPT09dm9pZCAwKSl0aHJvdyBuZXcgbChgVW5rbm93biBhZGFwdGVyIFwnJHtvfVwnYCk7aWYoZSlicmVhaztnW298fCIlMjMiK3JdPWV9aWYoIWUpe2xldCByPU9iamVjdC5lbnRyaWVzKGcpLm1hcCgoW24sYV0pPT5gYWRhcHRlciAke259IGArKGE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPXQ/ci5sZW5ndGg+MT9gc2luY2UgOiUwQWArci5tYXAoSnQpLmpvaW4oYCUwQWApOiIgIitKdChyWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBsKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIGV9LGFkYXB0ZXJzOlRBfTtmdW5jdGlvbiBQQShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSChudWxsLEEpfWZ1bmN0aW9uIERBKEEpe3JldHVybiBQQShBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGxBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxULmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFBBKEEpLGUuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUpLGUuaGVhZGVycz1tLmZyb20oZS5oZWFkZXJzKSxlfSxmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8KFBBKEEpLGUmJmUucmVzcG9uc2UmJihlLnJlc3BvbnNlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlLnJlc3BvbnNlKSxlLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKGUucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChlKX0pfXZhciBIdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgST17fTtmdW5jdGlvbiBlKFEsQixpKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KFEpJiZDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZS5jYWxsKHtjYXNlbGVzczppfSxRLEIpOkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlKHt9LEIpOkMuaXNBcnJheShCKT9CLnNsaWNlKCk6Qn1mdW5jdGlvbiBnKFEsQixpKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSxpKX1lbHNlIHJldHVybiBlKFEsQixpKX1mdW5jdGlvbiByKFEsQil7aWYoIUMuaXNVbmRlZmluZWQoQikpcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG8oUSxCKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSl9ZWxzZSByZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbihRLEIsaSl7aWYoaSBpbiB0KXJldHVybiBlKFEsQik7aWYoaSBpbiBBKXJldHVybiBlKHZvaWQgMCxRKX1sZXQgYT17dXJsOnIsbWV0aG9kOnIsZGF0YTpyLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpuLGhlYWRlcnM6KFEsQik9PmcoSHQoUSksSHQoQiksITApfTtyZXR1cm4gQy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24oQil7bGV0IGk9YVtCXXx8ZyxmPWkoQVtCXSx0W0JdLEIpO0MuaXNVbmRlZmluZWQoZikmJmkhPT1ufHwoSVtCXT1mKX0pLEl9dmFyIHVBPSIxLjYuOCI7dmFyIHhBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSx0KT0+e3hBW0FdPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09PUF8fCJhIisodDwxPyJuICI6IiAiKStBfX0pO3ZhciBZdD17fTt4QS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxJLGUpe2Z1bmN0aW9uIGcocixvKXtyZXR1cm4iW0F4aW9zIHYiK3VBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK3IrIlwnIitvKyhlPyIuICIrZToiIil9cmV0dXJuKHIsbyxuKT0+e2lmKHQ9PT0hMSl0aHJvdyBuZXcgbChnKG8sIiBoYXMgYmVlbiByZW1vdmVkIisoST8iIGluICIrSToiIikpLGwuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBJJiYhWXRbb10mJihZdFtvXT0hMCxjb25zb2xlLndhcm4oZyhvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitJKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLHQ/dChyLG8sbik6ITB9fTtmdW5jdGlvbiBhZShBLHQsSSl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBsKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxnPWUubGVuZ3RoO2Zvcig7Zy0tID4wOyl7bGV0IHI9ZVtnXSxvPXRbcl07aWYobyl7bGV0IG49QVtyXSxhPW49PT12b2lkIDB8fG8obixyLEEpO2lmKGEhPT0hMCl0aHJvdyBuZXcgbCgib3B0aW9uICIrcisiIG11c3QgYmUgIithLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKEkhPT0hMCl0aHJvdyBuZXcgbCgiVW5rbm93biBvcHRpb24gIityLGwuRVJSX0JBRF9PUFRJT04pfX12YXIgaEE9e2Fzc2VydE9wdGlvbnM6YWUsdmFsaWRhdG9yczp4QX07dmFyIFk9aEEudmFsaWRhdG9ycyx4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdHM9dCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgTEEscmVzcG9uc2U6bmV3IExBfX1hc3luYyByZXF1ZXN0KHQsSSl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KHQsSSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgZztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShnPXt9KTpnPW5ldyBFcnJvcjtsZXQgcj1nLnN0YWNrP2cuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7ZS5zdGFjaz9yJiYhU3RyaW5nKGUuc3RhY2spLmVuZHNXaXRoKHIucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihlLnN0YWNrKz1gJTBBYCtyKTplLnN0YWNrPXJ9dGhyb3cgZX19X3JlcXVlc3QodCxJKXt0eXBlb2YgdD09InN0cmluZyI/KEk9SXx8e30sSS51cmw9dCk6ST10fHx7fSxJPWsodGhpcy5kZWZhdWx0cyxJKTtsZXR7dHJhbnNpdGlvbmFsOmUscGFyYW1zU2VyaWFsaXplcjpnLGhlYWRlcnM6cn09STtlIT09dm9pZCAwJiZoQS5hc3NlcnRPcHRpb25zKGUse3NpbGVudEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbil9LCExKSxnIT1udWxsJiYoQy5pc0Z1bmN0aW9uKGcpP0kucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOmd9OmhBLmFzc2VydE9wdGlvbnMoZyx7ZW5jb2RlOlkuZnVuY3Rpb24sc2VyaWFsaXplOlkuZnVuY3Rpb259LCEwKSksSS5tZXRob2Q9KEkubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89ciYmQy5tZXJnZShyLmNvbW1vbixyW0kubWV0aG9kXSk7ciYmQy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgcltFXX0pLEkuaGVhZGVycz1tLmNvbmNhdChvLHIpO2xldCBuPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3R5cGVvZiBjLnJ1bldoZW49PSJmdW5jdGlvbiImJmMucnVuV2hlbihJKT09PSExfHwoYT1hJiZjLnN5bmNocm9ub3VzLG4udW5zaGlmdChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKSl9KTtsZXQgUT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGMpe1EucHVzaChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKX0pO2xldCBCLGk9MCxmO2lmKCFhKXtsZXQgRT1bREEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxuKSxFLnB1c2guYXBwbHkoRSxRKSxmPUUubGVuZ3RoLEI9UHJvbWlzZS5yZXNvbHZlKEkpO2k8ZjspQj1CLnRoZW4oRVtpKytdLEVbaSsrXSk7cmV0dXJuIEJ9Zj1uLmxlbmd0aDtsZXQgcz1JO2ZvcihpPTA7aTxmOyl7bGV0IEU9bltpKytdLGM9bltpKytdO3RyeXtzPUUocyl9Y2F0Y2godSl7Yy5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXtCPURBLmNhbGwodGhpcyxzKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKGk9MCxmPVEubGVuZ3RoO2k8ZjspQj1CLnRoZW4oUVtpKytdLFFbaSsrXSk7cmV0dXJuIEJ9Z2V0VXJpKHQpe3Q9ayh0aGlzLmRlZmF1bHRzLHQpO2xldCBJPSQodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gWChJLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe3gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKEksZSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKGV8fHt9LHttZXRob2Q6dCx1cmw6SSxkYXRhOihlfHx7fSkuZGF0YX0pKX19KTtDLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBJKGUpe3JldHVybiBmdW5jdGlvbihyLG8sbil7cmV0dXJuIHRoaXMucmVxdWVzdChrKG58fHt9LHttZXRob2Q6dCxoZWFkZXJzOmU/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTpvfSkpfX14LnByb3RvdHlwZVt0XT1JKCkseC5wcm90b3R5cGVbdCsiRm9ybSJdPUkoITApfSk7dmFyIEFBPXg7dmFyIGpBPWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBJO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXtJPXJ9KTtsZXQgZT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGc9PntpZighZS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1lLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOyllLl9saXN0ZW5lcnNbcl0oZyk7ZS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1nPT57bGV0IHIsbz1uZXcgUHJvbWlzZShuPT57ZS5zdWJzY3JpYmUobikscj1ufSkudGhlbihnKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKHIpfSxvfSx0KGZ1bmN0aW9uKHIsbyxuKXtlLnJlYXNvbnx8KGUucmVhc29uPW5ldyBIKHIsbyxuKSxJKGUucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IEk9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7SSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEksMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihnKXt0PWd9KSxjYW5jZWw6dH19fSxidD1qQTtmdW5jdGlvbiBXQShBKXtyZXR1cm4gZnVuY3Rpb24oSSl7cmV0dXJuIEEuYXBwbHkobnVsbCxJKX19ZnVuY3Rpb24gWkEoQSl7cmV0dXJuIEMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFZBPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhWQSkuZm9yRWFjaCgoW0EsdF0pPT57VkFbdF09QX0pO3ZhciBNdD1WQTtmdW5jdGlvbiBxdChBKXtsZXQgdD1uZXcgQUEoQSksST1XKEFBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBDLmV4dGVuZChJLEFBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksQy5leHRlbmQoSSx0LG51bGwse2FsbE93bktleXM6ITB9KSxJLmNyZWF0ZT1mdW5jdGlvbihnKXtyZXR1cm4gcXQoayhBLGcpKX0sSX12YXIgaD1xdChUKTtoLkF4aW9zPUFBO2guQ2FuY2VsZWRFcnJvcj1IO2guQ2FuY2VsVG9rZW49YnQ7aC5pc0NhbmNlbD12O2guVkVSU0lPTj11QTtoLnRvRm9ybURhdGE9SjtoLkF4aW9zRXJyb3I9bDtoLkNhbmNlbD1oLkNhbmNlbGVkRXJyb3I7aC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtoLnNwcmVhZD1XQTtoLmlzQXhpb3NFcnJvcj1aQTtoLm1lcmdlQ29uZmlnPWs7aC5BeGlvc0hlYWRlcnM9bTtoLmZvcm1Ub0pTT049QT0+Y0EoQy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtoLmdldEFkYXB0ZXI9bEEuZ2V0QWRhcHRlcjtoLkh0dHBTdGF0dXNDb2RlPU10O2guZGVmYXVsdD1oO3ZhciBkQT1oO3ZhcntBeGlvczppbyxBeGlvc0Vycm9yOkNvLENhbmNlbGVkRXJyb3I6Qm8saXNDYW5jZWw6bm8sQ2FuY2VsVG9rZW46c28sVkVSU0lPTjpRbyxhbGw6RW8sQ2FuY2VsOmFvLGlzQXhpb3NFcnJvcjpjbyxzcHJlYWQ6Zm8sdG9Gb3JtRGF0YTpsbyxBeGlvc0hlYWRlcnM6RG8sSHR0cFN0YXR1c0NvZGU6dW8sZm9ybVRvSlNPTjpobyxnZXRBZGFwdGVyOnlvLG1lcmdlQ29uZmlnOndvfT1kQTt2YXIgdEEsTCx6QSxYQT17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe3pBPW5ldyBVaW50OEFycmF5KEwuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSx5QT1jbGFzc3tpbml0KCl7cmV0dXJuIHRBfHwodHlwZW9mIGZldGNoPCJ1Ij90QT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK0t0KS50aGVuKHQ9PnQuYXJyYXlCdWZmZXIoKSkudGhlbih0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0LFhBKSkudGhlbih0aGlzLl9pbml0KTp0QT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShLdCwiYmFzZTY0IiksWEEpLnRoZW4odGhpcy5faW5pdCksdEEpfV9pbml0KHQpe0w9dC5pbnN0YW5jZSxYQS5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUodCxJPTApe2lmKCFMKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBlPXQuYnl0ZUxlbmd0aCxnPUwuZXhwb3J0cy5tYWxsb2MoZSk7ekEuc2V0KHQsZyksST1JfHxOdW1iZXIoTC5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUoZyxlKSk7bGV0IHI9TC5leHBvcnRzLm1hbGxvYyhJKSxvPUwuZXhwb3J0cy5aU1REX2RlY29tcHJlc3MocixJLGcsZSksbj16QS5zbGljZShyLHIrbyk7cmV0dXJuIEwuZXhwb3J0cy5mcmVlKGcpLEwuZXhwb3J0cy5mcmVlKHIpLG59fSxLdD0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBPdD1uZXcgeUEsVHQ9ITE7YXN5bmMgZnVuY3Rpb24gY2UoQSx0LEkpe2xldCBlPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP2U9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP2U9QTplPWAke3R9LyR7QX1gLGUuZW5kc1dpdGgoIi5qcyIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTMpKSxlLmVuZHNXaXRoKCIud2FzbSIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTUpKTtsZXQgZz1gJHtlfS53YXNtYCxyPWF3YWl0IGRBLmdldChgJHtnfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6SX0pO1R0fHwoYXdhaXQgT3QuaW5pdCgpLFR0PSEwKTtsZXQgbj1PdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7ZX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIFB0PWNlO3ZhciB3QT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGZlKEEsdCxJKXtsZXQgZT1BLGc9QSxyPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKGU9bmV3IFVSTChBLmhyZWYpLGc9ZS5ocmVmKSx3QS5oYXMoZyk/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLFB0KGUsdCxJKSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIHh0PWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9dWU7ZnVuY3Rpb24gaGUoQSx0KXtsZXQgST1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e0k9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDg6e0k9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFMuVUludDE2OntJPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFMuSW50MTY6e0k9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7ST1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDMyOntJPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ0ludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQzMjp7ST1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDY0OntJPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ST1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ST1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIEl9dmFyIEc9aGU7dmFyIFp0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGp0PW5ldyBUZXh0RW5jb2RlcixXdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSx0KXtsZXQgST17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3Blbih0LEkuZmxhZ3MpLHI9QS5mc19zdGF0KHQpLnNpemUsbz1udWxsO1p0P289bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOm89bmV3IEFycmF5QnVmZmVyKHIpO2xldCBuPW5ldyBVaW50OEFycmF5KG8pO3JldHVybiBBLmZzX3JlYWQoZSxuLDAsciwwKSxBLmZzX2Nsb3NlKGUpLG59ZnVuY3Rpb24gVnQoQSx0LEkpe2xldCBlPW51bGw7WnQ/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoSSk6ZT1uZXcgQXJyYXlCdWZmZXIoSSk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxJKTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiBkKEEsdCxJLGUpe2xldCBnPTA7cmV0dXJuIHQhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGUsdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gTShBLHQsSSl7bGV0IGU9SlNPTi5zdHJpbmdpZnkodCksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gcChBLHQsSSxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLG89VnQoQSxnLHIpO3JldHVybiBHKGUsby5idWZmZXIpfWZ1bmN0aW9uIG1BKEEsdCl7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksZT1BLlVURjhUb1N0cmluZyhJKTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLHQsSSxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxCKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IGk9anQuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IGk9anQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IGk9US5kYXRhLmRhdGEsZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IGk9US5kYXRhLGY9ZChBLGkuZGF0YSxCLDApLHM9ZChBLGkuZGlyZWN0aW9uLEIsMSksRT10eXBlb2YgaS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShpLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOmkuaW1hZ2VUeXBlLG5hbWU6aS5uYW1lLG9yaWdpbjppLm9yaWdpbixzcGFjaW5nOmkuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsc2l6ZTppLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtNKEEsYyxCKTticmVha31jYXNlIEQuTWVzaDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5jZWxscyxCLDEpLEU9ZChBLGkucG9pbnREYXRhLEIsMiksYz1kKEEsaS5jZWxsRGF0YSxCLDMpLHU9e21lc2hUeXBlOmkubWVzaFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczppLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsY2VsbEJ1ZmZlclNpemU6aS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsdSxCKTticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkucG9pbnREYXRhLEIsMSksRT17cG9pbnRTZXRUeXBlOmkucG9pbnRTZXRUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YH07TShBLEUsQik7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnZlcnRpY2VzLEIsMSksRT1kKEEsaS5saW5lcyxCLDIpLGM9ZChBLGkucG9seWdvbnMsQiwzKSx1PWQoQSxpLnRyaWFuZ2xlU3RyaXBzLEIsNCkseT1kKEEsaS5wb2ludERhdGEsQiw1KSxSPWQoQSxpLnBvaW50RGF0YSxCLDYpLE49e3BvbHlEYXRhVHlwZTppLnBvbHlEYXRhVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6aS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsbGluZXNCdWZmZXJTaXplOmkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTppLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6aS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07TShBLE4sQik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgbz1BLmdldE1vZHVsZVN0ZG91dCgpLG49QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiBJIT1udWxsJiZJLmxlbmd0aD4wJiZyPT09MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7bGV0IGk9bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9e2RhdGE6V3QuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPUpTT04ucGFyc2UoV3QuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pO2k9e2RhdGE6VnQoQSxzLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgcz1tQShBLEIpO3MuZGF0YT1wKEEsQiwwLHMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLHMuZGlyZWN0aW9uPXAoQSxCLDEsai5GbG9hdDY0KSxzLm1ldGFkYXRhPW5ldyBNYXAocy5tZXRhZGF0YSksaT1zO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxzPjA/cy5jZWxscz1wKEEsQiwxLHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOnMuY2VsbHM9RyhzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMixzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsMyxzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwxLHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxqLkZsb2F0MzIpOnMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXkscy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9zLnZlcnRpY2VzPXAoQSxCLDEsUy5VSW50MzIpOnMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LHMubGluZXNCdWZmZXJTaXplPjA/cy5saW5lcz1wKEEsQiwyLFMuVUludDMyKTpzLmxpbmVzPW5ldyBVaW50MzJBcnJheSxzLnBvbHlnb25zQnVmZmVyU2l6ZT4wP3MucG9seWdvbnM9cChBLEIsMyxTLlVJbnQzMik6cy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXkscy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9zLnRyaWFuZ2xlU3RyaXBzPXAoQSxCLDQsUy5VSW50MzIpOnMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDUscy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsNixzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOlEudHlwZSxkYXRhOml9O2EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpyLHN0ZG91dDpvLHN0ZGVycjpuLG91dHB1dHM6YX19dmFyIFh0PXllO3ZhciB3ZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gbWUoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBJPVtdO2ZvcihsZXQgZT0wO2U8QS5sZW5ndGg7ZSsrKXtsZXQgZz1wZShBW2VdLHQpO2chPT1udWxsJiZJLnB1c2goZyl9cmV0dXJuIEl9ZnVuY3Rpb24gcGUoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBJPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP0k9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoST1BKSx3ZSYmSSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9JOkkuc2xpY2UoMCl9dmFyIHp0PW1lO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBfdD1TZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgdnQ9RmU7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyICR0PVJlO2FzeW5jIGZ1bmN0aW9uIE5lKEEsdCxJLGUpe2xldCBnPVh0KEEsdCxJLGUpLHI9W107cmV0dXJuIGcub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8udHlwZT09PUQuQmluYXJ5U3RyZWFtfHxvLnR5cGU9PT1ELkJpbmFyeUZpbGUpe2xldCBuPW8uZGF0YTtyLnB1c2gobil9ZWxzZSBpZihvLnR5cGU9PT1ELkltYWdlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLl90KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuTWVzaCl7bGV0IG49by5kYXRhO3IucHVzaCguLi52dChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELlBvbHlEYXRhKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLiR0KG4pKX19KSxGQShnLHp0KHIsITApKX12YXIgQUk9TmU7dmFyIFVlPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsSSxlLGcscil7bGV0IG89YXdhaXQgeHQoQSx0LHIpO3JldHVybiBhd2FpdCBBSShvLEksZSxnKX19O2lBKFVlKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO2R0KGh0KTtleHBvcnR7c2UgYXMgY29tcGFyZURvdWJsZUltYWdlcyxFbiBhcyBjb21wYXJlSW1hZ2VzLHl0IGFzIGdldERlZmF1bHRXZWJXb3JrZXIsdiBhcyBnZXRQaXBlbGluZVdvcmtlclVybCxrQSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLE9zIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsZHQgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsUnMgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCxnZSBhcyB2ZWN0b3JNYWduaXR1ZGUsUkEgYXMgdmVyc2lvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/compare-images/python/itkwasm-compare-images/test/fixtures.py b/packages/compare-images/python/itkwasm-compare-images/test/fixtures.py index 9ae4c2e7f..1da561974 100644 --- a/packages/compare-images/python/itkwasm-compare-images/test/fixtures.py +++ b/packages/compare-images/python/itkwasm-compare-images/test/fixtures.py @@ -11,6 +11,10 @@ def package_wheel(): return f"itkwasm_compare_images-{test_package_version}-py3-none-any.whl" +@pytest.fixture +def emscripten_package_wheel(): + return f"itkwasm_compare_images_emscripten-{test_package_version}-py3-none-any.whl" + @pytest.fixture def input_data(): from pathlib import Path diff --git a/packages/compare-images/python/itkwasm-compare-images/test/test_compare_images_async.py b/packages/compare-images/python/itkwasm-compare-images/test/test_compare_images_async.py index 4a6315550..e4a521753 100644 --- a/packages/compare-images/python/itkwasm-compare-images/test/test_compare_images_async.py +++ b/packages/compare-images/python/itkwasm-compare-images/test/test_compare_images_async.py @@ -4,11 +4,12 @@ pytest.skip("Skipping pyodide tests on older Python", allow_module_level=True) from pytest_pyodide import run_in_pyodide -from .fixtures import package_wheel, input_data +from .fixtures import emscripten_package_wheel, package_wheel, input_data @run_in_pyodide(packages=['micropip', 'numpy']) -async def test_compare_double_images_async(selenium, package_wheel, input_data): +async def test_compare_double_images_async(selenium, emscripten_package_wheel, package_wheel, input_data): import micropip + await micropip.install(emscripten_package_wheel) await micropip.install(package_wheel) await micropip.install('itkwasm-image-io-emscripten') def write_input_data_to_fs(input_data, filename): @@ -42,8 +43,9 @@ def write_input_data_to_fs(input_data, filename): assert difference_image_rendering.imageType.componentType == 'uint8' @run_in_pyodide(packages=['micropip', 'numpy']) -async def test_compare_images_async(selenium, package_wheel, input_data): +async def test_compare_images_async(selenium, emscripten_package_wheel, package_wheel, input_data): import micropip + await micropip.install(emscripten_package_wheel) await micropip.install(package_wheel) await micropip.install('itkwasm-image-io-emscripten') def write_input_data_to_fs(input_data, filename): @@ -110,8 +112,8 @@ def write_input_data_to_fs(input_data, filename): assert metrics['numberOfPixelsWithDifferences'] == 26477 assert metrics['minimumDifference'] == 0.002273026683894841 assert metrics['maximumDifference'] == 312.2511648746159 - assert metrics['totalDifference'] == 3121703.1639738297 - assert metrics['meanDifference'] == 117.90244982338746 + assert (abs(metrics['totalDifference'] - 3121703.1639738297) < 100) + assert (abs(metrics['meanDifference'] - 117.90244982338746) < 1) assert difference_image.imageType.componentType == 'float64' assert difference_image_rendering.imageType.componentType == 'uint8' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5fe184a8e..c9cbe7102 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -148,9 +148,6 @@ importers: '@itk-wasm/image-io-build': specifier: workspace:^ version: link:../image-io - '@thewtex/setup-micromamba': - specifier: ^1.9.7 - version: 1.9.7 itk-wasm: specifier: workspace:^ version: link:../core/typescript/itk-wasm From dd47b676ec75a0d5ff1f22d40715816e187aa910 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 13:56:50 -0400 Subject: [PATCH 11/39] chore(compare-images): bump version to 5.2.1 --- packages/compare-images/package.json | 3 +- packages/compare-images/pixi.lock | 2891 +++++++++++++---- packages/compare-images/pixi.toml | 36 +- .../_version.py | 2 +- .../itkwasm_compare_images_wasi/_version.py | 2 +- .../itkwasm_compare_images/_version.py | 2 +- .../compare-images/typescript/package.json | 3 +- 7 files changed, 2234 insertions(+), 705 deletions(-) diff --git a/packages/compare-images/package.json b/packages/compare-images/package.json index 84f68de47..f6a0e26b3 100644 --- a/packages/compare-images/package.json +++ b/packages/compare-images/package.json @@ -1,8 +1,7 @@ { "name": "@itk-wasm/compare-images-build", - "version": "1.0.0", + "version": "5.2.1", "private": true, - "packageManager": "pnpm@9.6.0", "description": "scripts to generate @itk-wasm/compare-stringify itk-wasm artifacts.", "type": "module", "itk-wasm": { diff --git a/packages/compare-images/pixi.lock b/packages/compare-images/pixi.lock index e0c5307c9..6f599c955 100644 --- a/packages/compare-images/pixi.lock +++ b/packages/compare-images/pixi.lock @@ -7,15 +7,48 @@ environments: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda @@ -24,27 +57,92 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.1-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda @@ -53,54 +151,208 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.1-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.1-h8d36dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.1-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda python: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -110,18 +362,50 @@ environments: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda @@ -130,41 +414,52 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.1-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl @@ -177,65 +472,71 @@ environments: - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/98/ba1cb7dd2aa639a064a9e49721e08f12a3424456d60dde1327e7c6437930/uv-0.4.25-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fc/79/edeb217c57fe1bf16d890aa91a1c2c96b28c07b46afed54a5dcf310c3f6f/zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: python/itkwasm-compare-images - pypi: python/itkwasm-compare-images-wasi linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda @@ -244,41 +545,52 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.1-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda - - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl @@ -291,97 +603,108 @@ environments: - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/05/b97fb8c828a070e8291826922b2712d1146b11563b4860bc9ba80f5635d1/uv-0.4.25-py3-none-manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/af/36d89aae0c1f95a0a98e50711bc5d92c144939efc1f81a2fcd3e78d7f4c1/zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: python/itkwasm-compare-images - pypi: python/itkwasm-compare-images-wasi osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.1-h8d36dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl - - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl @@ -394,93 +717,113 @@ environments: - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e8/c9/2f924bb29bd53c51b839c1c6126bd2cf4c451d4a7d8f34be078f9e31c57e/uv-0.4.25-py3-none-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: python/itkwasm-compare-images - pypi: python/itkwasm-compare-images-wasi win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.1-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 - - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl @@ -493,48 +836,23 @@ environments: - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/e9/c00d2bb4a286b13fad0f06488ea9cbe9e76d0efcd81e7a907f72195d5b83/uv-0.4.25-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/75/37/872d74bd7739639c4553bf94c84af7d54d8211b626b352bc57f0fd8d1e3f/zstandard-0.23.0-cp312-cp312-win_amd64.whl - pypi: python/itkwasm-compare-images - pypi: python/itkwasm-compare-images-wasi packages: @@ -587,32 +905,30 @@ packages: purls: [] size: 23712 timestamp: 1650670790230 -- kind: pypi +- kind: conda name: anyio version: 4.6.2.post1 - url: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl - sha256: 6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d - requires_dist: - - idna>=2.8 - - sniffio>=1.1 - - exceptiongroup>=1.0.2 ; python_full_version < '3.11' - - typing-extensions>=4.1 ; python_full_version < '3.11' - - packaging ; extra == 'doc' - - sphinx~=7.4 ; extra == 'doc' - - sphinx-rtd-theme ; extra == 'doc' - - sphinx-autodoc-typehints>=1.2.0 ; extra == 'doc' - - anyio[trio] ; extra == 'test' - - coverage[toml]>=7 ; extra == 'test' - - exceptiongroup>=1.2.0 ; extra == 'test' - - hypothesis>=4.0 ; extra == 'test' - - psutil>=5.9 ; extra == 'test' - - pytest>=7.0 ; extra == 'test' - - pytest-mock>=3.6.1 ; extra == 'test' - - trustme ; extra == 'test' - - uvloop>=0.21.0b1 ; platform_python_implementation == 'CPython' and platform_system != 'Windows' and extra == 'test' - - truststore>=0.9.1 ; python_full_version >= '3.10' and extra == 'test' - - trio>=0.26.1 ; extra == 'trio' - requires_python: '>=3.9' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - uvloop >=0.21.0b1 + - trio >=0.26.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/anyio?source=compressed-mapping + size: 109864 + timestamp: 1728935803440 - kind: pypi name: attrs version: 24.2.0 @@ -661,6 +977,42 @@ packages: - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' requires_python: '>=3.7' +- kind: conda + name: backports + version: '1.0' + build: pyhd8ed1ab_4 + build_number: 4 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + sha256: 31b51537ce7d2ba8b5b3d0095f1813711884304ac1701bc55938ca75f6c82e19 + md5: 67bdebbc334513034826e9b63f769d4c + depends: + - python >=3 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6989 + timestamp: 1722295637981 +- kind: conda + name: backports.tarfile + version: 1.0.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + sha256: 7ba30f32daad2e7ca251508525185ba170eedc14123572611c2acf261c7956b3 + md5: c747b1d79f136013c3b7ebcba876afa6 + depends: + - backports + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/backports-tarfile?source=hash-mapping + size: 31951 + timestamp: 1712700751335 - kind: conda name: bzip2 version: 1.0.8 @@ -776,45 +1128,142 @@ packages: purls: [] size: 158482 timestamp: 1725019034582 -- kind: pypi +- kind: conda name: certifi version: 2024.8.30 - url: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - sha256: 922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 - requires_python: '>=3.6' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping + size: 163752 + timestamp: 1725278204397 +- kind: conda name: cffi version: 1.17.1 - url: https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - sha256: da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 - requires_dist: + build: py312h06ac9bb_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 + md5: a861504bbea4161a9170b85d4d2be840 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 - pycparser - requires_python: '>=3.8' -- kind: pypi + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 294403 + timestamp: 1725560714366 +- kind: conda name: cffi version: 1.17.1 - url: https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl - sha256: 51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 - requires_dist: + build: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 - pycparser - requires_python: '>=3.8' -- kind: pypi + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 281206 + timestamp: 1725560813378 +- kind: conda name: cffi version: 1.17.1 - url: https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - sha256: b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 - requires_dist: + build: py312h4389bb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + sha256: ac007bf5fd56d13e16d95eea036433012f2e079dc015505c8a79efebbad1fcbc + md5: 08310c1a22ef957d537e547f8d484f92 + depends: - pycparser - requires_python: '>=3.8' -- kind: pypi + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 288142 + timestamp: 1725560896359 +- kind: conda + name: cffi + version: 1.17.1 + build: py312hac81daf_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + sha256: 1162e3ca039e7ca7c0e78f0a020ed1bde968096841b663e3f393c966eb82f0f0 + md5: 1a256e5581b1099e9295cb84d53db3ea + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 312892 + timestamp: 1725561779888 +- kind: conda name: click version: 8.1.7 - url: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl - sha256: ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 - requires_dist: - - colorama ; platform_system == 'Windows' - - importlib-metadata ; python_full_version < '3.8' - requires_python: '>=3.7' + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 84437 + timestamp: 1692311973840 +- kind: conda + name: click + version: 8.1.7 + build: win_pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 + md5: 3549ecbceb6cd77b91a105511b7d0786 + depends: + - __win + - colorama + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 85051 + timestamp: 1692312207348 - kind: conda name: colorama version: 0.4.6 @@ -832,67 +1281,122 @@ packages: - pkg:pypi/colorama?source=hash-mapping size: 25170 timestamp: 1666700778190 -- kind: pypi +- kind: conda name: cryptography version: 43.0.3 - url: https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl - sha256: f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7 - requires_dist: - - cffi>=1.12 ; platform_python_implementation != 'PyPy' - - bcrypt>=3.1.5 ; extra == 'ssh' - - nox ; extra == 'nox' - - cryptography-vectors==43.0.3 ; extra == 'test' - - pytest>=6.2.0 ; extra == 'test' - - pytest-benchmark ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-xdist ; extra == 'test' - - pretend ; extra == 'test' - - certifi ; extra == 'test' - - pytest-randomly ; extra == 'test-randomorder' - - sphinx>=5.3.0 ; extra == 'docs' - - sphinx-rtd-theme>=1.1.1 ; extra == 'docs' - - pyenchant>=1.6.11 ; extra == 'docstest' - - readme-renderer ; extra == 'docstest' - - sphinxcontrib-spelling>=4.0.1 ; extra == 'docstest' - - build ; extra == 'sdist' - - ruff ; extra == 'pep8test' - - mypy ; extra == 'pep8test' - - check-sdist ; extra == 'pep8test' - - click ; extra == 'pep8test' - requires_python: '>=3.7' -- kind: pypi + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + sha256: ba9e5aced2e7dc0bbc48f60bf38f514839424a01975fb2aed30e9246c2f82c7c + md5: 2abada8c216dd6e32514535a3fa245d4 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1488388 + timestamp: 1729286882127 +- kind: conda name: cryptography version: 43.0.3 - url: https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl - sha256: c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405 - requires_dist: - - cffi>=1.12 ; platform_python_implementation != 'PyPy' - - bcrypt>=3.1.5 ; extra == 'ssh' - - nox ; extra == 'nox' - - cryptography-vectors==43.0.3 ; extra == 'test' - - pytest>=6.2.0 ; extra == 'test' - - pytest-benchmark ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-xdist ; extra == 'test' - - pretend ; extra == 'test' - - certifi ; extra == 'test' - - pytest-randomly ; extra == 'test-randomorder' - - sphinx>=5.3.0 ; extra == 'docs' - - sphinx-rtd-theme>=1.1.1 ; extra == 'docs' - - pyenchant>=1.6.11 ; extra == 'docstest' - - readme-renderer ; extra == 'docstest' - - sphinxcontrib-spelling>=4.0.1 ; extra == 'docstest' - - build ; extra == 'sdist' - - ruff ; extra == 'pep8test' - - mypy ; extra == 'pep8test' - - check-sdist ; extra == 'pep8test' - - click ; extra == 'pep8test' - requires_python: '>=3.7' -- kind: pypi + build: py312he723553_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + sha256: bd9cc8410bf31ac8b90d63dda92d5810af16c3841ca6dd09be9b7f9c5c7688ba + md5: bfacbf2e4560c7d6416d40f573961918 + depends: + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1480456 + timestamp: 1729287055014 +- kind: conda + name: dbus + version: 1.13.6 + build: h12b9eeb_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + sha256: 5fe76bdf27a142cfb9da0fb3197c562e528d2622b573765bee5c9904cf5e6b6b + md5: f3d63805602166bac09386741e00935e + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 672759 + timestamp: 1640113663539 +- kind: conda + name: dbus + version: 1.13.6 + build: h5008d03_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 + md5: ecfff944ba3960ecb334b9a2663d708d + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 618596 + timestamp: 1640112124844 +- kind: conda name: distlib version: 0.3.9 - url: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl - sha256: 47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb + md5: fe521c1608280cc2803ebd26dc252212 + depends: + - python 2.7|>=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/distlib?source=hash-mapping + size: 276214 + timestamp: 1728557312342 +- kind: conda + name: editables + version: '0.5' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + sha256: de160a7494e7bc72360eea6a29cbddf194d0a79f45ff417a4de20e6858cf79a9 + md5: 9873878e2a069bc358b69e9a29c1ecd5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/editables?source=hash-mapping + size: 10988 + timestamp: 1705857085102 - kind: conda name: exceptiongroup version: 1.2.2 @@ -909,26 +1413,55 @@ packages: - pkg:pypi/exceptiongroup?source=hash-mapping size: 20418 timestamp: 1720869435725 -- kind: pypi +- kind: conda + name: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: expat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + sha256: c827521e080d0f3395655924f1c364d48a1eac1ff3e193a12d0441e9c3b51e91 + md5: 901a44b341632b0c233756ed5abcd78b + depends: + - libexpat 2.6.3 h5ad3122_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 130283 + timestamp: 1725568848182 +- kind: conda name: filelock version: 3.16.1 - url: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl - sha256: 2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 - requires_dist: - - furo>=2024.8.6 ; extra == 'docs' - - sphinx-autodoc-typehints>=2.4.1 ; extra == 'docs' - - sphinx>=8.0.2 ; extra == 'docs' - - covdefaults>=2.3 ; extra == 'testing' - - coverage>=7.6.1 ; extra == 'testing' - - diff-cover>=9.2 ; extra == 'testing' - - pytest-asyncio>=0.24 ; extra == 'testing' - - pytest-cov>=5 ; extra == 'testing' - - pytest-mock>=3.14 ; extra == 'testing' - - pytest-timeout>=2.3.1 ; extra == 'testing' - - pytest>=8.3.3 ; extra == 'testing' - - virtualenv>=20.26.4 ; extra == 'testing' - - typing-extensions>=4.12.2 ; python_full_version < '3.11' and extra == 'typing' - requires_python: '>=3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + purls: + - pkg:pypi/filelock?source=hash-mapping + size: 17357 + timestamp: 1726613593584 - kind: pypi name: greenlet version: 3.1.1 @@ -973,91 +1506,196 @@ packages: - objgraph ; extra == 'test' - psutil ; extra == 'test' requires_python: '>=3.7' -- kind: pypi +- kind: conda name: h11 version: 0.14.0 - url: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl - sha256: e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 - requires_dist: - - typing-extensions ; python_full_version < '3.8' - requires_python: '>=3.7' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/h11?source=hash-mapping + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + size: 46754 + timestamp: 1634280590080 +- kind: conda name: hatch version: 1.13.0 - url: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl - sha256: bb1a18558a626279cae338b4d8a9d3ca4226d5e06d50de600608c57acd131b67 - requires_dist: - - click>=8.0.6 - - hatchling>=1.24.2 - - httpx>=0.22.0 - - hyperlink>=21.0.0 - - keyring>=23.5.0 - - packaging>=23.2 - - pexpect~=4.8 - - platformdirs>=2.5.0 - - rich>=11.2.0 - - shellingham>=1.4.0 - - tomli-w>=1.0 - - tomlkit>=0.11.1 - - userpath~=1.7 - - uv>=0.1.35 - - virtualenv>=20.26.1 - - zstandard<1 - requires_python: '>=3.8' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + sha256: 675b0304b129a4dbc39b8e6f337cea51adebef20508a656f43b6e6b43d9cf458 + md5: b8a6437f94d29aef00decdbe1174be27 + depends: + - click >=8.0.6 + - hatchling >=1.24.2 + - httpx >=0.22.0 + - hyperlink >=21.0.0 + - keyring >=23.5.0 + - packaging >=23.2 + - pexpect >=4.8,<5 + - platformdirs >=2.5.0 + - python >=3.8 + - rich >=11.2.0 + - shellingham >=1.4.0 + - tomli-w >=1.0 + - tomlkit >=0.11.1 + - userpath >=1.7,<2 + - uv >=0.1.35 + - virtualenv >=20.26.1 + - zstandard <1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatch?source=hash-mapping + size: 177173 + timestamp: 1728879212263 +- kind: conda name: hatchling version: 1.25.0 - url: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl - sha256: b47948e45d4d973034584dd4cb39c14b6a70227cf287ab7ec0ad7983408a882c - requires_dist: - - packaging>=23.2 - - pathspec>=0.10.1 - - pluggy>=1.0.0 - - tomli>=1.2.2 ; python_full_version < '3.11' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + sha256: fb8a16a913f909d8f7d2ae95c18a1aeb7be3eebfb1b7a4246500c06d54498f89 + md5: 7571d6e5561b04aef679a11904dfcebf + depends: + - editables >=0.3 + - importlib-metadata + - packaging >=21.3 + - pathspec >=0.10.1 + - pluggy >=1.0.0 + - python >=3.7 + - tomli >=1.2.2 - trove-classifiers - requires_python: '>=3.8' -- kind: pypi + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatchling?source=hash-mapping + size: 64580 + timestamp: 1719090878694 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + size: 25341 + timestamp: 1598856368685 +- kind: conda name: httpcore version: 1.0.6 - url: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl - sha256: 27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f - requires_dist: + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + sha256: 8952c3f1eb18bf4d7e813176c3b23e0af4e863e8b05087e73f74f371d73077ca + md5: b8e1901ef9a215fc41ecfb6bef7e0943 + depends: + - anyio >=3.0,<5.0 - certifi - - h11<0.15,>=0.13 - - anyio<5.0,>=4.0 ; extra == 'asyncio' - - h2<5,>=3 ; extra == 'http2' - - socksio==1.* ; extra == 'socks' - - trio<1.0,>=0.22.0 ; extra == 'trio' - requires_python: '>=3.8' -- kind: pypi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + size: 45711 + timestamp: 1727821031365 +- kind: conda name: httpx version: 0.27.2 - url: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl - sha256: 7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0 - requires_dist: + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: - anyio - certifi - - httpcore==1.* + - httpcore 1.* - idna + - python >=3.8 - sniffio - - brotli ; platform_python_implementation == 'CPython' and extra == 'brotli' - - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'brotli' - - click==8.* ; extra == 'cli' - - pygments==2.* ; extra == 'cli' - - rich<14,>=10 ; extra == 'cli' - - h2<5,>=3 ; extra == 'http2' - - socksio==1.* ; extra == 'socks' - - zstandard>=0.18.0 ; extra == 'zstd' - requires_python: '>=3.8' -- kind: pypi + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 14646 + timestamp: 1619110249723 +- kind: conda name: hyperlink version: 21.0.0 - url: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl - sha256: e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4 - requires_dist: - - idna>=2.5 - - typing ; python_full_version < '3.5' - requires_python: '>=2.6,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + sha256: 026cb82ada41be9ee2836a2ace526e85c4603e77617887c41c6e62c9bde798b3 + md5: 1303beb57b40f8f4ff6fb1bb23bf0553 + depends: + - idna >=2.6 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperlink?source=hash-mapping + size: 72732 + timestamp: 1610092261086 - kind: pypi name: hypothesis version: 6.115.3 @@ -1149,39 +1787,61 @@ packages: purls: [] size: 11857802 timestamp: 1720853997952 -- kind: pypi +- kind: conda name: idna version: '3.10' - url: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - sha256: 946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 - requires_dist: - - ruff>=0.6.2 ; extra == 'all' - - mypy>=1.11.2 ; extra == 'all' - - pytest>=8.3.2 ; extra == 'all' - - flake8>=7.1.1 ; extra == 'all' - requires_python: '>=3.6' -- kind: pypi - name: importlib-resources + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=hash-mapping + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: importlib_resources version: 6.4.5 - url: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl - sha256: ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717 - requires_dist: - - zipp>=3.1.0 ; python_full_version < '3.10' - - pytest-checkdocs>=2.4 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - pytest-cov ; extra == 'cover' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest-enabler>=2.2 ; extra == 'enabler' - - pytest!=8.1.*,>=6 ; extra == 'test' - - zipp>=3.17 ; extra == 'test' - - jaraco-test>=5.4 ; extra == 'test' - - pytest-mypy ; extra == 'type' - requires_python: '>=3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping + size: 32725 + timestamp: 1725921462405 - kind: conda name: iniconfig version: 2.0.0 @@ -1571,115 +2231,201 @@ packages: - importlib-resources - itkwasm>=1.0b131 requires_python: '>=3.8' -- kind: pypi - name: jaraco-classes +- kind: conda + name: jaraco.classes version: 3.4.0 - url: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - sha256: f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 - requires_dist: + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + sha256: 538b1c6df537a36c63fd0ed83cb1c1c25b07d8d3b5e401991fdaff261a4b5b4d + md5: 7b756504d362cbad9b73a50a5455cafd + depends: - more-itertools - - sphinx>=3.5 ; extra == 'docs' - - jaraco-packaging>=9.3 ; extra == 'docs' - - rst-linker>=1.9 ; extra == 'docs' - - furo ; extra == 'docs' - - sphinx-lint ; extra == 'docs' - - jaraco-tidelift>=1.4 ; extra == 'docs' - - pytest>=6 ; extra == 'testing' - - pytest-checkdocs>=2.4 ; extra == 'testing' - - pytest-cov ; extra == 'testing' - - pytest-mypy ; extra == 'testing' - - pytest-enabler>=2.2 ; extra == 'testing' - - pytest-ruff>=0.2.1 ; extra == 'testing' - requires_python: '>=3.8' -- kind: pypi - name: jaraco-context - version: 6.0.1 - url: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl - sha256: f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4 - requires_dist: - - backports-tarfile ; python_full_version < '3.12' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest!=8.1.*,>=6 ; extra == 'test' - - pytest-checkdocs>=2.4 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-mypy ; extra == 'test' - - pytest-enabler>=2.2 ; extra == 'test' - - portend ; extra == 'test' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'test' - requires_python: '>=3.8' -- kind: pypi - name: jaraco-functools - version: 4.1.0 - url: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl - sha256: ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649 - requires_dist: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-classes?source=hash-mapping + size: 12223 + timestamp: 1713939433204 +- kind: conda + name: jaraco.context + version: 5.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + sha256: 9e2aeacb1aed3ab4fc5883a357e8a874e12f687af300f8708ec12de2995e17d2 + md5: 72d7ad2dcd0f37eccb2ee35a1c8f6aaa + depends: + - backports.tarfile + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-context?source=hash-mapping + size: 12456 + timestamp: 1714372284922 +- kind: conda + name: jaraco.functools + version: 4.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + sha256: d2e866fd22a48eaa2f795b6a3b0bf16f066293322ce04dd65cca36267160ead6 + md5: 547670a612fd335eaa5ffbf0fa75cb64 + depends: - more-itertools - - pytest-checkdocs>=2.4 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - pytest-cov ; extra == 'cover' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest-enabler>=2.2 ; extra == 'enabler' - - pytest!=8.1.*,>=6 ; extra == 'test' - - jaraco-classes ; extra == 'test' - - pytest-mypy ; extra == 'type' - requires_python: '>=3.8' -- kind: pypi + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-functools?source=hash-mapping + size: 15192 + timestamp: 1701695329516 +- kind: conda name: jeepney version: 0.8.0 - url: https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl - sha256: c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755 - requires_dist: - - pytest ; extra == 'test' - - pytest-trio ; extra == 'test' - - pytest-asyncio>=0.17 ; extra == 'test' - - testpath ; extra == 'test' - - trio ; extra == 'test' - - async-timeout ; extra == 'test' - - trio ; extra == 'trio' - - async-generator ; python_full_version == '3.6.*' and extra == 'trio' - requires_python: '>=3.7' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + sha256: 16639759b811866d63315fe1391f6fb45f5478b823972f4d3d9f0392b7dd80b8 + md5: 9800ad1699b42612478755a2d26c722d + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jeepney?source=hash-mapping + size: 36895 + timestamp: 1649085298891 +- kind: conda + name: jq + version: 1.7.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + sha256: 53437ca79e28003faac8058f6c025c83a819e122d3a0fb70624e6da0f77ab126 + md5: 397702b2c1e53f0f0312d2b170d2e699 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 334346 + timestamp: 1702502754422 +- kind: conda + name: jq + version: 1.7.1 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + sha256: e530cf5800e937bce7847a023a998db504e333a928b469c45a1752535593e762 + md5: dbf665694fb28d86d77cca18e5dd530c + depends: + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 317604 + timestamp: 1702501287237 +- kind: conda + name: jq + version: 1.7.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d + md5: 80814f94713e35df60aad6c4b235de87 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 318956 + timestamp: 1702500793203 +- kind: conda name: keyring version: 25.4.1 - url: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl - sha256: 5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf - requires_dist: - - jaraco-classes - - jaraco-functools - - jaraco-context - - importlib-metadata>=4.11.4 ; python_full_version < '3.12' - - importlib-resources ; python_full_version < '3.9' - - secretstorage>=3.2 ; sys_platform == 'linux' - - jeepney>=0.4.2 ; sys_platform == 'linux' - - pywin32-ctypes>=0.2.0 ; sys_platform == 'win32' - - pytest-checkdocs>=2.4 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - shtab>=1.1.0 ; extra == 'completion' - - pytest-cov ; extra == 'cover' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest-enabler>=2.2 ; extra == 'enabler' - - pytest!=8.1.*,>=6 ; extra == 'test' - - pyfakefs ; extra == 'test' - - pytest-mypy ; extra == 'type' - - pygobject-stubs ; extra == 'type' - - shtab ; extra == 'type' - - types-pywin32 ; extra == 'type' - requires_python: '>=3.8' + build: pyh534df25_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + sha256: 8d8fc7d67e9bd387403720447abb1b5539a6f6ca8e3aba8406e0987213bfa0ce + md5: 2099f34ea2f3534f7adc5c21cc199e1b + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37045 + timestamp: 1726971145252 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + sha256: 69626899dfac975090032f7af782c143b569f7706e808a4eca67a9a5aa134a15 + md5: 1c74a03431815d5e091585bb04e86f12 + depends: + - __win + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + - pywin32-ctypes >=0.2.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37407 + timestamp: 1726971355676 +- kind: conda + name: keyring + version: 25.4.1 + build: pyha804496_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + sha256: 6deeb4fa0f01447a5e8bd7261044c45d139e27d36df769e5a3a16ce55607da14 + md5: ef6f2de3c8eef0ee9fd31f2267c27bf2 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.8 + - secretstorage >=3.2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 36717 + timestamp: 1726971094601 - kind: conda name: ld_impl_linux-64 version: '2.43' @@ -1934,6 +2680,47 @@ packages: purls: [] size: 54104 timestamp: 1729089444587 +- kind: conda + name: libglib + version: 2.82.2 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 3931898 + timestamp: 1729191404130 +- kind: conda + name: libglib + version: 2.82.2 + build: hc486b8e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + sha256: 6797d24de7acd298f81a86078c64e4f3fea6d551a3e8892205c9e72a37a7cc3c + md5: 47f6d85fe47b865e56c539f2ba5f4dad + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 4020802 + timestamp: 1729191545578 - kind: conda name: libgomp version: 14.2.0 @@ -1964,6 +2751,36 @@ packages: purls: [] size: 463521 timestamp: 1729089357313 +- kind: conda + name: libiconv + version: '1.17' + build: h31becfc_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705787 + timestamp: 1702684557134 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705775 + timestamp: 1702682170569 - kind: conda name: libnsl version: 2.0.1 @@ -2301,67 +3118,200 @@ packages: purls: [] size: 60963 timestamp: 1727963148474 -- kind: pypi - name: markdown-it-py - version: 3.0.0 - url: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl - sha256: 355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 - requires_dist: - - mdurl~=0.1 - - psutil ; extra == 'benchmarking' - - pytest ; extra == 'benchmarking' - - pytest-benchmark ; extra == 'benchmarking' - - pre-commit~=3.0 ; extra == 'code-style' - - commonmark~=0.9 ; extra == 'compare' - - markdown~=3.4 ; extra == 'compare' - - mistletoe~=1.0 ; extra == 'compare' - - mistune~=2.0 ; extra == 'compare' - - panflute~=2.3 ; extra == 'compare' - - linkify-it-py>=1,<3 ; extra == 'linkify' - - mdit-py-plugins ; extra == 'plugins' - - gprof2dot ; extra == 'profiling' - - mdit-py-plugins ; extra == 'rtd' - - myst-parser ; extra == 'rtd' - - pyyaml ; extra == 'rtd' - - sphinx ; extra == 'rtd' - - sphinx-copybutton ; extra == 'rtd' - - sphinx-design ; extra == 'rtd' - - sphinx-book-theme ; extra == 'rtd' - - jupyter-sphinx ; extra == 'rtd' - - coverage ; extra == 'testing' - - pytest ; extra == 'testing' - - pytest-cov ; extra == 'testing' - - pytest-regressions ; extra == 'testing' - requires_python: '>=3.8' -- kind: pypi - name: mdurl - version: 0.1.2 - url: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 - requires_python: '>=3.7' -- kind: pypi - name: more-itertools - version: 10.5.0 - url: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl - sha256: 037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef - requires_python: '>=3.8' - kind: conda - name: ncurses - version: '6.5' - build: h7bae524_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc - md5: cb2b0ea909b97b3d70cd3921d1445e1a + name: m2w64-gcc-libgfortran + version: 5.3.0 + build: '6' + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 + md5: 066552ac6b907ec6d72c0ddab29050dc depends: - - __osx >=11.0 - license: X11 AND BSD-3-Clause + - m2w64-gcc-libs-core + - msys2-conda-epoch ==20160418 + license: GPL, LGPL, FDL, custom purls: [] - size: 802321 - timestamp: 1724658775723 + size: 350687 + timestamp: 1608163451316 - kind: conda - name: ncurses + name: m2w64-gcc-libs + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa + md5: fe759119b8b3bfa720b8762c6fdc35de + depends: + - m2w64-gcc-libgfortran + - m2w64-gcc-libs-core + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 532390 + timestamp: 1608163512830 +- kind: conda + name: m2w64-gcc-libs-core + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 + md5: 4289d80fb4d272f1f3b56cfe87ac90bd + depends: + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 219240 + timestamp: 1608163481341 +- kind: conda + name: m2w64-gmp + version: 6.1.0 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 + md5: 53a1c73e1e3d185516d7e3af177596d9 + depends: + - msys2-conda-epoch ==20160418 + license: LGPL3 + purls: [] + size: 743501 + timestamp: 1608163782057 +- kind: conda + name: m2w64-jq + version: '1.6' + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + sha256: d722a8c06f44dfb5f357608e6e1d40d1f1c926316bbee5d1e71d93823554646b + md5: 209cbf1b222dc774cb29ce57796500b3 + depends: + - m2w64-gcc-libs + - m2w64-oniguruma + license: MIT + license_family: MIT + purls: [] + size: 424702 + timestamp: 1591860215369 +- kind: conda + name: m2w64-libwinpthread-git + version: 5.0.0.4634.697f757 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 + md5: 774130a326dee16f1ceb05cc687ee4f0 + depends: + - msys2-conda-epoch ==20160418 + license: MIT, BSD + purls: [] + size: 31928 + timestamp: 1608166099896 +- kind: conda + name: m2w64-oniguruma + version: 6.9.5 + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + sha256: 523edeac9788aa61243bd2ceb7b8bdb1a86b68c9f7f1aeb933085893d2886cc3 + md5: 61c9b808f92724106a63dd7b50979d6b + depends: + - m2w64-gcc-libs + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 426599 + timestamp: 1591828659130 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + size: 64356 + timestamp: 1686175179621 +- kind: conda + name: mdurl + version: 0.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping + size: 14680 + timestamp: 1704317789138 +- kind: conda + name: more-itertools + version: 10.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + sha256: 2315b7dba237e16b0e1b601725a8e03e062421e0be28d8a25dc35dd9bd93a342 + md5: 3364591bebd600979606791e1dff7cb6 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/more-itertools?source=hash-mapping + size: 57345 + timestamp: 1725630183289 +- kind: conda + name: msys2-conda-epoch + version: '20160418' + build: '1' + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 + md5: b0309b72560df66f71a9d5e34a5efdfa + purls: [] + size: 3227 + timestamp: 1608166968312 +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 802321 + timestamp: 1724658775723 +- kind: conda + name: ncurses version: '6.5' build: hcccb83c_1 build_number: 1 @@ -2493,6 +3443,49 @@ packages: url: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl sha256: 1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0 requires_python: '>=3.10' +- kind: conda + name: oniguruma + version: 6.9.9 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + sha256: e21b1822736959ba434ebce452ee86844a11d918c8b1c48c71f15e9a932fd571 + md5: 475018b8e0b8720c985a185427f5bf13 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 250005 + timestamp: 1697487236819 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + sha256: 66632aeef5b74e15746161db8fa8b5150a191ab05823d7d2f1587bdf96674c7b + md5: 770c654e0d5bfa3aa1e6ac5440815cda + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 223231 + timestamp: 1697485732214 +- kind: conda + name: oniguruma + version: 6.9.9 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed + md5: 77dab674d16c1525ebe65e67de30de0d + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 246869 + timestamp: 1697485543293 - kind: conda name: openssl version: 3.3.2 @@ -2585,19 +3578,95 @@ packages: - pkg:pypi/packaging?source=hash-mapping size: 50290 timestamp: 1718189540074 -- kind: pypi +- kind: conda name: pathspec version: 0.12.1 - url: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - sha256: a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 - requires_python: '>=3.8' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d + md5: 17064acba08d3686f1135b5ec1b32b12 + depends: + - python >=3.7 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/pathspec?source=hash-mapping + size: 41173 + timestamp: 1702250135032 +- kind: conda + name: pcre2 + version: '10.44' + build: h070dd5b_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + sha256: e9f4b912e48514771d477f2ee955f59d4ff4ef799c3d4d16e4d0f335ce91df67 + md5: 94022de9682cb1a0bb18a99cbc3541b3 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 884590 + timestamp: 1723488793100 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 952308 + timestamp: 1723488734144 +- kind: conda name: pexpect version: 4.9.0 - url: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - sha256: 7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 - requires_dist: - - ptyprocess>=0.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pip + version: '24.2' + build: pyh8b19718_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + sha256: d820e5358bcb117fa6286e55d4550c60b0332443df62121df839eab2d11c890b + md5: 6c78fbb8ddfd64bcb55b5cbafd2d2c43 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + size: 1237976 + timestamp: 1724954490262 - kind: conda name: pip version: '24.2' @@ -2618,23 +3687,23 @@ packages: - pkg:pypi/pip?source=hash-mapping size: 1237976 timestamp: 1724954490262 -- kind: pypi +- kind: conda name: platformdirs version: 4.3.6 - url: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - sha256: 73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb - requires_dist: - - furo>=2024.8.6 ; extra == 'docs' - - proselint>=0.14 ; extra == 'docs' - - sphinx-autodoc-typehints>=2.4 ; extra == 'docs' - - sphinx>=8.0.2 ; extra == 'docs' - - appdirs==1.4.4 ; extra == 'test' - - covdefaults>=2.3 ; extra == 'test' - - pytest-cov>=5 ; extra == 'test' - - pytest-mock>=3.14 ; extra == 'test' - - pytest>=8.3.2 ; extra == 'test' - - mypy>=1.11.2 ; extra == 'type' - requires_python: '>=3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 20625 + timestamp: 1726613611845 - kind: pypi name: playwright version: 1.48.0 @@ -2758,17 +3827,39 @@ packages: purls: [] size: 3328424 timestamp: 1728326042036 -- kind: pypi +- kind: conda name: ptyprocess version: 0.7.0 - url: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - sha256: 4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 -- kind: pypi + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 16546 + timestamp: 1609419417991 +- kind: conda name: pycparser version: '2.22' - url: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl - sha256: c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc - requires_python: '>=3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=hash-mapping + size: 105098 + timestamp: 1711811634025 - kind: pypi name: pyee version: 12.0.0 @@ -2798,14 +3889,23 @@ packages: - pytest-asyncio ; python_full_version >= '3.4' and extra == 'dev' - pytest-trio ; python_full_version >= '3.7' and extra == 'dev' requires_python: '>=3.8' -- kind: pypi +- kind: conda name: pygments version: 2.18.0 - url: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - sha256: b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a - requires_dist: - - colorama>=0.4.6 ; extra == 'windows-terminal' - requires_python: '>=3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 879295 + timestamp: 1714846885370 - kind: pypi name: pyodide-py version: 0.26.3 @@ -2989,12 +4089,88 @@ packages: purls: [] size: 15987537 timestamp: 1728057382072 -- kind: pypi +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + sha256: 5ccdad9981753cc4a2d126e356673a21c0cd5b34e209cb8d476a3947d4ad9b39 + md5: 62b20f305498284a07dc6c45fd0e5c87 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6329 + timestamp: 1723823366253 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6278 + timestamp: 1723823099686 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + sha256: 9486662af81a219e96d343449eff242f38d7c5128ced5ce5acf85857265058d6 + md5: e8681f534453af7afab4cd2bc1423eec + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6730 + timestamp: 1723823139725 +- kind: conda name: pywin32-ctypes version: 0.2.3 - url: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl - sha256: 8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 - requires_python: '>=3.6' + build: py312h2e8e312_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + sha256: 3e3b97740b4ec2f54debf7bfdbaa9a81a7aabd4549051b926de91d05304c4948 + md5: c5f1cb65c56ec74687801960f8a31eb5 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pywin32-ctypes?source=hash-mapping + size: 57449 + timestamp: 1727282288065 - kind: conda name: readline version: '8.2' @@ -3045,26 +4221,68 @@ packages: purls: [] size: 250351 timestamp: 1679532511311 -- kind: pypi +- kind: conda name: rich version: 13.9.3 - url: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl - sha256: 9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283 - requires_dist: - - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' - - markdown-it-py>=2.2.0 - - pygments>=2.13.0,<3.0.0 - - typing-extensions>=4.0.0,<5.0 ; python_full_version < '3.11' - requires_python: '>=3.8.0' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + sha256: ec2a69babe41085a5bcec4ef80b2d5bade2ca399d971f57894dfb96cf59a18d1 + md5: 50dd5529812447e2b4e2a5dd6a6f1655 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rich?source=hash-mapping + size: 185320 + timestamp: 1729623039134 +- kind: conda name: secretstorage version: 3.3.3 - url: https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl - sha256: f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99 - requires_dist: - - cryptography>=2.0 - - jeepney>=0.6 - requires_python: '>=3.6' + build: py312h7900ff3_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + sha256: c6d5d0bc7fb6cbfa3b8be8f2399a3c1308b3392a4e20bd1a0f29a828fda5ab20 + md5: 4840da9db2808db946a0d979603c6de4 + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31601 + timestamp: 1725915741329 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h8025657_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + sha256: fd6bc45ba0c6bb097ad98037ad8d2ddf2449f28c2eedf57dfff54eeceefe90c6 + md5: 4ae02e3717828f5e92dfae068845afdd + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31394 + timestamp: 1725917363210 - kind: pypi name: selenium version: 4.25.0 @@ -3078,6 +4296,21 @@ packages: - typing-extensions~=4.9 - websocket-client~=1.8 requires_python: '>=3.8' +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 777462 + timestamp: 1727249510532 - kind: conda name: setuptools version: 75.1.0 @@ -3095,18 +4328,40 @@ packages: - pkg:pypi/setuptools?source=hash-mapping size: 777462 timestamp: 1727249510532 -- kind: pypi +- kind: conda name: shellingham version: 1.5.4 - url: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - sha256: 7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 - requires_python: '>=3.7' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/shellingham?source=hash-mapping + size: 14568 + timestamp: 1698144516278 +- kind: conda name: sniffio version: 1.3.1 - url: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - sha256: 2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 - requires_python: '>=3.7' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping + size: 15064 + timestamp: 1708953086199 - kind: pypi name: sortedcontainers version: 2.4.0 @@ -3202,18 +4457,40 @@ packages: - pkg:pypi/tomli?source=hash-mapping size: 18203 timestamp: 1727974767524 -- kind: pypi +- kind: conda name: tomli-w version: 1.1.0 - url: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl - sha256: 1403179c78193e3184bfaade390ddbd071cba48a32a2e62ba11aae47490c63f7 - requires_python: '>=3.9' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + sha256: 25b88bb2c4e79be642d8e5b5738781404055cd596403a20511e6fa30f0c71585 + md5: 2c5eb5b3a0fd2c4787d8162f57da2a20 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli-w?source=hash-mapping + size: 12323 + timestamp: 1728405537678 +- kind: conda name: tomlkit version: 0.13.2 - url: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl - sha256: 7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde - requires_python: '>=3.8' + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + sha256: 2ccfe8dafdc1f1af944bca6bdf28fa97b5fa6125d84b8895a4e918a020853c12 + md5: 0062a5f3347733f67b0f33ca48cc21dd + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomlkit?source=hash-mapping + size: 37279 + timestamp: 1723631592742 - kind: pypi name: trio version: 0.27.0 @@ -3238,17 +4515,40 @@ packages: - wsproto>=0.14 - exceptiongroup ; python_full_version < '3.11' requires_python: '>=3.7' -- kind: pypi +- kind: conda name: trove-classifiers version: 2024.10.21.16 - url: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl - sha256: 0fb11f1e995a757807a8ef1c03829fbd4998d817319abcef1f33165750f103be -- kind: pypi - name: typing-extensions + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + sha256: 591e4ffdc95660b9e596c15b65cad35a70b36235f02dbd089ccc198dd5af0e71 + md5: 501f6d3288160a31d99a2f1321e77393 + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/trove-classifiers?source=hash-mapping + size: 18429 + timestamp: 1729552033760 +- kind: conda + name: typing_extensions version: 4.12.2 - url: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl - sha256: 04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d - requires_python: '>=3.8' + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 39888 + timestamp: 1717802653893 - kind: conda name: tzdata version: 2024b @@ -3289,38 +4589,92 @@ packages: - pysocks!=1.5.7,<2.0,>=1.5.6 ; extra == 'socks' - zstandard>=0.18.0 ; extra == 'zstd' requires_python: '>=3.8' -- kind: pypi +- kind: conda name: userpath - version: 1.9.2 - url: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl - sha256: 2cbf01a23d655a1ff8fc166dfb78da1b641d1ceabf0fe5f970767d380b14e89d - requires_dist: + version: 1.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + sha256: c8cbddd625340e1b00b53bafabc764526ee85f7ddb91018424bab0eea057796d + md5: 5bf074c9253a3bf914becfc50757406f + depends: - click - requires_python: '>=3.7' -- kind: pypi + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/userpath?source=hash-mapping + size: 17423 + timestamp: 1632758637093 +- kind: conda name: uv version: 0.4.25 - url: https://files.pythonhosted.org/packages/04/e9/c00d2bb4a286b13fad0f06488ea9cbe9e76d0efcd81e7a907f72195d5b83/uv-0.4.25-py3-none-win_amd64.whl - sha256: be2a4fc4fcade9ea5e67e51738c95644360d6e59b6394b74fc579fb617f902f7 - requires_python: '>=3.8' -- kind: pypi + build: h0f3a69f_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + sha256: 66ec8fc80cebbabef8a43a8a420f6540399200dcc0c9195db0bdda2836eee7be + md5: f820dec118406e896be62db8c53151ad + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 9403871 + timestamp: 1729526779016 +- kind: conda name: uv version: 0.4.25 - url: https://files.pythonhosted.org/packages/0d/05/b97fb8c828a070e8291826922b2712d1146b11563b4860bc9ba80f5635d1/uv-0.4.25-py3-none-manylinux_2_28_aarch64.whl - sha256: e02afb0f6d4b58718347f7d7cfa5a801e985ce42181ba971ed85ef149f6658ca - requires_python: '>=3.8' -- kind: pypi + build: h2016286_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + sha256: e871051605de94afdec425d66bd06c047e5425ebb5e264c731b032e13f08f971 + md5: 8c51a22c12f76e66a96371e066952ba7 + depends: + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 8821575 + timestamp: 1729527016183 +- kind: conda name: uv version: 0.4.25 - url: https://files.pythonhosted.org/packages/e8/c9/2f924bb29bd53c51b839c1c6126bd2cf4c451d4a7d8f34be078f9e31c57e/uv-0.4.25-py3-none-macosx_11_0_arm64.whl - sha256: 18100f0f36419a154306ed6211e3490bf18384cdf3f1a0950848bf64b62fa251 - requires_python: '>=3.8' -- kind: pypi + build: h41fe3af_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + sha256: 365063aa057bdb0f755449bb1f9490462c191109071a4ebb6b9648587558109e + md5: f736f9177b89edfccfe67650cbd05839 + depends: + - __osx >=11.0 + - libcxx >=17 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR MIT + purls: [] + size: 8475727 + timestamp: 1729527780770 +- kind: conda name: uv version: 0.4.25 - url: https://files.pythonhosted.org/packages/fa/98/ba1cb7dd2aa639a064a9e49721e08f12a3424456d60dde1327e7c6437930/uv-0.4.25-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - sha256: a7022a71ff63a3838796f40e954b76bf7820fc27e96fe002c537e75ff8e34f1d - requires_python: '>=3.8' + build: ha08ef0e_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda + sha256: 74ae665e93b8ed325ea30864c2d341ee57c1c4878dba3bf2781828b1be58031d + md5: 2162d0190d22bbf556365c076f60739c + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 OR MIT + purls: [] + size: 10356663 + timestamp: 1729527565706 - kind: conda name: vc version: '14.3' @@ -3357,36 +4711,26 @@ packages: purls: [] size: 750719 timestamp: 1728401055788 -- kind: pypi +- kind: conda name: virtualenv version: 20.27.0 - url: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl - sha256: 44a72c29cceb0ee08f300b314848c86e57bf8d1f13107a5e671fb9274138d655 - requires_dist: - - distlib<1,>=0.3.7 - - filelock<4,>=3.12.2 - - importlib-metadata>=6.6 ; python_full_version < '3.8' - - platformdirs<5,>=3.9.1 - - furo>=2023.7.26 ; extra == 'docs' - - proselint>=0.13 ; extra == 'docs' - - sphinx!=7.3,>=7.1.2 ; extra == 'docs' - - sphinx-argparse>=0.4 ; extra == 'docs' - - sphinxcontrib-towncrier>=0.2.1a0 ; extra == 'docs' - - towncrier>=23.6 ; extra == 'docs' - - covdefaults>=2.3 ; extra == 'test' - - coverage-enable-subprocess>=1 ; extra == 'test' - - coverage>=7.2.7 ; extra == 'test' - - flaky>=3.7 ; extra == 'test' - - packaging>=23.1 ; extra == 'test' - - pytest-env>=0.8.2 ; extra == 'test' - - pytest-freezer>=0.4.8 ; (python_full_version >= '3.13' and platform_python_implementation == 'CPython' and sys_platform == 'win32' and extra == 'test') or (platform_python_implementation == 'PyPy' and extra == 'test') - - pytest-mock>=3.11.1 ; extra == 'test' - - pytest-randomly>=3.12 ; extra == 'test' - - pytest-timeout>=2.1 ; extra == 'test' - - pytest>=7.4 ; extra == 'test' - - setuptools>=68 ; extra == 'test' - - time-machine>=2.10 ; platform_python_implementation == 'CPython' and extra == 'test' - requires_python: '>=3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + sha256: 18bae5ff9f02793ca56d295f0a5f1d4443623ee3be09a6805eb7d4b18245968c + md5: a6ed1227ba6ec37cfc2b25e6512f729f + depends: + - distlib <1,>=0.3.7 + - filelock <4,>=3.12.2 + - platformdirs <5,>=3.9.1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/virtualenv?source=hash-mapping + size: 2952166 + timestamp: 1729243861344 - kind: conda name: vs2015_runtime version: 14.40.33810 @@ -3468,6 +4812,21 @@ packages: - wsaccel ; extra == 'optional' - websockets ; extra == 'test' requires_python: '>=3.8' +- kind: conda + name: wheel + version: 0.44.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 58585 + timestamp: 1722797131787 - kind: conda name: wheel version: 0.44.0 @@ -3548,6 +4907,23 @@ packages: purls: [] size: 440555 timestamp: 1660348056328 +- kind: conda + name: zipp + version: 3.20.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 21409 + timestamp: 1726248679175 - kind: conda name: zlib version: 1.3.1 @@ -3600,39 +4976,164 @@ packages: purls: [] size: 92286 timestamp: 1727963153079 -- kind: pypi +- kind: conda name: zstandard version: 0.23.0 - url: https://files.pythonhosted.org/packages/26/af/36d89aae0c1f95a0a98e50711bc5d92c144939efc1f81a2fcd3e78d7f4c1/zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - sha256: b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1 - requires_dist: - - cffi>=1.11 ; platform_python_implementation == 'PyPy' - - cffi>=1.11 ; extra == 'cffi' - requires_python: '>=3.8' -- kind: pypi + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 330788 + timestamp: 1725305806565 +- kind: conda name: zstandard version: 0.23.0 - url: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: 1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8 - requires_dist: - - cffi>=1.11 ; platform_python_implementation == 'PyPy' - - cffi>=1.11 ; extra == 'cffi' - requires_python: '>=3.8' -- kind: pypi + build: py312h7606c53_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + sha256: 3e0c718aa18dcac7f080844dbe0aea41a9cea75083019ce02e8a784926239826 + md5: a92cc3435b2fd6f51463f5a4db5c50b1 + depends: + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 320624 + timestamp: 1725305934189 +- kind: conda name: zstandard version: 0.23.0 - url: https://files.pythonhosted.org/packages/75/37/872d74bd7739639c4553bf94c84af7d54d8211b626b352bc57f0fd8d1e3f/zstandard-0.23.0-cp312-cp312-win_amd64.whl - sha256: 64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b - requires_dist: - - cffi>=1.11 ; platform_python_implementation == 'PyPy' - - cffi>=1.11 ; extra == 'cffi' - requires_python: '>=3.8' -- kind: pypi + build: py312hb698573_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + sha256: 2681c2a249752bdc7978e59ee2f34fcdfcbfda80029b84b8e5fec8dbc9e3af25 + md5: ffcb8e97e62af42075e0e5f46bb9856e + depends: + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 392496 + timestamp: 1725305808244 +- kind: conda name: zstandard version: 0.23.0 - url: https://files.pythonhosted.org/packages/fc/79/edeb217c57fe1bf16d890aa91a1c2c96b28c07b46afed54a5dcf310c3f6f/zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - sha256: 72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373 - requires_dist: - - cffi>=1.11 ; platform_python_implementation == 'PyPy' - - cffi>=1.11 ; extra == 'cffi' - requires_python: '>=3.8' + build: py312hef9b889_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b + md5: 8b7069e9792ee4e5b4919a7a306d2e67 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 419552 + timestamp: 1725305670210 +- kind: conda + name: zstd + version: 1.5.6 + build: h02f22dd_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + sha256: 484f9d0722c77685ae379fbff3ccd662af9ead7e59eb39cd6d0c677cdf25ff6c + md5: be8d5f8cf21aed237b8b182ea86b3dd6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 539937 + timestamp: 1714723130243 +- kind: conda + name: zstd + version: 1.5.6 + build: h0ea2cb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + md5: 9a17230f95733c04dc40a2b1e5491d74 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 349143 + timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 554846 + timestamp: 1714722996770 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 405089 + timestamp: 1714723101397 diff --git a/packages/compare-images/pixi.toml b/packages/compare-images/pixi.toml index b5a9ea124..20acd4a2d 100644 --- a/packages/compare-images/pixi.toml +++ b/packages/compare-images/pixi.toml @@ -11,13 +11,44 @@ version = "0.1.0" [dependencies] python = "3.12.*" pnpm = ">=9.12.1,<10" +hatch = ">=1.13.0,<2" +pip = ">=24.2,<25" + +[target.win-64.dependencies] +m2w64-jq = ">=1.6.0,<2" + +[target.unix.dependencies] +jq = ">=1.7.1,<2" + +[tasks.version-sync-typescript] +cmd = '''version=$(cat package.json | jq .version) && + jq ".version = $version" typescript/package.json > typescript/package.json.tmp && + mv typescript/package.json.tmp typescript/package.json''' + +[tasks.version-sync-python-wasi] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + echo "version is $version" && + hatch version $version''' +cwd = "python/itkwasm-compare-images-wasi" + +[tasks.version-sync-python-emscripten] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-compare-images-emscripten" + +[tasks.version-sync-python-dispatch] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-compare-images" + +[tasks.version-sync] +depends-on = ["version-sync-typescript", "version-sync-python-wasi", "version-sync-python-emscripten", "version-sync-python-dispatch"] +description = "Synchronize package versions" [feature.python.dependencies] pytest = ">=8.3.3,<9" -pip = ">=24.2,<25" [feature.python.pypi-dependencies] -hatch = ">=1.13.0, <2" itkwasm-compare-images-wasi = { path = "python/itkwasm-compare-images-wasi", editable = true } itkwasm-compare-images = { path = "python/itkwasm-compare-images", editable = true } pyodide-py = ">=0.26.3, <0.27" @@ -77,7 +108,6 @@ depends-on = ["download-pyodide"] description = "Serve itkwasm-compare-images for development" [feature.python.tasks.test-python] -cmd = "echo 'Testing all Python packages'" depends-on = ["test-wasi", "test-emscripten", "test-dispatch"] description = "Run tests for all Python packages" diff --git a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py index 6c235c596..98886d260 100644 --- a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py @@ -1 +1 @@ -__version__ = "5.2.0" +__version__ = "5.2.1" diff --git a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py index 6c235c596..98886d260 100644 --- a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py @@ -1 +1 @@ -__version__ = "5.2.0" +__version__ = "5.2.1" diff --git a/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py b/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py index 6c235c596..98886d260 100644 --- a/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py @@ -1 +1 @@ -__version__ = "5.2.0" +__version__ = "5.2.1" diff --git a/packages/compare-images/typescript/package.json b/packages/compare-images/typescript/package.json index 8aceb5d5b..2fccecc6c 100644 --- a/packages/compare-images/typescript/package.json +++ b/packages/compare-images/typescript/package.json @@ -1,7 +1,6 @@ { "name": "@itk-wasm/compare-images", - "version": "5.2.0", - "packageManager": "pnpm@9.6.0", + "version": "5.2.1", "description": "Compare images with a tolerance for regression testing.", "type": "module", "module": "./dist/index.js", From fe45467c9a41a54bc1b921e2e5a4016812578dec Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 14:17:48 -0400 Subject: [PATCH 12/39] build(compare-images): add pixi publish tasks --- packages/compare-images/.npmrc | 1 + packages/compare-images/pixi.toml | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 packages/compare-images/.npmrc diff --git a/packages/compare-images/.npmrc b/packages/compare-images/.npmrc new file mode 100644 index 000000000..a4be22c92 --- /dev/null +++ b/packages/compare-images/.npmrc @@ -0,0 +1 @@ +git-checks=false diff --git a/packages/compare-images/pixi.toml b/packages/compare-images/pixi.toml index 20acd4a2d..74e8da75c 100644 --- a/packages/compare-images/pixi.toml +++ b/packages/compare-images/pixi.toml @@ -45,6 +45,31 @@ cwd = "python/itkwasm-compare-images" depends-on = ["version-sync-typescript", "version-sync-python-wasi", "version-sync-python-emscripten", "version-sync-python-dispatch"] description = "Synchronize package versions" +[tasks.publish-typescript] +cmd = "pnpm publish --filter \"{typescript}\"" + +[tasks.publish-python-user-check] +cmd = "if [ -n \"$HATCH_INDEX_USER\"]; then echo \"HATCH_INDEX_USER is set\"; else echo \"HATCH_INDEX_USER is not set\"; exit 1; fi" + +[tasks.publish-python-wasi] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-compare-images-wasi" + +[tasks.publish-python-emscripten] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-compare-images-emscripten" + +[tasks.publish-python-dispatch] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-compare-images" + +[tasks.publish] +depends-on = ["publish-typescript", "publish-python-wasi", "publish-python-emscripten", "publish-python-dispatch"] +description = "Synchronize package versions" + [feature.python.dependencies] pytest = ">=8.3.3,<9" From 51982f2658b1ea3e3ca94b4f098cd4e330935ba4 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 14:19:07 -0400 Subject: [PATCH 13/39] build(compare-images): remove invalid python publish scripts Replaced by pixi. --- packages/compare-images/package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/compare-images/package.json b/packages/compare-images/package.json index f6a0e26b3..0a762feb4 100644 --- a/packages/compare-images/package.json +++ b/packages/compare-images/package.json @@ -27,8 +27,6 @@ "bindgen:python": "itk-wasm pnpm-script bindgen:python", "build:gen:typescript": "itk-wasm pnpm-script build:gen:typescript", "build:gen:python": "pnpm build:wasi && pnpm bindgen:python", - "build:python:versionSync": "itk-wasm pnpm-script build:python:versionSync", - "publish:python": "itk-wasm pnpm-script publish:python", "test": "pnpm test:data:download && pnpm build:gen:python && pnpm test:python", "test:data:download": "dam download test/data test/data.tar.gz bafybeiafli6egtmkcgany65po64w67hpqnmgwr5utqo6ycbbz7k5l33llu https://github.com/InsightSoftwareConsortium/ITK-Wasm/releases/download/itk-wasm-v1.0.0-b.171/compare-images-test-data.tar.gz", "test:data:pack": "dam pack test/data test/data.tar.gz", From 1c45d5a5d30d4cddfadda18b7d45820115988ee8 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 14:19:42 -0400 Subject: [PATCH 14/39] chore(compra-images): bump version to 5.2.2 --- packages/compare-images/package.json | 2 +- .../itkwasm_compare_images_emscripten/_version.py | 2 +- .../itkwasm_compare_images_wasi/_version.py | 2 +- .../itkwasm-compare-images/itkwasm_compare_images/_version.py | 2 +- packages/compare-images/typescript/package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/compare-images/package.json b/packages/compare-images/package.json index 0a762feb4..a09d33805 100644 --- a/packages/compare-images/package.json +++ b/packages/compare-images/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compare-images-build", - "version": "5.2.1", + "version": "5.2.2", "private": true, "description": "scripts to generate @itk-wasm/compare-stringify itk-wasm artifacts.", "type": "module", diff --git a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py index 98886d260..15cf13501 100644 --- a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py @@ -1 +1 @@ -__version__ = "5.2.1" +__version__ = "5.2.2" diff --git a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py index 98886d260..15cf13501 100644 --- a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py @@ -1 +1 @@ -__version__ = "5.2.1" +__version__ = "5.2.2" diff --git a/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py b/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py index 98886d260..15cf13501 100644 --- a/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py @@ -1 +1 @@ -__version__ = "5.2.1" +__version__ = "5.2.2" diff --git a/packages/compare-images/typescript/package.json b/packages/compare-images/typescript/package.json index 2fccecc6c..aba858910 100644 --- a/packages/compare-images/typescript/package.json +++ b/packages/compare-images/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compare-images", - "version": "5.2.1", + "version": "5.2.2", "description": "Compare images with a tolerance for regression testing.", "type": "module", "module": "./dist/index.js", From 935cb9da3e8af717470ec039e4a37c2b113b3ea4 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 15:58:46 -0400 Subject: [PATCH 15/39] build(compare-images): download test data before python tests --- packages/compare-images/package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/compare-images/package.json b/packages/compare-images/package.json index a09d33805..d2daf8077 100644 --- a/packages/compare-images/package.json +++ b/packages/compare-images/package.json @@ -2,7 +2,7 @@ "name": "@itk-wasm/compare-images-build", "version": "5.2.2", "private": true, - "description": "scripts to generate @itk-wasm/compare-stringify itk-wasm artifacts.", + "description": "@itk-wasm/compare-stringify build configuration", "type": "module", "itk-wasm": { "emscripten-docker-image": "itkwasm/emscripten:latest", @@ -30,9 +30,9 @@ "test": "pnpm test:data:download && pnpm build:gen:python && pnpm test:python", "test:data:download": "dam download test/data test/data.tar.gz bafybeiafli6egtmkcgany65po64w67hpqnmgwr5utqo6ycbbz7k5l33llu https://github.com/InsightSoftwareConsortium/ITK-Wasm/releases/download/itk-wasm-v1.0.0-b.171/compare-images-test-data.tar.gz", "test:data:pack": "dam pack test/data test/data.tar.gz", - "test:python:wasi": "pixi run test-wasi", - "test:python:emscripten": "pixi run test-emscripten", - "test:python:dispatch": "pixi run test-dispatch", + "test:python:wasi": "pnpm test:data:download && pixi run test-wasi", + "test:python:emscripten": "pnpm test:data:download && pixi run test-emscripten", + "test:python:dispatch": "pnpm test:data:download && pixi run test-dispatch", "test:python": "pixi run test-python" }, "license": "Apache-2.0", From c51cce2260d6ed2d3cad0167b08b947f9a5946e7 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 16:17:08 -0400 Subject: [PATCH 16/39] fix(pnpm-script): always build typescript for build:gen:typescript We need to update the package version.ts, version.js. --- .../itk-wasm/src/cli/pnpm-script.js | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/packages/core/typescript/itk-wasm/src/cli/pnpm-script.js b/packages/core/typescript/itk-wasm/src/cli/pnpm-script.js index d7791c746..4a92a26d3 100644 --- a/packages/core/typescript/itk-wasm/src/cli/pnpm-script.js +++ b/packages/core/typescript/itk-wasm/src/cli/pnpm-script.js @@ -60,12 +60,16 @@ async function pnpmScript(name, extraArgs, options) { ) const micromambaRootPath = path.resolve('micromamba') const environmentFile = path.resolve('environment.yml') - const environmentFileContents = fs.existsSync(environmentFile) ? fs.readFileSync(environmentFile, 'utf8') : null - const environmentName = fs.existsSync(environmentFile) ? environmentFileContents - .split('\n') - .filter((l) => l.includes('name:'))[0] - .split(':')[1] - .trim() : null + const environmentFileContents = fs.existsSync(environmentFile) + ? fs.readFileSync(environmentFile, 'utf8') + : null + const environmentName = fs.existsSync(environmentFile) + ? environmentFileContents + .split('\n') + .filter((l) => l.includes('name:'))[0] + .split(':')[1] + .trim() + : null const pnpmRootCommand = ['root'] const pnpmRootProcess = spawnSync('pnpm', pnpmRootCommand, { @@ -301,20 +305,18 @@ async function pnpmScript(name, extraArgs, options) { 'pnpm', 'bindgen:typescript' ]) - if (!fs.existsSync(path.join(typescriptOutputDir, 'package.json'))) { - pnpmCommand = pnpmCommand.concat([ - '&&', - 'pnpm', - '--filter', - `{${typescriptOutputDir}}`, - 'install', - '&&', - 'pnpm', - '--filter', - `{${typescriptOutputDir}}`, - 'build' - ]) - } + pnpmCommand = pnpmCommand.concat([ + '&&', + 'pnpm', + '--filter', + `{${typescriptOutputDir}}`, + 'install', + '&&', + 'pnpm', + '--filter', + `{${typescriptOutputDir}}`, + 'build' + ]) } break case 'build:gen:python': From d63da801624f9c5a8d71699837ff34e8f3d219b6 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 16:27:08 -0400 Subject: [PATCH 17/39] chore(compare-images): bump version in 5.2.3 --- packages/compare-images/package.json | 2 +- .../itkwasm_compare_images_emscripten/_version.py | 2 +- .../itkwasm_compare_images_emscripten/js_package.py | 2 +- .../itkwasm_compare_images_wasi/_version.py | 2 +- .../itkwasm-compare-images/itkwasm_compare_images/_version.py | 2 +- packages/compare-images/typescript/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/compare-images/package.json b/packages/compare-images/package.json index d2daf8077..7c091599d 100644 --- a/packages/compare-images/package.json +++ b/packages/compare-images/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compare-images-build", - "version": "5.2.2", + "version": "5.2.3", "private": true, "description": "@itk-wasm/compare-stringify build configuration", "type": "module", diff --git a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py index 15cf13501..fd4cdef3e 100644 --- a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py @@ -1 +1 @@ -__version__ = "5.2.2" +__version__ = "5.2.3" diff --git a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py index 0af3cee3e..9c7f00f9d 100644 --- a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py +++ b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIER0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgU3Q9KEEsZSk9Pntmb3IodmFyIHIgaW4gZSlEdChBLHIse2dldDplW3JdLGVudW1lcmFibGU6ITB9KX07dmFyIGJ0PSI1LjIuMCIsUkE9YnQ7dmFyIEZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sZj1GdDt2YXIga3Q9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LHc9a3Q7ZnVuY3Rpb24gUnQoQSxlKXtsZXQgcj1udWxsO3N3aXRjaChBKXtjYXNlIGYuVUludDg6e3I9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDg6e3I9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIGYuVUludDE2OntyPW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIGYuSW50MTY6e3I9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLlVJbnQzMjp7cj1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDMyOntyPW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgZi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnI9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ0ludDY0QXJyYXkoZSk6cj1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIHcuRmxvYXQzMjp7cj1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2Ugdy5GbG9hdDY0OntyPW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7cj1udWxsO2JyZWFrfWNhc2UgbnVsbDp7cj1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHJ9dmFyIE49UnQ7dmFyIFV0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sRj1VdDt2YXIgVUE9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHI9Zi5VSW50OCx0PUYuU2NhbGFyLG49MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9cix0aGlzLnBpeGVsVHlwZT10LHRoaXMuY29tcG9uZW50cz1ufX0sQ2U9VUE7ZnVuY3Rpb24gTnQoQSxlLHIsdCxuKXtBW3QrciplXT1ufXZhciBCZT1OdDt2YXIgTkE9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IENlKXt0aGlzLmltYWdlVHlwZT1lO2xldCByPWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheShyKSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkociksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheShyKnIpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCB0PTA7dDxyO3QrKylCZSh0aGlzLmRpcmVjdGlvbixyLHQsdCwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHIpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LGxlPU5BO2Z1bmN0aW9uIEd0KEEsZSl7bGV0IHI9ey4uLkEuaW1hZ2VUeXBlfTtpZih0eXBlb2YgZTwidSImJnR5cGVvZiBlLnBpeGVsVHlwZTwidSImJihyLnBpeGVsVHlwZT1lLnBpeGVsVHlwZSxlLnBpeGVsVHlwZT09PUYuU2NhbGFyJiZyLmNvbXBvbmVudHMhPT0xKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYXN0IG11bHRpLWNvbXBvbmVudCBpbWFnZSB0byBhIHNjYWxhciBpbWFnZSIpO3R5cGVvZiBlPCJ1IiYmdHlwZW9mIGUuY29tcG9uZW50VHlwZTwidSImJmUuY29tcG9uZW50VHlwZSE9PUEuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUmJihyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlKTtsZXQgdD1uZXcgbGUocik7aWYodC5uYW1lPUEubmFtZSx0Lm9yaWdpbj1BcnJheS5mcm9tKEEub3JpZ2luKSx0LnNwYWNpbmc9QXJyYXkuZnJvbShBLnNwYWNpbmcpLHQuZGlyZWN0aW9uPUEuZGlyZWN0aW9uLnNsaWNlKCksdC5zaXplPUFycmF5LmZyb20oQS5zaXplKSx0Lm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKEEubWV0YWRhdGEpKSkpLEEuZGF0YSE9PW51bGwpaWYodHlwZW9mIGU8InUiJiZ0eXBlb2YgZS5jb21wb25lbnRUeXBlPCJ1IiYmZS5jb21wb25lbnRUeXBlIT09QS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goQS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBmLlVJbnQ4OmNhc2UgZi5JbnQ4OmNhc2UgZi5VSW50MTY6Y2FzZSBmLkludDE2OmNhc2UgZi5VSW50MzI6Y2FzZSBmLkludDMyOmNhc2Ugdy5GbG9hdDMyOmNhc2Ugdy5GbG9hdDY0OnN3aXRjaCh0LmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIGYuVUludDg6dC5kYXRhPW5ldyBVaW50OEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuVUludDE2OnQuZGF0YT1uZXcgVWludDE2QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuSW50MTY6dC5kYXRhPW5ldyBJbnQxNkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDMyOnQuZGF0YT1uZXcgSW50MzJBcnJheShBLmRhdGEpO2JyZWFrO2Nhc2Ugdy5GbG9hdDMyOnQuZGF0YT1uZXcgRmxvYXQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSB3LkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuVUludDY0OnQuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWs7Y2FzZSBmLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQuZGF0YS5sZW5ndGg7bisrKXQuZGF0YVtuXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWt9YnJlYWs7Y2FzZSBmLlVJbnQ2NDpjYXNlIGYuSW50NjQ6c3dpdGNoKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgZi5VSW50ODp0LmRhdGE9bmV3IFVpbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQxNjp0LmRhdGE9bmV3IFVpbnQxNkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgZi5JbnQxNjp0LmRhdGE9bmV3IEludDE2QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgZi5JbnQzMjp0LmRhdGE9bmV3IEludDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSB3LkZsb2F0MzI6dC5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSB3LkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQ2NDp0LmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG49QS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgbihBLmRhdGEubGVuZ3RoKSx0LmRhdGEhPW51bGwmJnQuZGF0YS5zZXQoQS5kYXRhLDApfXJldHVybiB0fXZhciBpQT1HdDt2YXIgTHQ9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybToiVHJhbnNmb3JtIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxkPUx0O3ZhciBFZT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxUdD1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxUQT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksR0E9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLHNBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxRZT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIix4dD17Y2FuSGFuZGxlOkE9PlFlKEEpJiZBW0VlXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOmUscG9ydDI6cn09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiB1ZShBLGUpLFtyLFtyXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCkseEEoQSl9fSxPdD17Y2FuSGFuZGxlOkE9PlFlKEEpJiZzQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBlO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ZT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OmU9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW2UsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sZmU9bmV3IE1hcChbWyJwcm94eSIseHRdLFsidGhyb3ciLE90XV0pO2Z1bmN0aW9uIFB0KEEsZSl7Zm9yKGxldCByIG9mIEEpaWYoZT09PXJ8fHI9PT0iKiJ8fHIgaW5zdGFuY2VvZiBSZWdFeHAmJnIudGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB1ZShBLGU9Z2xvYmFsVGhpcyxyPVsiKiJdKXtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHQobil7aWYoIW58fCFuLmRhdGEpcmV0dXJuO2lmKCFQdChyLG4ub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiAnJHtuLm9yaWdpbn0nIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpvLHR5cGU6aSxwYXRoOkN9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LG4uZGF0YSksbD0obi5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChQKSxCO3RyeXtsZXQgST1DLnNsaWNlKDAsLTEpLnJlZHVjZSgoUSxnKT0+UVtnXSxBKSxhPUMucmVkdWNlKChRLGcpPT5RW2ddLEEpO3N3aXRjaChpKXtjYXNlIkdFVCI6Qj1hO2JyZWFrO2Nhc2UiU0VUIjpJW0Muc2xpY2UoLTEpWzBdXT1QKG4uZGF0YS52YWx1ZSksQj0hMDticmVhaztjYXNlIkFQUExZIjpCPWEuYXBwbHkoSSxsKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBRPW5ldyBhKC4uLmwpO0I9cXQoUSl9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpRLHBvcnQyOmd9PW5ldyBNZXNzYWdlQ2hhbm5lbDt1ZShBLGcpLEI9T0EoUSxbUV0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6Qj12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEkpe0I9e3ZhbHVlOkksW3NBXTowfX1Qcm9taXNlLnJlc29sdmUoQikuY2F0Y2goST0+KHt2YWx1ZTpJLFtzQV06MH0pKS50aGVuKEk9PntsZXRbYSxRXT1DQShJKTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6b30pLFEpLGk9PT0iUkVMRUFTRSImJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHQpLHBlKGUpLEdBIGluIEEmJnR5cGVvZiBBW0dBXT09ImZ1bmN0aW9uIiYmQVtHQV0oKSl9KS5jYXRjaChJPT57bGV0W2EsUV09Q0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtzQV06MH0pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtpZDpvfSksUSl9KX0pLGUuc3RhcnQmJmUuc3RhcnQoKX1mdW5jdGlvbiBKdChBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBwZShBKXtKdChBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIHhBKEEsZSl7cmV0dXJuIExBKEEsW10sZSl9ZnVuY3Rpb24gYUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIGRlKEEpe3JldHVybiBNKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3BlKEEpfSl9dmFyIElBPW5ldyBXZWFrTWFwLGdBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBlPShJQS5nZXQoQSl8fDApLTE7SUEuc2V0KEEsZSksZT09PTAmJmRlKEEpfSk7ZnVuY3Rpb24gTXQoQSxlKXtsZXQgcj0oSUEuZ2V0KGUpfHwwKSsxO0lBLnNldChlLHIpLGdBJiZnQS5yZWdpc3RlcihBLGUsQSl9ZnVuY3Rpb24gSHQoQSl7Z0EmJmdBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gTEEoQSxlPVtdLHI9ZnVuY3Rpb24oKXt9KXtsZXQgdD0hMSxuPW5ldyBQcm94eShyLHtnZXQobyxpKXtpZihhQSh0KSxpPT09VEEpcmV0dXJuKCk9PntIdChuKSxkZShBKSx0PSEwfTtpZihpPT09InRoZW4iKXtpZihlLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pm59O2xldCBDPU0oQSx7dHlwZToiR0VUIixwYXRoOmUubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKFApO3JldHVybiBDLnRoZW4uYmluZChDKX1yZXR1cm4gTEEoQSxbLi4uZSxpXSl9LHNldChvLGksQyl7YUEodCk7bGV0W2wsQl09Q0EoQyk7cmV0dXJuIE0oQSx7dHlwZToiU0VUIixwYXRoOlsuLi5lLGldLm1hcChJPT5JLnRvU3RyaW5nKCkpLHZhbHVlOmx9LEIpLnRoZW4oUCl9LGFwcGx5KG8saSxDKXthQSh0KTtsZXQgbD1lW2UubGVuZ3RoLTFdO2lmKGw9PT1UdClyZXR1cm4gTShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKFApO2lmKGw9PT0iYmluZCIpcmV0dXJuIExBKEEsZS5zbGljZSgwLC0xKSk7bGV0W0IsSV09Y2UoQyk7cmV0dXJuIE0oQSx7dHlwZToiQVBQTFkiLHBhdGg6ZS5tYXAoYT0+YS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Qn0sSSkudGhlbihQKX0sY29uc3RydWN0KG8saSl7YUEodCk7bGV0W0MsbF09Y2UoaSk7cmV0dXJuIE0oQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOmUubWFwKEI9PkIudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkN9LGwpLnRoZW4oUCl9fSk7cmV0dXJuIE10KG4sQSksbn1mdW5jdGlvbiBZdChBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBjZShBKXtsZXQgZT1BLm1hcChDQSk7cmV0dXJuW2UubWFwKHI9PnJbMF0pLFl0KGUubWFwKHI9PnJbMV0pKV19dmFyIG1lPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIE9BKEEsZSl7cmV0dXJuIG1lLnNldChBLGUpLEF9ZnVuY3Rpb24gcXQoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W0VlXTohMH0pfWZ1bmN0aW9uIENBKEEpe2ZvcihsZXRbZSxyXW9mIGZlKWlmKHIuY2FuSGFuZGxlKEEpKXtsZXRbdCxuXT1yLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6ZSx2YWx1ZTp0fSxuXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sbWUuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gUChBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBmZS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIE0oQSxlLHIpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57bGV0IG49S3QoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIG8oaSl7IWkuZGF0YXx8IWkuZGF0YS5pZHx8aS5kYXRhLmlkIT09bnx8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksdChpLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOm59LGUpLHIpfSl9ZnVuY3Rpb24gS3QoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFYoQSxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseShlLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpXdH09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6TUF9PU9iamVjdCxsQT0oQT0+ZT0+e2xldCByPVd0LmNhbGwoZSk7cmV0dXJuIEFbcl18fChBW3JdPXIuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxHPUE9PihBPUEudG9Mb3dlckNhc2UoKSxlPT5sQShlKT09PUEpLGNBPUE9PmU9PnR5cGVvZiBlPT09QSx7aXNBcnJheTpIfT1BcnJheSx6PWNBKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBqdChBKXtyZXR1cm4gQSE9PW51bGwmJiF6KEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIXooQS5jb25zdHJ1Y3RvcikmJmsoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIERlPUcoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gdnQoQSl7bGV0IGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhBKTplPUEmJkEuYnVmZmVyJiZEZShBLmJ1ZmZlciksZX12YXIgX3Q9Y0EoInN0cmluZyIpLGs9Y0EoImZ1bmN0aW9uIiksU2U9Y0EoIm51bWJlciIpLEVBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsVnQ9QT0+QT09PSEwfHxBPT09ITEsQkE9QT0+e2lmKGxBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IGU9TUEoQSk7cmV0dXJuKGU9PT1udWxsfHxlPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0senQ9RygiRGF0ZSIpLFp0PUcoIkZpbGUiKSxYdD1HKCJCbG9iIiksJHQ9RygiRmlsZUxpc3QiKSxBcj1BPT5FQShBKSYmayhBLnBpcGUpLGVyPUE9PntsZXQgZTtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxrKEEuYXBwZW5kKSYmKChlPWxBKEEpKT09PSJmb3JtZGF0YSJ8fGU9PT0ib2JqZWN0IiYmayhBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSx0cj1HKCJVUkxTZWFyY2hQYXJhbXMiKSxycj1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gWihBLGUse2FsbE93bktleXM6cj0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCB0LG47aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEgoQSkpZm9yKHQ9MCxuPUEubGVuZ3RoO3Q8bjt0KyspZS5jYWxsKG51bGwsQVt0XSx0LEEpO2Vsc2V7bGV0IG89cj9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxpPW8ubGVuZ3RoLEM7Zm9yKHQ9MDt0PGk7dCsrKUM9b1t0XSxlLmNhbGwobnVsbCxBW0NdLEMsQSl9fWZ1bmN0aW9uIGJlKEEsZSl7ZT1lLnRvTG93ZXJDYXNlKCk7bGV0IHI9T2JqZWN0LmtleXMoQSksdD1yLmxlbmd0aCxuO2Zvcig7dC0tID4wOylpZihuPXJbdF0sZT09PW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gbjtyZXR1cm4gbnVsbH12YXIgRmU9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxrZT1BPT4heihBKSYmQSE9PUZlO2Z1bmN0aW9uIEpBKCl7bGV0e2Nhc2VsZXNzOkF9PWtlKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHI9KHQsbik9PntsZXQgbz1BJiZiZShlLG4pfHxuO0JBKGVbb10pJiZCQSh0KT9lW29dPUpBKGVbb10sdCk6QkEodCk/ZVtvXT1KQSh7fSx0KTpIKHQpP2Vbb109dC5zbGljZSgpOmVbb109dH07Zm9yKGxldCB0PTAsbj1hcmd1bWVudHMubGVuZ3RoO3Q8bjt0KyspYXJndW1lbnRzW3RdJiZaKGFyZ3VtZW50c1t0XSxyKTtyZXR1cm4gZX12YXIgbnI9KEEsZSxyLHthbGxPd25LZXlzOnR9PXt9KT0+KFooZSwobixvKT0+e3ImJmsobik/QVtvXT1WKG4scik6QVtvXT1ufSx7YWxsT3duS2V5czp0fSksQSksb3I9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxpcj0oQSxlLHIsdCk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHQpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6ZS5wcm90b3R5cGV9KSxyJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHIpfSxhcj0oQSxlLHIsdCk9PntsZXQgbixvLGksQz17fTtpZihlPWV8fHt9LEE9PW51bGwpcmV0dXJuIGU7ZG97Zm9yKG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksbz1uLmxlbmd0aDtvLS0gPjA7KWk9bltvXSwoIXR8fHQoaSxBLGUpKSYmIUNbaV0mJihlW2ldPUFbaV0sQ1tpXT0hMCk7QT1yIT09ITEmJk1BKEEpfXdoaWxlKEEmJighcnx8cihBLGUpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBlfSxzcj0oQSxlLHIpPT57QT1TdHJpbmcoQSksKHI9PT12b2lkIDB8fHI+QS5sZW5ndGgpJiYocj1BLmxlbmd0aCksci09ZS5sZW5ndGg7bGV0IHQ9QS5pbmRleE9mKGUscik7cmV0dXJuIHQhPT0tMSYmdD09PXJ9LElyPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihIKEEpKXJldHVybiBBO2xldCBlPUEubGVuZ3RoO2lmKCFTZShlKSlyZXR1cm4gbnVsbDtsZXQgcj1uZXcgQXJyYXkoZSk7Zm9yKDtlLS0gPjA7KXJbZV09QVtlXTtyZXR1cm4gcn0sZ3I9KEE9PmU9PkEmJmUgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJk1BKFVpbnQ4QXJyYXkpKSxDcj0oQSxlKT0+e2xldCB0PShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksbjtmb3IoOyhuPXQubmV4dCgpKSYmIW4uZG9uZTspe2xldCBvPW4udmFsdWU7ZS5jYWxsKEEsb1swXSxvWzFdKX19LEJyPShBLGUpPT57bGV0IHIsdD1bXTtmb3IoOyhyPUEuZXhlYyhlKSkhPT1udWxsOyl0LnB1c2gocik7cmV0dXJuIHR9LGxyPUcoIkhUTUxGb3JtRWxlbWVudCIpLGNyPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpK259KSxoZT0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihlLHIpPT5BLmNhbGwoZSxyKSkoT2JqZWN0LnByb3RvdHlwZSksRXI9RygiUmVnRXhwIiksUmU9KEEsZSk9PntsZXQgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSx0PXt9O1oociwobixvKT0+e2xldCBpOyhpPWUobixvLEEpKSE9PSExJiYodFtvXT1pfHxuKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsdCl9LFFyPUE9PntSZShBLChlLHIpPT57aWYoayhBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHIpIT09LTEpcmV0dXJuITE7bGV0IHQ9QVtyXTtpZihrKHQpKXtpZihlLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIGUpe2Uud3JpdGFibGU9ITE7cmV0dXJufWUuc2V0fHwoZS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrcisiJyIpfSl9fSl9LGZyPShBLGUpPT57bGV0IHI9e30sdD1uPT57bi5mb3JFYWNoKG89PntyW29dPSEwfSl9O3JldHVybiBIKEEpP3QoQSk6dChTdHJpbmcoQSkuc3BsaXQoZSkpLHJ9LHVyPSgpPT57fSxwcj0oQSxlKT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6ZSksUEE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix3ZT0iMDEyMzQ1Njc4OSIsVWU9e0RJR0lUOndlLEFMUEhBOlBBLEFMUEhBX0RJR0lUOlBBK1BBLnRvVXBwZXJDYXNlKCkrd2V9LGRyPShBPTE2LGU9VWUuQUxQSEFfRElHSVQpPT57bGV0IHI9IiIse2xlbmd0aDp0fT1lO2Zvcig7QS0tOylyKz1lW01hdGgucmFuZG9tKCkqdHwwXTtyZXR1cm4gcn07ZnVuY3Rpb24gbXIoQSl7cmV0dXJuISEoQSYmayhBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIHlyPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHI9KHQsbik9PntpZihFQSh0KSl7aWYoZS5pbmRleE9mKHQpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gdCkpe2Vbbl09dDtsZXQgbz1IKHQpP1tdOnt9O3JldHVybiBaKHQsKGksQyk9PntsZXQgbD1yKGksbisxKTsheihsKSYmKG9bQ109bCl9KSxlW25dPXZvaWQgMCxvfX1yZXR1cm4gdH07cmV0dXJuIHIoQSwwKX0saHI9RygiQXN5bmNGdW5jdGlvbiIpLHdyPUE9PkEmJihFQShBKXx8ayhBKSkmJmsoQS50aGVuKSYmayhBLmNhdGNoKSxzPXtpc0FycmF5OkgsaXNBcnJheUJ1ZmZlcjpEZSxpc0J1ZmZlcjpqdCxpc0Zvcm1EYXRhOmVyLGlzQXJyYXlCdWZmZXJWaWV3OnZ0LGlzU3RyaW5nOl90LGlzTnVtYmVyOlNlLGlzQm9vbGVhbjpWdCxpc09iamVjdDpFQSxpc1BsYWluT2JqZWN0OkJBLGlzVW5kZWZpbmVkOnosaXNEYXRlOnp0LGlzRmlsZTpadCxpc0Jsb2I6WHQsaXNSZWdFeHA6RXIsaXNGdW5jdGlvbjprLGlzU3RyZWFtOkFyLGlzVVJMU2VhcmNoUGFyYW1zOnRyLGlzVHlwZWRBcnJheTpncixpc0ZpbGVMaXN0OiR0LGZvckVhY2g6WixtZXJnZTpKQSxleHRlbmQ6bnIsdHJpbTpycixzdHJpcEJPTTpvcixpbmhlcml0czppcix0b0ZsYXRPYmplY3Q6YXIsa2luZE9mOmxBLGtpbmRPZlRlc3Q6RyxlbmRzV2l0aDpzcix0b0FycmF5OklyLGZvckVhY2hFbnRyeTpDcixtYXRjaEFsbDpCcixpc0hUTUxGb3JtOmxyLGhhc093blByb3BlcnR5OmhlLGhhc093blByb3A6aGUscmVkdWNlRGVzY3JpcHRvcnM6UmUsZnJlZXplTWV0aG9kczpRcix0b09iamVjdFNldDpmcix0b0NhbWVsQ2FzZTpjcixub29wOnVyLHRvRmluaXRlTnVtYmVyOnByLGZpbmRLZXk6YmUsZ2xvYmFsOkZlLGlzQ29udGV4dERlZmluZWQ6a2UsQUxQSEFCRVQ6VWUsZ2VuZXJhdGVTdHJpbmc6ZHIsaXNTcGVjQ29tcGxpYW50Rm9ybTptcix0b0pTT05PYmplY3Q6eXIsaXNBc3luY0ZuOmhyLGlzVGhlbmFibGU6d3J9O2Z1bmN0aW9uIFkoQSxlLHIsdCxuKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGUmJih0aGlzLmNvZGU9ZSksciYmKHRoaXMuY29uZmlnPXIpLHQmJih0aGlzLnJlcXVlc3Q9dCksbiYmKHRoaXMucmVzcG9uc2U9bil9cy5pbmhlcml0cyhZLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6cy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgTmU9WS5wcm90b3R5cGUsR2U9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57R2VbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWSxHZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE5lLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO1kuZnJvbT0oQSxlLHIsdCxuLG8pPT57bGV0IGk9T2JqZWN0LmNyZWF0ZShOZSk7cmV0dXJuIHMudG9GbGF0T2JqZWN0KEEsaSxmdW5jdGlvbihsKXtyZXR1cm4gbCE9PUVycm9yLnByb3RvdHlwZX0sQz0+QyE9PSJpc0F4aW9zRXJyb3IiKSxZLmNhbGwoaSxBLm1lc3NhZ2UsZSxyLHQsbiksaS5jYXVzZT1BLGkubmFtZT1BLm5hbWUsbyYmT2JqZWN0LmFzc2lnbihpLG8pLGl9O3ZhciBwPVk7dmFyIFFBPW51bGw7ZnVuY3Rpb24gSEEoQSl7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChBKXx8cy5pc0FycmF5KEEpfWZ1bmN0aW9uIFRlKEEpe3JldHVybiBzLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIExlKEEsZSxyKXtyZXR1cm4gQT9BLmNvbmNhdChlKS5tYXAoZnVuY3Rpb24obixvKXtyZXR1cm4gbj1UZShuKSwhciYmbz8iWyIrbisiXSI6bn0pLmpvaW4ocj8iLiI6IiIpOmV9ZnVuY3Rpb24gRHIoQSl7cmV0dXJuIHMuaXNBcnJheShBKSYmIUEuc29tZShIQSl9dmFyIFNyPXMudG9GbGF0T2JqZWN0KHMse30sbnVsbCxmdW5jdGlvbihlKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoZSl9KTtmdW5jdGlvbiBicihBLGUscil7aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ZT1lfHxuZXcoUUF8fEZvcm1EYXRhKSxyPXMudG9GbGF0T2JqZWN0KHIse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihFLHUpe3JldHVybiFzLmlzVW5kZWZpbmVkKHVbRV0pfSk7bGV0IHQ9ci5tZXRhVG9rZW5zLG49ci52aXNpdG9yfHxJLG89ci5kb3RzLGk9ci5pbmRleGVzLGw9KHIuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmcy5pc1NwZWNDb21wbGlhbnRGb3JtKGUpO2lmKCFzLmlzRnVuY3Rpb24obikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBCKGMpe2lmKGM9PT1udWxsKXJldHVybiIiO2lmKHMuaXNEYXRlKGMpKXJldHVybiBjLnRvSVNPU3RyaW5nKCk7aWYoIWwmJnMuaXNCbG9iKGMpKXRocm93IG5ldyBwKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBzLmlzQXJyYXlCdWZmZXIoYyl8fHMuaXNUeXBlZEFycmF5KGMpP2wmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtjXSk6QnVmZmVyLmZyb20oYyk6Y31mdW5jdGlvbiBJKGMsRSx1KXtsZXQgbT1jO2lmKGMmJiF1JiZ0eXBlb2YgYz09Im9iamVjdCIpe2lmKHMuZW5kc1dpdGgoRSwie30iKSlFPXQ/RTpFLnNsaWNlKDAsLTIpLGM9SlNPTi5zdHJpbmdpZnkoYyk7ZWxzZSBpZihzLmlzQXJyYXkoYykmJkRyKGMpfHwocy5pc0ZpbGVMaXN0KGMpfHxzLmVuZHNXaXRoKEUsIltdIikpJiYobT1zLnRvQXJyYXkoYykpKXJldHVybiBFPVRlKEUpLG0uZm9yRWFjaChmdW5jdGlvbihVLHd0KXshKHMuaXNVbmRlZmluZWQoVSl8fFU9PT1udWxsKSYmZS5hcHBlbmQoaT09PSEwP0xlKFtFXSx3dCxvKTppPT09bnVsbD9FOkUrIltdIixCKFUpKX0pLCExfXJldHVybiBIQShjKT8hMDooZS5hcHBlbmQoTGUodSxFLG8pLEIoYykpLCExKX1sZXQgYT1bXSxRPU9iamVjdC5hc3NpZ24oU3Ise2RlZmF1bHRWaXNpdG9yOkksY29udmVydFZhbHVlOkIsaXNWaXNpdGFibGU6SEF9KTtmdW5jdGlvbiBnKGMsRSl7aWYoIXMuaXNVbmRlZmluZWQoYykpe2lmKGEuaW5kZXhPZihjKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitFLmpvaW4oIi4iKSk7YS5wdXNoKGMpLHMuZm9yRWFjaChjLGZ1bmN0aW9uKG0sUil7KCEocy5pc1VuZGVmaW5lZChtKXx8bT09PW51bGwpJiZuLmNhbGwoZSxtLHMuaXNTdHJpbmcoUik/Ui50cmltKCk6UixFLFEpKT09PSEwJiZnKG0sRT9FLmNvbmNhdChSKTpbUl0pfSksYS5wb3AoKX19aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBnKEEpLGV9dmFyIFQ9YnI7ZnVuY3Rpb24geGUoQSl7bGV0IGU9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KX1mdW5jdGlvbiBPZShBLGUpe3RoaXMuX3BhaXJzPVtdLEEmJlQoQSx0aGlzLGUpfXZhciBQZT1PZS5wcm90b3R5cGU7UGUuYXBwZW5kPWZ1bmN0aW9uKGUscil7dGhpcy5fcGFpcnMucHVzaChbZSxyXSl9O1BlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe2xldCByPWU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzLHQseGUpfTp4ZTtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiByKG5bMF0pKyI9IityKG5bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgZkE9T2U7ZnVuY3Rpb24gRnIoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gWChBLGUscil7aWYoIWUpcmV0dXJuIEE7bGV0IHQ9ciYmci5lbmNvZGV8fEZyLG49ciYmci5zZXJpYWxpemUsbztpZihuP289bihlLHIpOm89cy5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IGZBKGUscikudG9TdHJpbmcodCksbyl7bGV0IGk9QS5pbmRleE9mKCIjIik7aSE9PS0xJiYoQT1BLnNsaWNlKDAsaSkpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK299cmV0dXJuIEF9dmFyIFlBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSxyLHQpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnIsc3luY2hyb25vdXM6dD90LnN5bmNocm9ub3VzOiExLHJ1bldoZW46dD90LnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXtzLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbih0KXt0IT09bnVsbCYmZSh0KX0pfX0scUE9WUE7dmFyIHVBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgSmU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOmZBO3ZhciBNZT10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIEhlPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIFllPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOkplLEZvcm1EYXRhOk1lLEJsb2I6SGV9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgS0E9e307U3QoS0Ese2hhc0Jyb3dzZXJFbnY6KCk9PnFlLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+a3IsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5Scn0pO3ZhciBxZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixrcj0oQT0+cWUmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxScj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIEQ9ey4uLktBLC4uLlllfTtmdW5jdGlvbiBXQShBLGUpe3JldHVybiBUKEEsbmV3IEQuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihyLHQsbixvKXtyZXR1cm4gRC5pc05vZGUmJnMuaXNCdWZmZXIocik/KHRoaXMuYXBwZW5kKHQsci50b1N0cmluZygiYmFzZTY0IikpLCExKTpvLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBVcihBKXtyZXR1cm4gcy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIE5yKEEpe2xldCBlPXt9LHI9T2JqZWN0LmtleXMoQSksdCxuPXIubGVuZ3RoLG87Zm9yKHQ9MDt0PG47dCsrKW89clt0XSxlW29dPUFbb107cmV0dXJuIGV9ZnVuY3Rpb24gR3IoQSl7ZnVuY3Rpb24gZShyLHQsbixvKXtsZXQgaT1yW28rK107aWYoaT09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBDPU51bWJlci5pc0Zpbml0ZSgraSksbD1vPj1yLmxlbmd0aDtyZXR1cm4gaT0haSYmcy5pc0FycmF5KG4pP24ubGVuZ3RoOmksbD8ocy5oYXNPd25Qcm9wKG4saSk/bltpXT1bbltpXSx0XTpuW2ldPXQsIUMpOigoIW5baV18fCFzLmlzT2JqZWN0KG5baV0pKSYmKG5baV09W10pLGUocix0LG5baV0sbykmJnMuaXNBcnJheShuW2ldKSYmKG5baV09TnIobltpXSkpLCFDKX1pZihzLmlzRm9ybURhdGEoQSkmJnMuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgcj17fTtyZXR1cm4gcy5mb3JFYWNoRW50cnkoQSwodCxuKT0+e2UoVXIodCksbixyLDApfSkscn1yZXR1cm4gbnVsbH12YXIgcEE9R3I7ZnVuY3Rpb24gTHIoQSxlLHIpe2lmKHMuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxzLnRyaW0oQSl9Y2F0Y2godCl7aWYodC5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyB0fXJldHVybihyfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIGpBPXt0cmFuc2l0aW9uYWw6dUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHIpe2xldCB0PXIuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj10LmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPXMuaXNPYmplY3QoZSk7aWYobyYmcy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLHMuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShwQShlKSk6ZTtpZihzLmlzQXJyYXlCdWZmZXIoZSl8fHMuaXNCdWZmZXIoZSl8fHMuaXNTdHJlYW0oZSl8fHMuaXNGaWxlKGUpfHxzLmlzQmxvYihlKSlyZXR1cm4gZTtpZihzLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihzLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiByLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgQztpZihvKXtpZih0LmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBXQShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEM9cy5pc0ZpbGVMaXN0KGUpKXx8dC5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBsPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gVChDP3siZmlsZXNbXSI6ZX06ZSxsJiZuZXcgbCx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIG98fG4/KHIuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxMcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgcj10aGlzLnRyYW5zaXRpb25hbHx8akEudHJhbnNpdGlvbmFsLHQ9ciYmci5mb3JjZWRKU09OUGFyc2luZyxuPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJnMuaXNTdHJpbmcoZSkmJih0JiYhdGhpcy5yZXNwb25zZVR5cGV8fG4pKXtsZXQgaT0hKHImJnIuc2lsZW50SlNPTlBhcnNpbmcpJiZuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChDKXtpZihpKXRocm93IEMubmFtZT09PSJTeW50YXhFcnJvciI/cC5mcm9tKEMscC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpDfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6RC5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6RC5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07cy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntqQS5oZWFkZXJzW0FdPXt9fSk7dmFyIHE9akE7dmFyIFRyPXMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksS2U9QT0+e2xldCBlPXt9LHIsdCxuO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihpKXtuPWkuaW5kZXhPZigiOiIpLHI9aS5zdWJzdHJpbmcoMCxuKS50cmltKCkudG9Mb3dlckNhc2UoKSx0PWkuc3Vic3RyaW5nKG4rMSkudHJpbSgpLCEoIXJ8fGVbcl0mJlRyW3JdKSYmKHI9PT0ic2V0LWNvb2tpZSI/ZVtyXT9lW3JdLnB1c2godCk6ZVtyXT1bdF06ZVtyXT1lW3JdP2Vbcl0rIiwgIit0OnQpfSksZX07dmFyIFdlPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gJChBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGRBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAoZEEpOlN0cmluZyhBKX1mdW5jdGlvbiB4cihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHI9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyx0O2Zvcig7dD1yLmV4ZWMoQSk7KWVbdFsxXV09dFsyXTtyZXR1cm4gZX12YXIgT3I9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gdkEoQSxlLHIsdCxuKXtpZihzLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLGUscik7aWYobiYmKGU9ciksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHQpKXJldHVybiBlLmluZGV4T2YodCkhPT0tMTtpZihzLmlzUmVnRXhwKHQpKXJldHVybiB0LnRlc3QoZSl9fWZ1bmN0aW9uIFByKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUscix0KT0+ci50b1VwcGVyQ2FzZSgpK3QpfWZ1bmN0aW9uIEpyKEEsZSl7bGV0IHI9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHQ9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSx0K3Ise3ZhbHVlOmZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gdGhpc1t0XS5jYWxsKHRoaXMsZSxuLG8saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIEs9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUscix0KXtsZXQgbj10aGlzO2Z1bmN0aW9uIG8oQyxsLEIpe2xldCBJPSQobCk7aWYoIUkpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBhPXMuZmluZEtleShuLEkpOyghYXx8blthXT09PXZvaWQgMHx8Qj09PSEwfHxCPT09dm9pZCAwJiZuW2FdIT09ITEpJiYoblthfHxsXT1kQShDKSl9bGV0IGk9KEMsbCk9PnMuZm9yRWFjaChDLChCLEkpPT5vKEIsSSxsKSk7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/aShlLHIpOnMuaXNTdHJpbmcoZSkmJihlPWUudHJpbSgpKSYmIU9yKGUpP2koS2UoZSkscik6ZSE9bnVsbCYmbyhyLGUsdCksdGhpc31nZXQoZSxyKXtpZihlPSQoZSksZSl7bGV0IHQ9cy5maW5kS2V5KHRoaXMsZSk7aWYodCl7bGV0IG49dGhpc1t0XTtpZighcilyZXR1cm4gbjtpZihyPT09ITApcmV0dXJuIHhyKG4pO2lmKHMuaXNGdW5jdGlvbihyKSlyZXR1cm4gci5jYWxsKHRoaXMsbix0KTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLmV4ZWMobik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHIpe2lmKGU9JChlKSxlKXtsZXQgdD1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hISh0JiZ0aGlzW3RdIT09dm9pZCAwJiYoIXJ8fHZBKHRoaXMsdGhpc1t0XSx0LHIpKSl9cmV0dXJuITF9ZGVsZXRlKGUscil7bGV0IHQ9dGhpcyxuPSExO2Z1bmN0aW9uIG8oaSl7aWYoaT0kKGkpLGkpe2xldCBDPXMuZmluZEtleSh0LGkpO0MmJighcnx8dkEodCx0W0NdLEMscikpJiYoZGVsZXRlIHRbQ10sbj0hMCl9fXJldHVybiBzLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKG8pOm8oZSksbn1jbGVhcihlKXtsZXQgcj1PYmplY3Qua2V5cyh0aGlzKSx0PXIubGVuZ3RoLG49ITE7Zm9yKDt0LS07KXtsZXQgbz1yW3RdOyghZXx8dkEodGhpcyx0aGlzW29dLG8sZSwhMCkpJiYoZGVsZXRlIHRoaXNbb10sbj0hMCl9cmV0dXJuIG59bm9ybWFsaXplKGUpe2xldCByPXRoaXMsdD17fTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKG4sbyk9PntsZXQgaT1zLmZpbmRLZXkodCxvKTtpZihpKXtyW2ldPWRBKG4pLGRlbGV0ZSByW29dO3JldHVybn1sZXQgQz1lP1ByKG8pOlN0cmluZyhvKS50cmltKCk7QyE9PW8mJmRlbGV0ZSByW29dLHJbQ109ZEEobiksdFtDXT0hMH0pLHRoaXN9Y29uY2F0KC4uLmUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLmUpfXRvSlNPTihlKXtsZXQgcj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBzLmZvckVhY2godGhpcywodCxuKT0+e3QhPW51bGwmJnQhPT0hMSYmKHJbbl09ZSYmcy5pc0FycmF5KHQpP3Quam9pbigiLCAiKTp0KX0pLHJ9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2Uscl0pPT5lKyI6ICIrcikuam9pbihgCmApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzP2U6bmV3IHRoaXMoZSl9c3RhdGljIGNvbmNhdChlLC4uLnIpe2xldCB0PW5ldyB0aGlzKGUpO3JldHVybiByLmZvckVhY2gobj0+dC5zZXQobikpLHR9c3RhdGljIGFjY2Vzc29yKGUpe2xldCB0PSh0aGlzW1dlXT10aGlzW1dlXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLG49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gbyhpKXtsZXQgQz0kKGkpO3RbQ118fChKcihuLGkpLHRbQ109ITApfXJldHVybiBzLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKG8pOm8oZSksdGhpc319O0suYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO3MucmVkdWNlRGVzY3JpcHRvcnMoSy5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCByPWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHQpe3RoaXNbcl09dH19fSk7cy5mcmVlemVNZXRob2RzKEspO3ZhciBTPUs7ZnVuY3Rpb24gQUEoQSxlKXtsZXQgcj10aGlzfHxxLHQ9ZXx8cixuPVMuZnJvbSh0LmhlYWRlcnMpLG89dC5kYXRhO3JldHVybiBzLmZvckVhY2goQSxmdW5jdGlvbihDKXtvPUMuY2FsbChyLG8sbi5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxuLm5vcm1hbGl6ZSgpLG99ZnVuY3Rpb24gZUEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBqZShBLGUscil7cC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixwLkVSUl9DQU5DRUxFRCxlLHIpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9cy5pbmhlcml0cyhqZSxwLHtfX0NBTkNFTF9fOiEwfSk7dmFyIHg9amU7ZnVuY3Rpb24gX0EoQSxlLHIpe2xldCB0PXIuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFyLnN0YXR1c3x8IXR8fHQoci5zdGF0dXMpP0Eocik6ZShuZXcgcCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Iuc3RhdHVzLFtwLkVSUl9CQURfUkVRVUVTVCxwLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3Ioci5zdGF0dXMvMTAwKS00XSxyLmNvbmZpZyxyLnJlcXVlc3QscikpfXZhciB2ZT1ELmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHIsdCxuLG8pe2xldCBpPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO3MuaXNOdW1iZXIocikmJmkucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHIpLnRvR01UU3RyaW5nKCkpLHMuaXNTdHJpbmcodCkmJmkucHVzaCgicGF0aD0iK3QpLHMuaXNTdHJpbmcobikmJmkucHVzaCgiZG9tYWluPSIrbiksbz09PSEwJiZpLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1pLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBWQShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIHpBKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiB0QShBLGUpe3JldHVybiBBJiYhVkEoZSk/ekEoQSxlKTplfXZhciBfZT1ELmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksdDtmdW5jdGlvbiBuKG8pe2xldCBpPW87cmV0dXJuIGUmJihyLnNldEF0dHJpYnV0ZSgiaHJlZiIsaSksaT1yLmhyZWYpLHIuc2V0QXR0cmlidXRlKCJocmVmIixpKSx7aHJlZjpyLmhyZWYscHJvdG9jb2w6ci5wcm90b2NvbD9yLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpyLmhvc3Qsc2VhcmNoOnIuc2VhcmNoP3Iuc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6ci5oYXNoP3IuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnIuaG9zdG5hbWUscG9ydDpyLnBvcnQscGF0aG5hbWU6ci5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/ci5wYXRobmFtZToiLyIrci5wYXRobmFtZX19cmV0dXJuIHQ9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oaSl7bGV0IEM9cy5pc1N0cmluZyhpKT9uKGkpOmk7cmV0dXJuIEMucHJvdG9jb2w9PT10LnByb3RvY29sJiZDLmhvc3Q9PT10Lmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIFpBKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBNcihBLGUpe0E9QXx8MTA7bGV0IHI9bmV3IEFycmF5KEEpLHQ9bmV3IEFycmF5KEEpLG49MCxvPTAsaTtyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKGwpe2xldCBCPURhdGUubm93KCksST10W29dO2l8fChpPUIpLHJbbl09bCx0W25dPUI7bGV0IGE9byxRPTA7Zm9yKDthIT09bjspUSs9clthKytdLGE9YSVBO2lmKG49KG4rMSklQSxuPT09byYmKG89KG8rMSklQSksQi1pPGUpcmV0dXJuO2xldCBnPUkmJkItSTtyZXR1cm4gZz9NYXRoLnJvdW5kKFEqMWUzL2cpOnZvaWQgMH19dmFyIFZlPU1yO2Z1bmN0aW9uIHplKEEsZSl7bGV0IHI9MCx0PVZlKDUwLDI1MCk7cmV0dXJuIG49PntsZXQgbz1uLmxvYWRlZCxpPW4ubGVuZ3RoQ29tcHV0YWJsZT9uLnRvdGFsOnZvaWQgMCxDPW8tcixsPXQoQyksQj1vPD1pO3I9bztsZXQgST17bG9hZGVkOm8sdG90YWw6aSxwcm9ncmVzczppP28vaTp2b2lkIDAsYnl0ZXM6QyxyYXRlOmx8fHZvaWQgMCxlc3RpbWF0ZWQ6bCYmaSYmQj8oaS1vKS9sOnZvaWQgMCxldmVudDpufTtJW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShJKX19dmFyIEhyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsWmU9SHImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLHQpe2xldCBuPUEuZGF0YSxvPVMuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6aSx3aXRoWFNSRlRva2VuOkN9PUEsbDtmdW5jdGlvbiBCKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShsKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpfWxldCBJO2lmKHMuaXNGb3JtRGF0YShuKSl7aWYoRC5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fEQuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KW8uc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEk9by5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbRSwuLi51XT1JP0kuc3BsaXQoIjsiKS5tYXAobT0+bS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtvLnNldENvbnRlbnRUeXBlKFtFfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBhPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBFPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO28uc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKEUrIjoiK3UpKX1sZXQgUT10QShBLmJhc2VVUkwsQS51cmwpO2Eub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoUSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxhLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIGcoKXtpZighYSlyZXR1cm47bGV0IEU9Uy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYSYmYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksbT17ZGF0YTohaXx8aT09PSJ0ZXh0Inx8aT09PSJqc29uIj9hLnJlc3BvbnNlVGV4dDphLnJlc3BvbnNlLHN0YXR1czphLnN0YXR1cyxzdGF0dXNUZXh0OmEuc3RhdHVzVGV4dCxoZWFkZXJzOkUsY29uZmlnOkEscmVxdWVzdDphfTtfQShmdW5jdGlvbihVKXtyKFUpLEIoKX0sZnVuY3Rpb24oVSl7dChVKSxCKCl9LG0pLGE9bnVsbH1pZigib25sb2FkZW5kImluIGE/YS5vbmxvYWRlbmQ9ZzphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFhfHxhLnJlYWR5U3RhdGUhPT00fHxhLnN0YXR1cz09PTAmJiEoYS5yZXNwb25zZVVSTCYmYS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoZyl9LGEub25hYm9ydD1mdW5jdGlvbigpe2EmJih0KG5ldyBwKCJSZXF1ZXN0IGFib3J0ZWQiLHAuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbCl9LGEub25lcnJvcj1mdW5jdGlvbigpe3QobmV3IHAoIk5ldHdvcmsgRXJyb3IiLHAuRVJSX05FVFdPUkssQSxhKSksYT1udWxsfSxhLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixtPUEudHJhbnNpdGlvbmFsfHx1QTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksdChuZXcgcCh1LG0uY2xhcmlmeVRpbWVvdXRFcnJvcj9wLkVUSU1FRE9VVDpwLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGx9LEQuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoQyYmcy5pc0Z1bmN0aW9uKEMpJiYoQz1DKEEpKSxDfHxDIT09ITEmJl9lKFEpKSl7bGV0IEU9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmdmUucmVhZChBLnhzcmZDb29raWVOYW1lKTtFJiZvLnNldChBLnhzcmZIZWFkZXJOYW1lLEUpfW49PT12b2lkIDAmJm8uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYSYmcy5mb3JFYWNoKG8udG9KU09OKCksZnVuY3Rpb24odSxtKXthLnNldFJlcXVlc3RIZWFkZXIobSx1KX0pLHMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoYS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksaSYmaSE9PSJqc29uIiYmKGEucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHplKEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS51cGxvYWQmJmEudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix6ZShBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYobD1FPT57YSYmKHQoIUV8fEUudHlwZT9uZXcgeChudWxsLEEsYSk6RSksYS5hYm9ydCgpLGE9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9sKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpKSk7bGV0IGM9WkEoUSk7aWYoYyYmRC5wcm90b2NvbHMuaW5kZXhPZihjKT09PS0xKXt0KG5ldyBwKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2MrIjoiLHAuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59YS5zZW5kKG58fG51bGwpfSl9O3ZhciBYQT17aHR0cDpRQSx4aHI6WmV9O3MuZm9yRWFjaChYQSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBYZT1BPT5gLSAke0F9YCxZcj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbUE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSxyLHQsbj17fTtmb3IobGV0IG89MDtvPGU7bysrKXtyPUFbb107bGV0IGk7aWYodD1yLCFZcihyKSYmKHQ9WEFbKGk9U3RyaW5nKHIpKS50b0xvd2VyQ2FzZSgpXSx0PT09dm9pZCAwKSl0aHJvdyBuZXcgcChgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHQpYnJlYWs7bltpfHwiIyIrb109dH1pZighdCl7bGV0IG89T2JqZWN0LmVudHJpZXMobikubWFwKChbQyxsXSk9PmBhZGFwdGVyICR7Q30gYCsobD09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9vLmxlbmd0aD4xP2BzaW5jZSA6CmArby5tYXAoWGUpLmpvaW4oYApgKToiICIrWGUob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgcCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiB0fSxhZGFwdGVyczpYQX07ZnVuY3Rpb24gJEEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHgobnVsbCxBKX1mdW5jdGlvbiB5QShBKXtyZXR1cm4gJEEoQSksQS5oZWFkZXJzPVMuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1BQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fHEuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gJEEoQSksdC5kYXRhPUFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHQpLHQuaGVhZGVycz1TLmZyb20odC5oZWFkZXJzKSx0fSxmdW5jdGlvbih0KXtyZXR1cm4gZUEodCl8fCgkQShBKSx0JiZ0LnJlc3BvbnNlJiYodC5yZXNwb25zZS5kYXRhPUFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHQucmVzcG9uc2UpLHQucmVzcG9uc2UuaGVhZGVycz1TLmZyb20odC5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHQpfSl9dmFyICRlPUE9PkEgaW5zdGFuY2VvZiBTP3suLi5BfTpBO2Z1bmN0aW9uIEwoQSxlKXtlPWV8fHt9O2xldCByPXt9O2Z1bmN0aW9uIHQoQixJLGEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQikmJnMuaXNQbGFpbk9iamVjdChJKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOmF9LEIsSSk6cy5pc1BsYWluT2JqZWN0KEkpP3MubWVyZ2Uoe30sSSk6cy5pc0FycmF5KEkpP0kuc2xpY2UoKTpJfWZ1bmN0aW9uIG4oQixJLGEpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEIpKXJldHVybiB0KHZvaWQgMCxCLGEpfWVsc2UgcmV0dXJuIHQoQixJLGEpfWZ1bmN0aW9uIG8oQixJKXtpZighcy5pc1VuZGVmaW5lZChJKSlyZXR1cm4gdCh2b2lkIDAsSSl9ZnVuY3Rpb24gaShCLEkpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEIpKXJldHVybiB0KHZvaWQgMCxCKX1lbHNlIHJldHVybiB0KHZvaWQgMCxJKX1mdW5jdGlvbiBDKEIsSSxhKXtpZihhIGluIGUpcmV0dXJuIHQoQixJKTtpZihhIGluIEEpcmV0dXJuIHQodm9pZCAwLEIpfWxldCBsPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOkMsaGVhZGVyczooQixJKT0+bigkZShCKSwkZShJKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihJKXtsZXQgYT1sW0ldfHxuLFE9YShBW0ldLGVbSV0sSSk7cy5pc1VuZGVmaW5lZChRKSYmYSE9PUN8fChyW0ldPVEpfSkscn12YXIgaEE9IjEuNi44Ijt2YXIgQWU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57QWVbQV09ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIEF0PXt9O0FlLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHIsdCl7ZnVuY3Rpb24gbihvLGkpe3JldHVybiJbQXhpb3MgdiIraEErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitpKyh0PyIuICIrdDoiIil9cmV0dXJuKG8saSxDKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgcChuKGksIiBoYXMgYmVlbiByZW1vdmVkIisocj8iIGluICIrcjoiIikpLHAuRVJSX0RFUFJFQ0FURUQpO3JldHVybiByJiYhQXRbaV0mJihBdFtpXT0hMCxjb25zb2xlLndhcm4obihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IityKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLGksQyk6ITB9fTtmdW5jdGlvbiBxcihBLGUscil7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBwKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixwLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxuPXQubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IG89dFtuXSxpPWVbb107aWYoaSl7bGV0IEM9QVtvXSxsPUM9PT12b2lkIDB8fGkoQyxvLEEpO2lmKGwhPT0hMCl0aHJvdyBuZXcgcCgib3B0aW9uICIrbysiIG11c3QgYmUgIitsLHAuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHIhPT0hMCl0aHJvdyBuZXcgcCgiVW5rbm93biBvcHRpb24gIitvLHAuRVJSX0JBRF9PUFRJT04pfX12YXIgd0E9e2Fzc2VydE9wdGlvbnM6cXIsdmFsaWRhdG9yczpBZX07dmFyIE89d0EudmFsaWRhdG9ycyxXPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgcUEscmVzcG9uc2U6bmV3IHFBfX1hc3luYyByZXF1ZXN0KGUscil7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUscil9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgbz1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjt0LnN0YWNrP28mJiFTdHJpbmcodC5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJih0LnN0YWNrKz1gCmArbyk6dC5zdGFjaz1vfXRocm93IHR9fV9yZXF1ZXN0KGUscil7dHlwZW9mIGU9PSJzdHJpbmciPyhyPXJ8fHt9LHIudXJsPWUpOnI9ZXx8e30scj1MKHRoaXMuZGVmYXVsdHMscik7bGV0e3RyYW5zaXRpb25hbDp0LHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOm99PXI7dCE9PXZvaWQgMCYmd0EuYXNzZXJ0T3B0aW9ucyh0LHtzaWxlbnRKU09OUGFyc2luZzpPLnRyYW5zaXRpb25hbChPLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOk8udHJhbnNpdGlvbmFsKE8uYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpPLnRyYW5zaXRpb25hbChPLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKHMuaXNGdW5jdGlvbihuKT9yLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTp3QS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpPLmZ1bmN0aW9uLHNlcmlhbGl6ZTpPLmZ1bmN0aW9ufSwhMCkpLHIubWV0aG9kPShyLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPW8mJnMubWVyZ2Uoby5jb21tb24sb1tyLm1ldGhvZF0pO28mJnMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxjPT57ZGVsZXRlIG9bY119KSxyLmhlYWRlcnM9Uy5jb25jYXQoaSxvKTtsZXQgQz1bXSxsPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihFKXt0eXBlb2YgRS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZFLnJ1bldoZW4ocik9PT0hMXx8KGw9bCYmRS5zeW5jaHJvbm91cyxDLnVuc2hpZnQoRS5mdWxmaWxsZWQsRS5yZWplY3RlZCkpfSk7bGV0IEI9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihFKXtCLnB1c2goRS5mdWxmaWxsZWQsRS5yZWplY3RlZCl9KTtsZXQgSSxhPTAsUTtpZighbCl7bGV0IGM9W3lBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoYy51bnNoaWZ0LmFwcGx5KGMsQyksYy5wdXNoLmFwcGx5KGMsQiksUT1jLmxlbmd0aCxJPVByb21pc2UucmVzb2x2ZShyKTthPFE7KUk9SS50aGVuKGNbYSsrXSxjW2ErK10pO3JldHVybiBJfVE9Qy5sZW5ndGg7bGV0IGc9cjtmb3IoYT0wO2E8UTspe2xldCBjPUNbYSsrXSxFPUNbYSsrXTt0cnl7Zz1jKGcpfWNhdGNoKHUpe0UuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7ST15QS5jYWxsKHRoaXMsZyl9Y2F0Y2goYyl7cmV0dXJuIFByb21pc2UucmVqZWN0KGMpfWZvcihhPTAsUT1CLmxlbmd0aDthPFE7KUk9SS50aGVuKEJbYSsrXSxCW2ErK10pO3JldHVybiBJfWdldFVyaShlKXtlPUwodGhpcy5kZWZhdWx0cyxlKTtsZXQgcj10QShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBYKHIsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKX19O3MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oZSl7Vy5wcm90b3R5cGVbZV09ZnVuY3Rpb24ocix0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEwodHx8e30se21ldGhvZDplLHVybDpyLGRhdGE6KHR8fHt9KS5kYXRhfSkpfX0pO3MuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKG8saSxDKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEwoQ3x8e30se21ldGhvZDplLGhlYWRlcnM6dD97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6byxkYXRhOml9KSl9fVcucHJvdG90eXBlW2VdPXIoKSxXLnByb3RvdHlwZVtlKyJGb3JtIl09cighMCl9KTt2YXIgckE9Vzt2YXIgZWU9Y2xhc3MgQXtjb25zdHJ1Y3RvcihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHI7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG8pe3I9b30pO2xldCB0PXRoaXM7dGhpcy5wcm9taXNlLnRoZW4obj0+e2lmKCF0Ll9saXN0ZW5lcnMpcmV0dXJuO2xldCBvPXQuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtvLS0gPjA7KXQuX2xpc3RlbmVyc1tvXShuKTt0Ll9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPW49PntsZXQgbyxpPW5ldyBQcm9taXNlKEM9Pnt0LnN1YnNjcmliZShDKSxvPUN9KS50aGVuKG4pO3JldHVybiBpLmNhbmNlbD1mdW5jdGlvbigpe3QudW5zdWJzY3JpYmUobyl9LGl9LGUoZnVuY3Rpb24obyxpLEMpe3QucmVhc29ufHwodC5yZWFzb249bmV3IHgobyxpLEMpLHIodC5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoZSl7aWYodGhpcy5yZWFzb24pe2UodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX11bnN1YnNjcmliZShlKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTtyIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UociwxKX1zdGF0aWMgc291cmNlKCl7bGV0IGU7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKG4pe2U9bn0pLGNhbmNlbDplfX19LGV0PWVlO2Z1bmN0aW9uIHRlKEEpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gQS5hcHBseShudWxsLHIpfX1mdW5jdGlvbiByZShBKXtyZXR1cm4gcy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgbmU9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKG5lKS5mb3JFYWNoKChbQSxlXSk9PntuZVtlXT1BfSk7dmFyIHR0PW5lO2Z1bmN0aW9uIHJ0KEEpe2xldCBlPW5ldyByQShBKSxyPVYockEucHJvdG90eXBlLnJlcXVlc3QsZSk7cmV0dXJuIHMuZXh0ZW5kKHIsckEucHJvdG90eXBlLGUse2FsbE93bktleXM6ITB9KSxzLmV4dGVuZChyLGUsbnVsbCx7YWxsT3duS2V5czohMH0pLHIuY3JlYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBydChMKEEsbikpfSxyfXZhciB5PXJ0KHEpO3kuQXhpb3M9ckE7eS5DYW5jZWxlZEVycm9yPXg7eS5DYW5jZWxUb2tlbj1ldDt5LmlzQ2FuY2VsPWVBO3kuVkVSU0lPTj1oQTt5LnRvRm9ybURhdGE9VDt5LkF4aW9zRXJyb3I9cDt5LkNhbmNlbD15LkNhbmNlbGVkRXJyb3I7eS5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfTt5LnNwcmVhZD10ZTt5LmlzQXhpb3NFcnJvcj1yZTt5Lm1lcmdlQ29uZmlnPUw7eS5BeGlvc0hlYWRlcnM9Uzt5LmZvcm1Ub0pTT049QT0+cEEocy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTt5LmdldEFkYXB0ZXI9bUEuZ2V0QWRhcHRlcjt5Lkh0dHBTdGF0dXNDb2RlPXR0O3kuZGVmYXVsdD15O3ZhciBqPXk7dmFye0F4aW9zOkRhLEF4aW9zRXJyb3I6U2EsQ2FuY2VsZWRFcnJvcjpiYSxpc0NhbmNlbDpGYSxDYW5jZWxUb2tlbjprYSxWRVJTSU9OOlJhLGFsbDpVYSxDYW5jZWw6TmEsaXNBeGlvc0Vycm9yOkdhLHNwcmVhZDpMYSx0b0Zvcm1EYXRhOlRhLEF4aW9zSGVhZGVyczp4YSxIdHRwU3RhdHVzQ29kZTpPYSxmb3JtVG9KU09OOlBhLGdldEFkYXB0ZXI6SmEsbWVyZ2VDb25maWc6TWF9PWo7YXN5bmMgZnVuY3Rpb24gS3IoQSxlKXtsZXQgcj1BLHQ9bnVsbDtpZihyPT1udWxsKXQ9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYoci5zdGFydHNXaXRoKCJodHRwIikpe2xldCBuPWF3YWl0IGouZ2V0KHIse3Jlc3BvbnNlVHlwZToiYmxvYiIscGFyYW1zOmV9KSxvPVVSTC5jcmVhdGVPYmplY3RVUkwobi5kYXRhKTt0PW5ldyBXb3JrZXIobyx7dHlwZToibW9kdWxlIn0pfWVsc2UgdD1uZXcgV29ya2VyKHIse3R5cGU6Im1vZHVsZSJ9KTtyZXR1cm4gdH12YXIgbkE9S3I7ZnVuY3Rpb24gbnQoQSl7bGV0IGU9eEEoQSkscj1BO3JldHVybiByLnRlcm1pbmF0ZWQ9ITEsci53b3JrZXJQcm94eT1lLHIub3JpZ2luYWxUZXJtaW5hdGU9ci50ZXJtaW5hdGUsci50ZXJtaW5hdGU9KCk9PntyLnRlcm1pbmF0ZWQ9ITAsci53b3JrZXJQcm94eVtUQV0oKSxyLm9yaWdpbmFsVGVybWluYXRlKCl9LHt3b3JrZXJQcm94eTplLHdvcmtlcjpyfX1hc3luYyBmdW5jdGlvbiBXcihBLGUscil7bGV0IHQ7aWYoQSE9bnVsbCl7bGV0IG89QTtyZXR1cm4gby53b3JrZXJQcm94eSE9PXZvaWQgMD8odD1vLndvcmtlclByb3h5LHt3b3JrZXJQcm94eTp0LHdvcmtlcjpvfSk6bnQoQSl9bGV0IG49YXdhaXQgbkEoZSxyKTtyZXR1cm4gbnQobil9dmFyIG90PVdyO2FzeW5jIGZ1bmN0aW9uIGpyKEEsZSxyKXtsZXQgdD0idW5rbm93biI7dHlwZW9mIEEhPSJzdHJpbmciP3Q9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP3Q9QTp0PXR5cGVvZiBlPCJ1Ij9gJHtlfS8ke0F9YDpBLHQuZW5kc1dpdGgoIi5qcyIpJiYodD10LnN1YnN0cmluZygwLHQubGVuZ3RoLTMpKSx0LmVuZHNXaXRoKCIud2FzbSIpJiYodD10LnN1YnN0cmluZygwLHQubGVuZ3RoLTUpKTtsZXQgbj1gJHt0fS53YXNtYCxpPShhd2FpdCBqLmdldChuLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6cn0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7dH0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTppfSl9dmFyIGl0PWpyO3ZhciBhdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgZ3Q9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsc3Q9bmV3IFRleHRFbmNvZGVyLEl0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiB2cihBLGUpe2xldCByPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHQ9QS5mc19vcGVuKGUsci5mbGFncyksbz1BLmZzX3N0YXQoZSkuc2l6ZSxpPW51bGw7Z3Q/aT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIobyk6aT1uZXcgQXJyYXlCdWZmZXIobyk7bGV0IEM9bmV3IFVpbnQ4QXJyYXkoaSk7cmV0dXJuIEEuZnNfcmVhZCh0LEMsMCxvLDApLEEuZnNfY2xvc2UodCksQ31mdW5jdGlvbiBDdChBLGUscil7bGV0IHQ9bnVsbDtndD90PW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTp0PW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgbj1uZXcgVWludDhBcnJheSh0KSxvPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHIpO3JldHVybiBuLnNldChvKSxufWZ1bmN0aW9uIGgoQSxlLHIsdCl7bGV0IG49MDtyZXR1cm4gZSE9PW51bGwmJihuPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHIsdCxlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxuKSksbn1mdW5jdGlvbiBKKEEsZSxyKXtsZXQgdD1KU09OLnN0cmluZ2lmeShlKSxuPUEubGVuZ3RoQnl0ZXNVVEY4KHQpKzEsbz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHIsbl0pO0Euc3RyaW5nVG9VVEY4KHQsbyxuKX1mdW5jdGlvbiBiKEEsZSxyLHQpe2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUscl0pLG89QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxyXSksaT1DdChBLG4sbyk7cmV0dXJuIE4odCxpLmJ1ZmZlcil9ZnVuY3Rpb24gREEoQSxlKXtsZXQgcj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSx0PUEuVVRGOFRvU3RyaW5nKHIpO3JldHVybiBKU09OLnBhcnNlKHQpfWZ1bmN0aW9uIF9yKEEsZSxyLHQpe3QhPW51bGwmJnQubGVuZ3RoPjAmJnQuZm9yRWFjaChmdW5jdGlvbihCLEkpe3N3aXRjaChCLnR5cGUpe2Nhc2UgZC5UZXh0U3RyZWFtOntsZXQgYT1zdC5lbmNvZGUoQi5kYXRhLmRhdGEpLFE9aChBLGEsSSwwKSxnPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YH07SihBLGcsSSk7YnJlYWt9Y2FzZSBkLkpzb25Db21wYXRpYmxlOntsZXQgYT1zdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoQi5kYXRhKSksUT1oKEEsYSxJLDApLGc9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTtKKEEsZyxJKTticmVha31jYXNlIGQuQmluYXJ5U3RyZWFtOntsZXQgYT1CLmRhdGEuZGF0YSxRPWgoQSxhLEksMCksZz17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWB9O0ooQSxnLEkpO2JyZWFrfWNhc2UgZC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoQi5kYXRhLnBhdGgsQi5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgZC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShCLmRhdGEucGF0aCxCLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBkLkltYWdlOntsZXQgYT1CLmRhdGEsUT1oKEEsYS5kYXRhLEksMCksZz1oKEEsYS5kaXJlY3Rpb24sSSwxKSxjPXR5cGVvZiBhLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGEubWV0YWRhdGEuZW50cmllcygpKTpbXSxFPXtpbWFnZVR5cGU6YS5pbWFnZVR5cGUsbmFtZTphLm5hbWUsb3JpZ2luOmEub3JpZ2luLHNwYWNpbmc6YS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2d9YCxzaXplOmEuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG1ldGFkYXRhOmN9O0ooQSxFLEkpO2JyZWFrfWNhc2UgZC5NZXNoOntsZXQgYT1CLmRhdGEsUT1oKEEsYS5wb2ludHMsSSwwKSxnPWgoQSxhLmNlbGxzLEksMSksYz1oKEEsYS5wb2ludERhdGEsSSwyKSxFPWgoQSxhLmNlbGxEYXRhLEksMyksdT17bWVzaFR5cGU6YS5tZXNoVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxudW1iZXJPZkNlbGxzOmEubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2d9YCxjZWxsQnVmZmVyU2l6ZTphLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWB9O0ooQSx1LEkpO2JyZWFrfWNhc2UgZC5Qb2ludFNldDp7bGV0IGE9Qi5kYXRhLFE9aChBLGEucG9pbnRzLEksMCksZz1oKEEsYS5wb2ludERhdGEsSSwxKSxjPXtwb2ludFNldFR5cGU6YS5wb2ludFNldFR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gfTtKKEEsYyxJKTticmVha31jYXNlIGQuUG9seURhdGE6e2xldCBhPUIuZGF0YSxRPWgoQSxhLnBvaW50cyxJLDApLGc9aChBLGEudmVydGljZXMsSSwxKSxjPWgoQSxhLmxpbmVzLEksMiksRT1oKEEsYS5wb2x5Z29ucyxJLDMpLHU9aChBLGEudHJpYW5nbGVTdHJpcHMsSSw0KSxtPWgoQSxhLnBvaW50RGF0YSxJLDUpLFI9aChBLGEucG9pbnREYXRhLEksNiksVT17cG9seURhdGFUeXBlOmEucG9seURhdGFUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLHZlcnRpY2VzQnVmZmVyU2l6ZTphLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2d9YCxsaW5lc0J1ZmZlclNpemU6YS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAscG9seWdvbnNCdWZmZXJTaXplOmEucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTphLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHttfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtKKEEsVSxJKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgbj1BLnN0YWNrU2F2ZSgpLG89MDt0cnl7bz1BLmNhbGxNYWluKGUuc2xpY2UoKSl9Y2F0Y2goQil7dGhyb3cgdHlwZW9mIEI9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoQikpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksQn1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKG4pfWxldCBpPUEuZ2V0TW9kdWxlU3Rkb3V0KCksQz1BLmdldE1vZHVsZVN0ZGVycigpLGw9W107cmV0dXJuIHIhPW51bGwmJnIubGVuZ3RoPjAmJm89PT0wJiZyLmZvckVhY2goZnVuY3Rpb24oQixJKXtsZXQgYT1udWxsO3N3aXRjaChCLnR5cGUpe2Nhc2UgZC5UZXh0U3RyZWFtOntsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxjPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLEU9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGcsYyk7YT17ZGF0YTpJdC5kZWNvZGUoRSl9O2JyZWFrfWNhc2UgZC5Kc29uQ29tcGF0aWJsZTp7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksYz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixnLGMpO2E9SlNPTi5wYXJzZShJdC5kZWNvZGUoRSkpO2JyZWFrfWNhc2UgZC5CaW5hcnlTdHJlYW06e2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLGM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSk7YT17ZGF0YTpDdChBLGcsYyl9O2JyZWFrfWNhc2UgZC5UZXh0RmlsZTp7YT17cGF0aDpCLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoQi5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIGQuQmluYXJ5RmlsZTp7YT17cGF0aDpCLmRhdGEucGF0aCxkYXRhOnZyKEEsQi5kYXRhLnBhdGgpfTticmVha31jYXNlIGQuSW1hZ2U6e2xldCBnPURBKEEsSSk7Zy5kYXRhPWIoQSxJLDAsZy5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksZy5kaXJlY3Rpb249YihBLEksMSx3LkZsb2F0NjQpLGcubWV0YWRhdGE9bmV3IE1hcChnLm1ldGFkYXRhKSxhPWc7YnJlYWt9Y2FzZSBkLk1lc2g6e2xldCBnPURBKEEsSSk7Zy5udW1iZXJPZlBvaW50cz4wP2cucG9pbnRzPWIoQSxJLDAsZy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmcucG9pbnRzPU4oZy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mQ2VsbHM+MD9nLmNlbGxzPWIoQSxJLDEsZy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6Zy5jZWxscz1OKGcubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mUG9pbnRQaXhlbHM+MD9nLnBvaW50RGF0YT1iKEEsSSwyLGcubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOmcucG9pbnREYXRhPU4oZy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Zy5jZWxsRGF0YT1iKEEsSSwzLGcubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5jZWxsRGF0YT1OKGcubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9ZzticmVha31jYXNlIGQuUG9pbnRTZXQ6e2xldCBnPURBKEEsSSk7Zy5udW1iZXJPZlBvaW50cz4wP2cucG9pbnRzPWIoQSxJLDAsZy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpnLnBvaW50cz1OKGcucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZQb2ludFBpeGVscz4wP2cucG9pbnREYXRhPWIoQSxJLDEsZy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOmcucG9pbnREYXRhPU4oZy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPWc7YnJlYWt9Y2FzZSBkLlBvbHlEYXRhOntsZXQgZz1EQShBLEkpO2cubnVtYmVyT2ZQb2ludHM+MD9nLnBvaW50cz1iKEEsSSwwLHcuRmxvYXQzMik6Zy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxnLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP2cudmVydGljZXM9YihBLEksMSxmLlVJbnQzMik6Zy52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksZy5saW5lc0J1ZmZlclNpemU+MD9nLmxpbmVzPWIoQSxJLDIsZi5VSW50MzIpOmcubGluZXM9bmV3IFVpbnQzMkFycmF5LGcucG9seWdvbnNCdWZmZXJTaXplPjA/Zy5wb2x5Z29ucz1iKEEsSSwzLGYuVUludDMyKTpnLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxnLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP2cudHJpYW5nbGVTdHJpcHM9YihBLEksNCxmLlVJbnQzMik6Zy50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksZy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Zy5wb2ludERhdGE9YihBLEksNSxnLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9TihnLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Zy5jZWxsRGF0YT1iKEEsSSw2LGcucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOmcuY2VsbERhdGE9TihnLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1nO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IFE9e3R5cGU6Qi50eXBlLGRhdGE6YX07bC5wdXNoKFEpfSkse3JldHVyblZhbHVlOm8sc3Rkb3V0Omksc3RkZXJyOkMsb3V0cHV0czpsfX12YXIgQnQ9X3I7dmFyIFZyPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiB6cihBLGUpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHI9W107Zm9yKGxldCB0PTA7dDxBLmxlbmd0aDt0Kyspe2xldCBuPVpyKEFbdF0sZSk7biE9PW51bGwmJnIucHVzaChuKX1yZXR1cm4gcn1mdW5jdGlvbiBacihBLGUpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHI9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/cj1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihyPUEpLFZyJiZyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDplP3I6ci5zbGljZSgwKX12YXIgbHQ9enI7ZnVuY3Rpb24gWHIoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIGN0PVhyO2Z1bmN0aW9uICRyKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciBFdD0kcjtmdW5jdGlvbiBBbihBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgUXQ9QW47dmFyIGVuO2Z1bmN0aW9uIFNBKCl7cmV0dXJuIGVufXZhciB0bjtmdW5jdGlvbiBmdCgpe3JldHVybiB0bn12YXIgcm47ZnVuY3Rpb24gYkEoKXtyZXR1cm4gcm59dmFyIG9lPW5ldyBNYXA7ZnVuY3Rpb24gbm4oKXtsZXQgQT1iQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW51bGwpLEF9ZnVuY3Rpb24gdXQoKXtsZXQgQT1TQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW5ldyBVUkwoIi9waXBlbGluZXMiLGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbikuaHJlZiksQX1mdW5jdGlvbiBGQSgpe2xldCBBPWZ0KCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9e30pLEF9YXN5bmMgZnVuY3Rpb24gb24oQSxlLHIpe2xldCB0PUEsbj1BO2lmKHR5cGVvZiBBIT0ic3RyaW5nIiYmKHQ9bmV3IFVSTChBLmhyZWYpLG49dC5ocmVmKSxvZS5oYXMobikpcmV0dXJuIG9lLmdldChuKTt7bGV0IG89YXdhaXQgaXQoQSxlPy50b1N0cmluZygpPz91dCgpLHI/P0ZBKCkpO3JldHVybiBvZS5zZXQobixvKSxvfX1hc3luYyBmdW5jdGlvbiBhbihBLGUscix0LG4pe2lmKCFhd2FpdCBhdCgpKXtsZXQgdT0iV2ViQXNzZW1ibHkgU0lNRCBzdXBwb3J0IGlzIHJlcXVpcmVkIC0tIHBsZWFzZSB1cGRhdGUgeW91ciBicm93c2VyLiI7dGhyb3cgYWxlcnQodSksbmV3IEVycm9yKHUpfWxldCBvPW4/LndlYldvcmtlcj8/bnVsbDtpZihvPT09ITEpe2xldCB1PWF3YWl0IG9uKEEudG9TdHJpbmcoKSxuPy5waXBlbGluZUJhc2VVcmwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/RkEoKSk7cmV0dXJuIEJ0KHUsZSxyLHQpfWxldCBpPW8sQz1uPy5waXBlbGluZVdvcmtlclVybD8/bm4oKSxsPXR5cGVvZiBDIT0ic3RyaW5nIiYmdHlwZW9mIEM/LmhyZWY8InUiP0MuaHJlZjpDLHt3b3JrZXJQcm94eTpCLHdvcmtlcjpJfT1hd2FpdCBvdChpLGwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/RkEoKSk7aT1JO2xldCBhPVtdO3QhPW51bGwmJnQubGVuZ3RoPjAmJnQuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1LnR5cGU9PT1kLkJpbmFyeVN0cmVhbSl7bGV0IG09dS5kYXRhLmRhdGE7YS5wdXNoKG0pfWVsc2UgaWYodS50eXBlPT09ZC5CaW5hcnlGaWxlKXtsZXQgbT11LmRhdGEuZGF0YTthLnB1c2gobSl9ZWxzZSBpZih1LnR5cGU9PT1kLkltYWdlKXtsZXQgbT11LmRhdGE7bS5kYXRhIT09bnVsbCYmYS5wdXNoKC4uLmN0KG0pKX1lbHNlIGlmKHUudHlwZT09PWQuTWVzaCl7bGV0IG09dS5kYXRhO2EucHVzaCguLi5FdChtKSl9ZWxzZSBpZih1LnR5cGU9PT1kLlBvbHlEYXRhKXtsZXQgbT11LmRhdGE7YS5wdXNoKC4uLlF0KG0pKX19KTtsZXQgUT1uPy5waXBlbGluZUJhc2VVcmw/P3V0KCksZz10eXBlb2YgUSE9InN0cmluZyImJnR5cGVvZiBRPy5ocmVmPCJ1Ij9RLmhyZWY6USxjPXQhPW51bGw/T0EodCxsdChhLG4/Lm5vQ29weSkpOm51bGwsRT1hd2FpdCBCLnJ1blBpcGVsaW5lKEEudG9TdHJpbmcoKSxnLGUscixjLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P0ZBKCkpO3JldHVybntyZXR1cm5WYWx1ZTpFLnJldHVyblZhbHVlLHN0ZG91dDpFLnN0ZG91dCxzdGRlcnI6RS5zdGRlcnIsb3V0cHV0czpFLm91dHB1dHMsd2ViV29ya2VyOml9fXZhciBvQT1hbjt2YXIgc249bnVsbDtmdW5jdGlvbiBwdCgpe3JldHVybiBzbn12YXIgaWUsSW49YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGl0ay13YXNtL2NvbXBhcmUtaW1hZ2VzQCR7UkF9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBScyhBKXtpZT1BfWZ1bmN0aW9uIGtBKCl7aWYodHlwZW9mIGllPCJ1IilyZXR1cm4gaWU7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6SW59dmFyIGFlLGduPW51bGw7ZnVuY3Rpb24gZHQoQSl7YWU9QX1mdW5jdGlvbiB2KCl7aWYodHlwZW9mIGFlPCJ1IilyZXR1cm4gYWU7bGV0IEE9YkEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6Z259dmFyIF89bnVsbDthc3luYyBmdW5jdGlvbiBtdCgpe2xldCBBPXYoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO189YXdhaXQgbkEoZSl9ZnVuY3Rpb24gT3MoQSl7Xz1BfWFzeW5jIGZ1bmN0aW9uIHl0KCl7aWYoXyE9PW51bGwpcmV0dXJuIF8udGVybWluYXRlZCYmYXdhaXQgbXQoKSxfO2xldCBBPXB0KCk7cmV0dXJuIEEhPT1udWxsP0E6KGF3YWl0IG10KCksXyl9YXN5bmMgZnVuY3Rpb24gQ24oQSxlPXtiYXNlbGluZUltYWdlczpbXX0pe2xldCByPVt7dHlwZTpkLkpzb25Db21wYXRpYmxlfSx7dHlwZTpkLkltYWdlfSx7dHlwZTpkLkltYWdlfV0sdD1be3R5cGU6ZC5JbWFnZSxkYXRhOkF9XSxuPVtdO2lmKG4ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiMSIpLG4ucHVzaCgiMiIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgZS5iYXNlbGluZUltYWdlczwidSIpe2lmKGUuYmFzZWxpbmVJbWFnZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCciYmFzZWxpbmUtaW1hZ2VzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO24ucHVzaCgiLS1iYXNlbGluZS1pbWFnZXMiKSxhd2FpdCBQcm9taXNlLmFsbChlLmJhc2VsaW5lSW1hZ2VzLm1hcChhc3luYyBFPT57bGV0IHU9dC5sZW5ndGgudG9TdHJpbmcoKTt0LnB1c2goe3R5cGU6ZC5JbWFnZSxkYXRhOkV9KSxuLnB1c2godSl9KSl9dHlwZW9mIGUuZGlmZmVyZW5jZVRocmVzaG9sZDwidSImJm4ucHVzaCgiLS1kaWZmZXJlbmNlLXRocmVzaG9sZCIsZS5kaWZmZXJlbmNlVGhyZXNob2xkLnRvU3RyaW5nKCkpLHR5cGVvZiBlLnJhZGl1c1RvbGVyYW5jZTwidSImJm4ucHVzaCgiLS1yYWRpdXMtdG9sZXJhbmNlIixlLnJhZGl1c1RvbGVyYW5jZS50b1N0cmluZygpKSx0eXBlb2YgZS5zcGF0aWFsVG9sZXJhbmNlPCJ1IiYmbi5wdXNoKCItLXNwYXRpYWwtdG9sZXJhbmNlIixlLnNwYXRpYWxUb2xlcmFuY2UudG9TdHJpbmcoKSksdHlwZW9mIGUubnVtYmVyT2ZQaXhlbHNUb2xlcmFuY2U8InUiJiZuLnB1c2goIi0tbnVtYmVyLW9mLXBpeGVscy10b2xlcmFuY2UiLGUubnVtYmVyT2ZQaXhlbHNUb2xlcmFuY2UudG9TdHJpbmcoKSksdHlwZW9mIGUuaWdub3JlQm91bmRhcnlQaXhlbHM8InUiJiZlLmlnbm9yZUJvdW5kYXJ5UGl4ZWxzJiZuLnB1c2goIi0taWdub3JlLWJvdW5kYXJ5LXBpeGVscyIpO2xldCBCPSJjb21wYXJlLWRvdWJsZS1pbWFnZXMiLHt3ZWJXb3JrZXI6SSxyZXR1cm5WYWx1ZTphLHN0ZGVycjpRLG91dHB1dHM6Z309YXdhaXQgb0EoQixuLHIsdCx7cGlwZWxpbmVCYXNlVXJsOmtBKCkscGlwZWxpbmVXb3JrZXJVcmw6digpLHdlYldvcmtlcjplPy53ZWJXb3JrZXI/P251bGx9KTtpZihhIT09MCl0aHJvdyBuZXcgRXJyb3IoUSk7cmV0dXJue3dlYldvcmtlcjpJLG1ldHJpY3M6Z1swXS5kYXRhLGRpZmZlcmVuY2VJbWFnZTpnWzFdLmRhdGEsZGlmZmVyZW5jZVVjaGFyMmRJbWFnZTpnWzJdLmRhdGF9fXZhciBzZT1Dbjthc3luYyBmdW5jdGlvbiBCbihBLGUpe2xldCByPWU7aWYoci5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSE9PXcuRmxvYXQ2NCl7bGV0IHQ7ZS5pbWFnZVR5cGUucGl4ZWxUeXBlIT09Ri5TY2FsYXImJmUuaW1hZ2VUeXBlLnBpeGVsVHlwZSE9PUYuVmFyaWFibGVMZW5ndGhWZWN0b3ImJih0PUYuVmFyaWFibGVMZW5ndGhWZWN0b3IpLHI9aUEoZSx7Y29tcG9uZW50VHlwZTp3LkZsb2F0NjQscGl4ZWxUeXBlOnR9KX1lbHNlIGlmKGUuaW1hZ2VUeXBlLnBpeGVsVHlwZSE9PUYuU2NhbGFyJiZlLmltYWdlVHlwZS5waXhlbFR5cGUhPT1GLlZhcmlhYmxlTGVuZ3RoVmVjdG9yKXtsZXQgdD1GLlZhcmlhYmxlTGVuZ3RoVmVjdG9yO3I9aUEoZSx7cGl4ZWxUeXBlOnR9KX1yZXR1cm4gci5pbWFnZVR5cGUucGl4ZWxUeXBlPT09Ri5WYXJpYWJsZUxlbmd0aFZlY3RvciYmKHI9KGF3YWl0IEEocikpLm1hZ25pdHVkZUltYWdlKSxyfXZhciBJZT1Cbjthc3luYyBmdW5jdGlvbiBsbihBLGU9e30pe2xldCByPVt7dHlwZTpkLkltYWdlfV0sdD1be3R5cGU6ZC5JbWFnZSxkYXRhOkF9XSxuPVtdO24ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKTtsZXQgQz0idmVjdG9yLW1hZ25pdHVkZSIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgeXQoKSk7bGV0e3dlYldvcmtlcjpCLHJldHVyblZhbHVlOkksc3RkZXJyOmEsb3V0cHV0czpRfT1hd2FpdCBvQShDLG4scix0LHtwaXBlbGluZUJhc2VVcmw6a0EoKSxwaXBlbGluZVdvcmtlclVybDp2KCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEkhPT0wJiZhIT09IiIpdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6QixtYWduaXR1ZGVJbWFnZTpRWzBdPy5kYXRhfX12YXIgZ2U9bG47YXN5bmMgZnVuY3Rpb24gY24oQSxlPXtiYXNlbGluZUltYWdlczpbXX0pe2FzeW5jIGZ1bmN0aW9uIHIoaSl7bGV0e3dlYldvcmtlcjpDLG1hZ25pdHVkZUltYWdlOmx9PWF3YWl0IGdlKGkpO3JldHVybiBDPy50ZXJtaW5hdGUoKSx7bWFnbml0dWRlSW1hZ2U6bH19bGV0IHQ9YXdhaXQgSWUocixBKSxuPWF3YWl0IFByb21pc2UuYWxsKGUuYmFzZWxpbmVJbWFnZXMubWFwKGFzeW5jIGk9PmF3YWl0IEllKHIsaSkpKSxvPXsuLi5lfTtyZXR1cm4gby5iYXNlbGluZUltYWdlcz1uLHNlKHQsbyl9dmFyIEVuPWNuO3ZhciBodD0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgSUk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBlST0oQSx0KT0+e2Zvcih2YXIgSSBpbiB0KUlJKEEsSSx7Z2V0OnRbSV0sZW51bWVyYWJsZTohMH0pfTt2YXIgdkE9U3ltYm9sKCJDb21saW5rLnByb3h5IiksZ0k9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50Iiksckk9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLHBBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxlQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksJEE9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsb0k9e2NhbkhhbmRsZTpBPT4kQShBKSYmQVt2QV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTp0LHBvcnQyOkl9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gaUEoQSx0KSxbSSxbSV1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLG5JKEEpfX0saUk9e2NhbkhhbmRsZTpBPT4kQShBKSYmZUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgdDtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOkF9LFt0LFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LEF0PW5ldyBNYXAoW1sicHJveHkiLG9JXSxbInRocm93IixpSV1dKTtmdW5jdGlvbiBDSShBLHQpe2ZvcihsZXQgSSBvZiBBKWlmKHQ9PT1JfHxJPT09IioifHxJIGluc3RhbmNlb2YgUmVnRXhwJiZJLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaUEoQSx0PWdsb2JhbFRoaXMsST1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBlKGcpe2lmKCFnfHwhZy5kYXRhKXJldHVybjtpZighQ0koSSxnLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke2cub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpyLHR5cGU6byxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGcuZGF0YSksYT0oZy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChiKSxRO3RyeXtsZXQgQj1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixzKT0+ZltzXSxBKSxpPW4ucmVkdWNlKChmLHMpPT5mW3NdLEEpO3N3aXRjaChvKXtjYXNlIkdFVCI6UT1pO2JyZWFrO2Nhc2UiU0VUIjpCW24uc2xpY2UoLTEpWzBdXT1iKGcuZGF0YS52YWx1ZSksUT0hMDticmVhaztjYXNlIkFQUExZIjpRPWkuYXBwbHkoQixhKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBpKC4uLmEpO1E9YUkoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOnN9PW5ldyBNZXNzYWdlQ2hhbm5lbDtpQShBLHMpLFE9RkEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6UT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEIpe1E9e3ZhbHVlOkIsW2VBXTowfX1Qcm9taXNlLnJlc29sdmUoUSkuY2F0Y2goQj0+KHt2YWx1ZTpCLFtlQV06MH0pKS50aGVuKEI9PntsZXRbaSxmXT1vQShCKTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpLG89PT0iUkVMRUFTRSImJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGUpLHR0KHQpLHBBIGluIEEmJnR5cGVvZiBBW3BBXT09ImZ1bmN0aW9uIiYmQVtwQV0oKSl9KS5jYXRjaChCPT57bGV0W2ksZl09b0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtlQV06MH0pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZil9KX0pLHQuc3RhcnQmJnQuc3RhcnQoKX1mdW5jdGlvbiBCSShBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiB0dChBKXtCSShBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIG5JKEEsdCl7cmV0dXJuIFNBKEEsW10sdCl9ZnVuY3Rpb24gSUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIEl0KEEpe3JldHVybiBxKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3R0KEEpfSl9dmFyIGdBPW5ldyBXZWFrTWFwLHJBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCB0PShnQS5nZXQoQSl8fDApLTE7Z0Euc2V0KEEsdCksdD09PTAmJkl0KEEpfSk7ZnVuY3Rpb24gc0koQSx0KXtsZXQgST0oZ0EuZ2V0KHQpfHwwKSsxO2dBLnNldCh0LEkpLHJBJiZyQS5yZWdpc3RlcihBLHQsQSl9ZnVuY3Rpb24gUUkoQSl7ckEmJnJBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gU0EoQSx0PVtdLEk9ZnVuY3Rpb24oKXt9KXtsZXQgZT0hMSxnPW5ldyBQcm94eShJLHtnZXQocixvKXtpZihJQShlKSxvPT09ckkpcmV0dXJuKCk9PntRSShnKSxJdChBKSxlPSEwfTtpZihvPT09InRoZW4iKXtpZih0Lmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pmd9O2xldCBuPXEoQSx7dHlwZToiR0VUIixwYXRoOnQubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKGIpO3JldHVybiBuLnRoZW4uYmluZChuKX1yZXR1cm4gU0EoQSxbLi4udCxvXSl9LHNldChyLG8sbil7SUEoZSk7bGV0W2EsUV09b0Eobik7cmV0dXJuIHEoQSx7dHlwZToiU0VUIixwYXRoOlsuLi50LG9dLm1hcChCPT5CLnRvU3RyaW5nKCkpLHZhbHVlOmF9LFEpLnRoZW4oYil9LGFwcGx5KHIsbyxuKXtJQShlKTtsZXQgYT10W3QubGVuZ3RoLTFdO2lmKGE9PT1nSSlyZXR1cm4gcShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKGIpO2lmKGE9PT0iYmluZCIpcmV0dXJuIFNBKEEsdC5zbGljZSgwLC0xKSk7bGV0W1EsQl09X0Eobik7cmV0dXJuIHEoQSx7dHlwZToiQVBQTFkiLHBhdGg6dC5tYXAoaT0+aS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6UX0sQikudGhlbihiKX0sY29uc3RydWN0KHIsbyl7SUEoZSk7bGV0W24sYV09X0Eobyk7cmV0dXJuIHEoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOnQubWFwKFE9PlEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Om59LGEpLnRoZW4oYil9fSk7cmV0dXJuIHNJKGcsQSksZ31mdW5jdGlvbiBFSShBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBfQShBKXtsZXQgdD1BLm1hcChvQSk7cmV0dXJuW3QubWFwKEk9PklbMF0pLEVJKHQubWFwKEk9PklbMV0pKV19dmFyIGV0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEZBKEEsdCl7cmV0dXJuIGV0LnNldChBLHQpLEF9ZnVuY3Rpb24gYUkoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3ZBXTohMH0pfWZ1bmN0aW9uIG9BKEEpe2ZvcihsZXRbdCxJXW9mIEF0KWlmKEkuY2FuSGFuZGxlKEEpKXtsZXRbZSxnXT1JLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6dCx2YWx1ZTplfSxnXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZXQuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gYihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBBdC5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIHEoQSx0LEkpe3JldHVybiBuZXcgUHJvbWlzZShlPT57bGV0IGc9Y0koKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobyl7IW8uZGF0YXx8IW8uZGF0YS5pZHx8by5kYXRhLmlkIT09Z3x8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZShvLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmd9LHQpLEkpfSl9ZnVuY3Rpb24gY0koKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFcoQSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseSh0LGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpmSX09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6VUF9PU9iamVjdCxCQT0oQT0+dD0+e2xldCBJPWZJLmNhbGwodCk7cmV0dXJuIEFbSV18fChBW0ldPUkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxVPUE9PihBPUEudG9Mb3dlckNhc2UoKSx0PT5CQSh0KT09PUEpLG5BPUE9PnQ9PnR5cGVvZiB0PT09QSx7aXNBcnJheTpLfT1BcnJheSxaPW5BKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBsSShBKXtyZXR1cm4gQSE9PW51bGwmJiFaKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIVooQS5jb25zdHJ1Y3RvcikmJkYoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIGl0PVUoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gREkoQSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz90PUFycmF5QnVmZmVyLmlzVmlldyhBKTp0PUEmJkEuYnVmZmVyJiZpdChBLmJ1ZmZlciksdH12YXIgdUk9bkEoInN0cmluZyIpLEY9bkEoImZ1bmN0aW9uIiksQ3Q9bkEoIm51bWJlciIpLHNBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsaEk9QT0+QT09PSEwfHxBPT09ITEsQ0E9QT0+e2lmKEJBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IHQ9VUEoQSk7cmV0dXJuKHQ9PT1udWxsfHx0PT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZEk9VSgiRGF0ZSIpLHlJPVUoIkZpbGUiKSx3ST1VKCJCbG9iIiksbUk9VSgiRmlsZUxpc3QiKSxwST1BPT5zQShBKSYmRihBLnBpcGUpLFNJPUE9PntsZXQgdDtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxGKEEuYXBwZW5kKSYmKCh0PUJBKEEpKT09PSJmb3JtZGF0YSJ8fHQ9PT0ib2JqZWN0IiYmRihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxGST1VKCJVUkxTZWFyY2hQYXJhbXMiKSxSST1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gVihBLHQse2FsbE93bktleXM6ST0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBlLGc7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEsoQSkpZm9yKGU9MCxnPUEubGVuZ3RoO2U8ZztlKyspdC5jYWxsKG51bGwsQVtlXSxlLEEpO2Vsc2V7bGV0IHI9ST9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxvPXIubGVuZ3RoLG47Zm9yKGU9MDtlPG87ZSsrKW49cltlXSx0LmNhbGwobnVsbCxBW25dLG4sQSl9fWZ1bmN0aW9uIEJ0KEEsdCl7dD10LnRvTG93ZXJDYXNlKCk7bGV0IEk9T2JqZWN0LmtleXMoQSksZT1JLmxlbmd0aCxnO2Zvcig7ZS0tID4wOylpZihnPUlbZV0sdD09PWcudG9Mb3dlckNhc2UoKSlyZXR1cm4gZztyZXR1cm4gbnVsbH12YXIgbnQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxzdD1BPT4hWihBKSYmQSE9PW50O2Z1bmN0aW9uIE5BKCl7bGV0e2Nhc2VsZXNzOkF9PXN0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LEk9KGUsZyk9PntsZXQgcj1BJiZCdCh0LGcpfHxnO0NBKHRbcl0pJiZDQShlKT90W3JdPU5BKHRbcl0sZSk6Q0EoZSk/dFtyXT1OQSh7fSxlKTpLKGUpP3Rbcl09ZS5zbGljZSgpOnRbcl09ZX07Zm9yKGxldCBlPTAsZz1hcmd1bWVudHMubGVuZ3RoO2U8ZztlKyspYXJndW1lbnRzW2VdJiZWKGFyZ3VtZW50c1tlXSxJKTtyZXR1cm4gdH12YXIgTkk9KEEsdCxJLHthbGxPd25LZXlzOmV9PXt9KT0+KFYodCwoZyxyKT0+e0kmJkYoZyk/QVtyXT1XKGcsSSk6QVtyXT1nfSx7YWxsT3duS2V5czplfSksQSksVUk9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxHST0oQSx0LEksZSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6dC5wcm90b3R5cGV9KSxJJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLEkpfSxrST0oQSx0LEksZSk9PntsZXQgZyxyLG8sbj17fTtpZih0PXR8fHt9LEE9PW51bGwpcmV0dXJuIHQ7ZG97Zm9yKGc9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSkscj1nLmxlbmd0aDtyLS0gPjA7KW89Z1tyXSwoIWV8fGUobyxBLHQpKSYmIW5bb10mJih0W29dPUFbb10sbltvXT0hMCk7QT1JIT09ITEmJlVBKEEpfXdoaWxlKEEmJighSXx8SShBLHQpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB0fSxMST0oQSx0LEkpPT57QT1TdHJpbmcoQSksKEk9PT12b2lkIDB8fEk+QS5sZW5ndGgpJiYoST1BLmxlbmd0aCksSS09dC5sZW5ndGg7bGV0IGU9QS5pbmRleE9mKHQsSSk7cmV0dXJuIGUhPT0tMSYmZT09PUl9LEpJPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihLKEEpKXJldHVybiBBO2xldCB0PUEubGVuZ3RoO2lmKCFDdCh0KSlyZXR1cm4gbnVsbDtsZXQgST1uZXcgQXJyYXkodCk7Zm9yKDt0LS0gPjA7KUlbdF09QVt0XTtyZXR1cm4gSX0sSEk9KEE9PnQ9PkEmJnQgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJlVBKFVpbnQ4QXJyYXkpKSxZST0oQSx0KT0+e2xldCBlPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksZztmb3IoOyhnPWUubmV4dCgpKSYmIWcuZG9uZTspe2xldCByPWcudmFsdWU7dC5jYWxsKEEsclswXSxyWzFdKX19LGJJPShBLHQpPT57bGV0IEksZT1bXTtmb3IoOyhJPUEuZXhlYyh0KSkhPT1udWxsOyllLnB1c2goSSk7cmV0dXJuIGV9LE1JPVUoIkhUTUxGb3JtRWxlbWVudCIpLHFJPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKEksZSxnKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK2d9KSxydD0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9Pih0LEkpPT5BLmNhbGwodCxJKSkoT2JqZWN0LnByb3RvdHlwZSksS0k9VSgiUmVnRXhwIiksUXQ9KEEsdCk9PntsZXQgST1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxlPXt9O1YoSSwoZyxyKT0+e2xldCBvOyhvPXQoZyxyLEEpKSE9PSExJiYoZVtyXT1vfHxnKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsZSl9LE9JPUE9PntRdChBLCh0LEkpPT57aWYoRihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKEkpIT09LTEpcmV0dXJuITE7bGV0IGU9QVtJXTtpZihGKGUpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK0krIlwnIil9KX19KX0sVEk9KEEsdCk9PntsZXQgST17fSxlPWc9PntnLmZvckVhY2gocj0+e0lbcl09ITB9KX07cmV0dXJuIEsoQSk/ZShBKTplKFN0cmluZyhBKS5zcGxpdCh0KSksSX0sUEk9KCk9Pnt9LHhJPShBLHQpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTp0KSxSQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLG90PSIwMTIzNDU2Nzg5IixFdD17RElHSVQ6b3QsQUxQSEE6UkEsQUxQSEFfRElHSVQ6UkErUkEudG9VcHBlckNhc2UoKStvdH0sakk9KEE9MTYsdD1FdC5BTFBIQV9ESUdJVCk9PntsZXQgST0iIix7bGVuZ3RoOmV9PXQ7Zm9yKDtBLS07KUkrPXRbTWF0aC5yYW5kb20oKSplfDBdO3JldHVybiBJfTtmdW5jdGlvbiBXSShBKXtyZXR1cm4hIShBJiZGKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgWkk9QT0+e2xldCB0PW5ldyBBcnJheSgxMCksST0oZSxnKT0+e2lmKHNBKGUpKXtpZih0LmluZGV4T2YoZSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBlKSl7dFtnXT1lO2xldCByPUsoZSk/W106e307cmV0dXJuIFYoZSwobyxuKT0+e2xldCBhPUkobyxnKzEpOyFaKGEpJiYocltuXT1hKX0pLHRbZ109dm9pZCAwLHJ9fXJldHVybiBlfTtyZXR1cm4gSShBLDApfSxWST1VKCJBc3luY0Z1bmN0aW9uIiksWEk9QT0+QSYmKHNBKEEpfHxGKEEpKSYmRihBLnRoZW4pJiZGKEEuY2F0Y2gpLEM9e2lzQXJyYXk6Syxpc0FycmF5QnVmZmVyOml0LGlzQnVmZmVyOmxJLGlzRm9ybURhdGE6U0ksaXNBcnJheUJ1ZmZlclZpZXc6REksaXNTdHJpbmc6dUksaXNOdW1iZXI6Q3QsaXNCb29sZWFuOmhJLGlzT2JqZWN0OnNBLGlzUGxhaW5PYmplY3Q6Q0EsaXNVbmRlZmluZWQ6Wixpc0RhdGU6ZEksaXNGaWxlOnlJLGlzQmxvYjp3SSxpc1JlZ0V4cDpLSSxpc0Z1bmN0aW9uOkYsaXNTdHJlYW06cEksaXNVUkxTZWFyY2hQYXJhbXM6RkksaXNUeXBlZEFycmF5OkhJLGlzRmlsZUxpc3Q6bUksZm9yRWFjaDpWLG1lcmdlOk5BLGV4dGVuZDpOSSx0cmltOlJJLHN0cmlwQk9NOlVJLGluaGVyaXRzOkdJLHRvRmxhdE9iamVjdDprSSxraW5kT2Y6QkEsa2luZE9mVGVzdDpVLGVuZHNXaXRoOkxJLHRvQXJyYXk6SkksZm9yRWFjaEVudHJ5OllJLG1hdGNoQWxsOmJJLGlzSFRNTEZvcm06TUksaGFzT3duUHJvcGVydHk6cnQsaGFzT3duUHJvcDpydCxyZWR1Y2VEZXNjcmlwdG9yczpRdCxmcmVlemVNZXRob2RzOk9JLHRvT2JqZWN0U2V0OlRJLHRvQ2FtZWxDYXNlOnFJLG5vb3A6UEksdG9GaW5pdGVOdW1iZXI6eEksZmluZEtleTpCdCxnbG9iYWw6bnQsaXNDb250ZXh0RGVmaW5lZDpzdCxBTFBIQUJFVDpFdCxnZW5lcmF0ZVN0cmluZzpqSSxpc1NwZWNDb21wbGlhbnRGb3JtOldJLHRvSlNPTk9iamVjdDpaSSxpc0FzeW5jRm46VkksaXNUaGVuYWJsZTpYSX07ZnVuY3Rpb24gTyhBLHQsSSxlLGcpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxJJiYodGhpcy5jb25maWc9SSksZSYmKHRoaXMucmVxdWVzdD1lKSxnJiYodGhpcy5yZXNwb25zZT1nKX1DLmluaGVyaXRzKE8sRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpDLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBhdD1PLnByb3RvdHlwZSxjdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntjdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLGN0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXQsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Ty5mcm9tPShBLHQsSSxlLGcscik9PntsZXQgbz1PYmplY3QuY3JlYXRlKGF0KTtyZXR1cm4gQy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGEpe3JldHVybiBhIT09RXJyb3IucHJvdG90eXBlfSxuPT5uIT09ImlzQXhpb3NFcnJvciIpLE8uY2FsbChvLEEubWVzc2FnZSx0LEksZSxnKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxyJiZPYmplY3QuYXNzaWduKG8sciksb307dmFyIGw9Tzt2YXIgUUE9bnVsbDtmdW5jdGlvbiBHQShBKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KEEpfHxDLmlzQXJyYXkoQSl9ZnVuY3Rpb24gbHQoQSl7cmV0dXJuIEMuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gZnQoQSx0LEkpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihnLHIpe3JldHVybiBnPWx0KGcpLCFJJiZyPyJbIitnKyJdIjpnfSkuam9pbihJPyIuIjoiIik6dH1mdW5jdGlvbiB6SShBKXtyZXR1cm4gQy5pc0FycmF5KEEpJiYhQS5zb21lKEdBKX12YXIgX0k9Qy50b0ZsYXRPYmplY3QoQyx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHZJKEEsdCxJKXtpZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhRQXx8Rm9ybURhdGEpLEk9Qy50b0ZsYXRPYmplY3QoSSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIUMuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgZT1JLm1ldGFUb2tlbnMsZz1JLnZpc2l0b3J8fEIscj1JLmRvdHMsbz1JLmluZGV4ZXMsYT0oSS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZDLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIUMuaXNGdW5jdGlvbihnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIFEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoQy5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYSYmQy5pc0Jsb2IoRSkpdGhyb3cgbmV3IGwoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEMuaXNBcnJheUJ1ZmZlcihFKXx8Qy5pc1R5cGVkQXJyYXkoRSk/YSYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEIoRSxjLHUpe2xldCB5PUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoQy5lbmRzV2l0aChjLCJ7fSIpKWM9ZT9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKEMuaXNBcnJheShFKSYmekkoRSl8fChDLmlzRmlsZUxpc3QoRSl8fEMuZW5kc1dpdGgoYywiW10iKSkmJih5PUMudG9BcnJheShFKSkpcmV0dXJuIGM9bHQoYykseS5mb3JFYWNoKGZ1bmN0aW9uKE4sdEkpeyEoQy5pc1VuZGVmaW5lZChOKXx8Tj09PW51bGwpJiZ0LmFwcGVuZChvPT09ITA/ZnQoW2NdLHRJLHIpOm89PT1udWxsP2M6YysiW10iLFEoTikpfSksITF9cmV0dXJuIEdBKEUpPyEwOih0LmFwcGVuZChmdCh1LGMsciksUShFKSksITEpfWxldCBpPVtdLGY9T2JqZWN0LmFzc2lnbihfSSx7ZGVmYXVsdFZpc2l0b3I6Qixjb252ZXJ0VmFsdWU6USxpc1Zpc2l0YWJsZTpHQX0pO2Z1bmN0aW9uIHMoRSxjKXtpZighQy5pc1VuZGVmaW5lZChFKSl7aWYoaS5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTtpLnB1c2goRSksQy5mb3JFYWNoKEUsZnVuY3Rpb24oeSxSKXsoIShDLmlzVW5kZWZpbmVkKHkpfHx5PT09bnVsbCkmJmcuY2FsbCh0LHksQy5pc1N0cmluZyhSKT9SLnRyaW0oKTpSLGMsZikpPT09ITAmJnMoeSxjP2MuY29uY2F0KFIpOltSXSl9KSxpLnBvcCgpfX1pZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIHMoQSksdH12YXIgSj12STtmdW5jdGlvbiBEdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIHV0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmSihBLHRoaXMsdCl9dmFyIGh0PXV0LnByb3RvdHlwZTtodC5hcHBlbmQ9ZnVuY3Rpb24odCxJKXt0aGlzLl9wYWlycy5wdXNoKFt0LEldKX07aHQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IEk9dD9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxEdCl9OkR0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIEkoZ1swXSkrIj0iK0koZ1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciBFQT11dDtmdW5jdGlvbiAkSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiBYKEEsdCxJKXtpZighdClyZXR1cm4gQTtsZXQgZT1JJiZJLmVuY29kZXx8JEksZz1JJiZJLnNlcmlhbGl6ZSxyO2lmKGc/cj1nKHQsSSk6cj1DLmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcgRUEodCxJKS50b1N0cmluZyhlKSxyKXtsZXQgbz1BLmluZGV4T2YoIiUyMyIpO28hPT0tMSYmKEE9QS5zbGljZSgwLG8pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStyfXJldHVybiBBfXZhciBrQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsSSxlKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDpJLHN5bmNocm9ub3VzOmU/ZS5zeW5jaHJvbm91czohMSxydW5XaGVuOmU/ZS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7Qy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oZSl7ZSE9PW51bGwmJnQoZSl9KX19LExBPWtBO3ZhciBhQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGR0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpFQTt2YXIgeXQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciB3dD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBtdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpkdCxGb3JtRGF0YTp5dCxCbG9iOnd0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIEpBPXt9O2VJKEpBLHtoYXNCcm93c2VyRW52OigpPT5wdCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFlLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+dGV9KTt2YXIgcHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsQWU9KEE9PnB0JiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksdGU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciB3PXsuLi5KQSwuLi5tdH07ZnVuY3Rpb24gSEEoQSx0KXtyZXR1cm4gSihBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oSSxlLGcscil7cmV0dXJuIHcuaXNOb2RlJiZDLmlzQnVmZmVyKEkpPyh0aGlzLmFwcGVuZChlLEkudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6ci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gSWUoQSl7cmV0dXJuIEMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBlZShBKXtsZXQgdD17fSxJPU9iamVjdC5rZXlzKEEpLGUsZz1JLmxlbmd0aCxyO2ZvcihlPTA7ZTxnO2UrKylyPUlbZV0sdFtyXT1BW3JdO3JldHVybiB0fWZ1bmN0aW9uIGdlKEEpe2Z1bmN0aW9uIHQoSSxlLGcscil7bGV0IG89SVtyKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgbj1OdW1iZXIuaXNGaW5pdGUoK28pLGE9cj49SS5sZW5ndGg7cmV0dXJuIG89IW8mJkMuaXNBcnJheShnKT9nLmxlbmd0aDpvLGE/KEMuaGFzT3duUHJvcChnLG8pP2dbb109W2dbb10sZV06Z1tvXT1lLCFuKTooKCFnW29dfHwhQy5pc09iamVjdChnW29dKSkmJihnW29dPVtdKSx0KEksZSxnW29dLHIpJiZDLmlzQXJyYXkoZ1tvXSkmJihnW29dPWVlKGdbb10pKSwhbil9aWYoQy5pc0Zvcm1EYXRhKEEpJiZDLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IEk9e307cmV0dXJuIEMuZm9yRWFjaEVudHJ5KEEsKGUsZyk9Pnt0KEllKGUpLGcsSSwwKX0pLEl9cmV0dXJuIG51bGx9dmFyIGNBPWdlO2Z1bmN0aW9uIHJlKEEsdCxJKXtpZihDLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksQy50cmltKEEpfWNhdGNoKGUpe2lmKGUubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgZX1yZXR1cm4oSXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBZQT17dHJhbnNpdGlvbmFsOmFBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxJKXtsZXQgZT1JLmdldENvbnRlbnRUeXBlKCl8fCIiLGc9ZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEscj1DLmlzT2JqZWN0KHQpO2lmKHImJkMuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxDLmlzRm9ybURhdGEodCkpcmV0dXJuIGc/SlNPTi5zdHJpbmdpZnkoY0EodCkpOnQ7aWYoQy5pc0FycmF5QnVmZmVyKHQpfHxDLmlzQnVmZmVyKHQpfHxDLmlzU3RyZWFtKHQpfHxDLmlzRmlsZSh0KXx8Qy5pc0Jsb2IodCkpcmV0dXJuIHQ7aWYoQy5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoQy5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IG47aWYocil7aWYoZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gSEEodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChuPUMuaXNGaWxlTGlzdCh0KSl8fGUuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEoobj97ImZpbGVzW10iOnR9OnQsYSYmbmV3IGEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiByfHxnPyhJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSkscmUodCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IEk9dGhpcy50cmFuc2l0aW9uYWx8fFlBLnRyYW5zaXRpb25hbCxlPUkmJkkuZm9yY2VkSlNPTlBhcnNpbmcsZz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZih0JiZDLmlzU3RyaW5nKHQpJiYoZSYmIXRoaXMucmVzcG9uc2VUeXBlfHxnKSl7bGV0IG89IShJJiZJLnNpbGVudEpTT05QYXJzaW5nKSYmZzt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2gobil7aWYobyl0aHJvdyBuLm5hbWU9PT0iU3ludGF4RXJyb3IiP2wuZnJvbShuLGwuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bn19cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57WUEuaGVhZGVyc1tBXT17fX0pO3ZhciBUPVlBO3ZhciBvZT1DLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLFN0PUE9PntsZXQgdD17fSxJLGUsZztyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihvKXtnPW8uaW5kZXhPZigiOiIpLEk9by5zdWJzdHJpbmcoMCxnKS50cmltKCkudG9Mb3dlckNhc2UoKSxlPW8uc3Vic3RyaW5nKGcrMSkudHJpbSgpLCEoIUl8fHRbSV0mJm9lW0ldKSYmKEk9PT0ic2V0LWNvb2tpZSI/dFtJXT90W0ldLnB1c2goZSk6dFtJXT1bZV06dFtJXT10W0ldP3RbSV0rIiwgIitlOmUpfSksdH07dmFyIEZ0PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24geihBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpDLmlzQXJyYXkoQSk/QS5tYXAoZkEpOlN0cmluZyhBKX1mdW5jdGlvbiBpZShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLEk9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxlO2Zvcig7ZT1JLmV4ZWMoQSk7KXRbZVsxXV09ZVsyXTtyZXR1cm4gdH12YXIgQ2U9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gYkEoQSx0LEksZSxnKXtpZihDLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHQsSSk7aWYoZyYmKHQ9SSksISFDLmlzU3RyaW5nKHQpKXtpZihDLmlzU3RyaW5nKGUpKXJldHVybiB0LmluZGV4T2YoZSkhPT0tMTtpZihDLmlzUmVnRXhwKGUpKXJldHVybiBlLnRlc3QodCl9fWZ1bmN0aW9uIEJlKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxJLGUpPT5JLnRvVXBwZXJDYXNlKCkrZSl9ZnVuY3Rpb24gbmUoQSx0KXtsZXQgST1DLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGUrSSx7dmFsdWU6ZnVuY3Rpb24oZyxyLG8pe3JldHVybiB0aGlzW2VdLmNhbGwodGhpcyx0LGcscixvKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxJLGUpe2xldCBnPXRoaXM7ZnVuY3Rpb24gcihuLGEsUSl7bGV0IEI9eihhKTtpZighQil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGk9Qy5maW5kS2V5KGcsQik7KCFpfHxnW2ldPT09dm9pZCAwfHxRPT09ITB8fFE9PT12b2lkIDAmJmdbaV0hPT0hMSkmJihnW2l8fGFdPWZBKG4pKX1sZXQgbz0obixhKT0+Qy5mb3JFYWNoKG4sKFEsQik9PnIoUSxCLGEpKTtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKHQsSSk6Qy5pc1N0cmluZyh0KSYmKHQ9dC50cmltKCkpJiYhQ2UodCk/byhTdCh0KSxJKTp0IT1udWxsJiZyKEksdCxlKSx0aGlzfWdldCh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtpZihlKXtsZXQgZz10aGlzW2VdO2lmKCFJKXJldHVybiBnO2lmKEk9PT0hMClyZXR1cm4gaWUoZyk7aWYoQy5pc0Z1bmN0aW9uKEkpKXJldHVybiBJLmNhbGwodGhpcyxnLGUpO2lmKEMuaXNSZWdFeHAoSSkpcmV0dXJuIEkuZXhlYyhnKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKGUmJnRoaXNbZV0hPT12b2lkIDAmJighSXx8YkEodGhpcyx0aGlzW2VdLGUsSSkpKX1yZXR1cm4hMX1kZWxldGUodCxJKXtsZXQgZT10aGlzLGc9ITE7ZnVuY3Rpb24gcihvKXtpZihvPXoobyksbyl7bGV0IG49Qy5maW5kS2V5KGUsbyk7biYmKCFJfHxiQShlLGVbbl0sbixJKSkmJihkZWxldGUgZVtuXSxnPSEwKX19cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSxnfWNsZWFyKHQpe2xldCBJPU9iamVjdC5rZXlzKHRoaXMpLGU9SS5sZW5ndGgsZz0hMTtmb3IoO2UtLTspe2xldCByPUlbZV07KCF0fHxiQSh0aGlzLHRoaXNbcl0scix0LCEwKSkmJihkZWxldGUgdGhpc1tyXSxnPSEwKX1yZXR1cm4gZ31ub3JtYWxpemUodCl7bGV0IEk9dGhpcyxlPXt9O3JldHVybiBDLmZvckVhY2godGhpcywoZyxyKT0+e2xldCBvPUMuZmluZEtleShlLHIpO2lmKG8pe0lbb109ZkEoZyksZGVsZXRlIElbcl07cmV0dXJufWxldCBuPXQ/QmUocik6U3RyaW5nKHIpLnRyaW0oKTtuIT09ciYmZGVsZXRlIElbcl0sSVtuXT1mQShnKSxlW25dPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChlLGcpPT57ZSE9bnVsbCYmZSE9PSExJiYoSVtnXT10JiZDLmlzQXJyYXkoZSk/ZS5qb2luKCIsICIpOmUpfSksSX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxJXSk9PnQrIjogIitJKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5JKXtsZXQgZT1uZXcgdGhpcyh0KTtyZXR1cm4gSS5mb3JFYWNoKGc9PmUuc2V0KGcpKSxlfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgZT0odGhpc1tGdF09dGhpc1tGdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxnPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIobyl7bGV0IG49eihvKTtlW25dfHwobmUoZyxvKSxlW25dPSEwKX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLHRoaXN9fTtQLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtDLnJlZHVjZURlc2NyaXB0b3JzKFAucHJvdG90eXBlLCh7dmFsdWU6QX0sdCk9PntsZXQgST10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChlKXt0aGlzW0ldPWV9fX0pO0MuZnJlZXplTWV0aG9kcyhQKTt2YXIgbT1QO2Z1bmN0aW9uIF8oQSx0KXtsZXQgST10aGlzfHxULGU9dHx8SSxnPW0uZnJvbShlLmhlYWRlcnMpLHI9ZS5kYXRhO3JldHVybiBDLmZvckVhY2goQSxmdW5jdGlvbihuKXtyPW4uY2FsbChJLHIsZy5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxnLm5vcm1hbGl6ZSgpLHJ9ZnVuY3Rpb24gdihBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFJ0KEEsdCxJKXtsLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGwuRVJSX0NBTkNFTEVELHQsSSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1DLmluaGVyaXRzKFJ0LGwse19fQ0FOQ0VMX186ITB9KTt2YXIgSD1SdDtmdW5jdGlvbiBNQShBLHQsSSl7bGV0IGU9SS5jb25maWcudmFsaWRhdGVTdGF0dXM7IUkuc3RhdHVzfHwhZXx8ZShJLnN0YXR1cyk/QShJKTp0KG5ldyBsKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrSS5zdGF0dXMsW2wuRVJSX0JBRF9SRVFVRVNULGwuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihJLnN0YXR1cy8xMDApLTRdLEkuY29uZmlnLEkucmVxdWVzdCxJKSl9dmFyIE50PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsSSxlLGcscil7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07Qy5pc051bWJlcihJKSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoSSkudG9HTVRTdHJpbmcoKSksQy5pc1N0cmluZyhlKSYmby5wdXNoKCJwYXRoPSIrZSksQy5pc1N0cmluZyhnKSYmby5wdXNoKCJkb21haW49IitnKSxyPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gcUEoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gS0EoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uICQoQSx0KXtyZXR1cm4gQSYmIXFBKHQpP0tBKEEsdCk6dH12YXIgVXQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLGU7ZnVuY3Rpb24gZyhyKXtsZXQgbz1yO3JldHVybiB0JiYoSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLG89SS5ocmVmKSxJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbykse2hyZWY6SS5ocmVmLHByb3RvY29sOkkucHJvdG9jb2w/SS5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6SS5ob3N0LHNlYXJjaDpJLnNlYXJjaD9JLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDpJLmhhc2g/SS5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTpJLmhvc3RuYW1lLHBvcnQ6SS5wb3J0LHBhdGhuYW1lOkkucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP0kucGF0aG5hbWU6Ii8iK0kucGF0aG5hbWV9fXJldHVybiBlPWcod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG8pe2xldCBuPUMuaXNTdHJpbmcobyk/ZyhvKTpvO3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiBPQShBKXtsZXQgdD0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gdCYmdFsxXXx8IiJ9ZnVuY3Rpb24gc2UoQSx0KXtBPUF8fDEwO2xldCBJPW5ldyBBcnJheShBKSxlPW5ldyBBcnJheShBKSxnPTAscj0wLG87cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjFlMyxmdW5jdGlvbihhKXtsZXQgUT1EYXRlLm5vdygpLEI9ZVtyXTtvfHwobz1RKSxJW2ddPWEsZVtnXT1RO2xldCBpPXIsZj0wO2Zvcig7aSE9PWc7KWYrPUlbaSsrXSxpPWklQTtpZihnPShnKzEpJUEsZz09PXImJihyPShyKzEpJUEpLFEtbzx0KXJldHVybjtsZXQgcz1CJiZRLUI7cmV0dXJuIHM/TWF0aC5yb3VuZChmKjFlMy9zKTp2b2lkIDB9fXZhciBHdD1zZTtmdW5jdGlvbiBrdChBLHQpe2xldCBJPTAsZT1HdCg1MCwyNTApO3JldHVybiBnPT57bGV0IHI9Zy5sb2FkZWQsbz1nLmxlbmd0aENvbXB1dGFibGU/Zy50b3RhbDp2b2lkIDAsbj1yLUksYT1lKG4pLFE9cjw9bztJPXI7bGV0IEI9e2xvYWRlZDpyLHRvdGFsOm8scHJvZ3Jlc3M6bz9yL286dm9pZCAwLGJ5dGVzOm4scmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJm8mJlE/KG8tcikvYTp2b2lkIDAsZXZlbnQ6Z307Qlt0PyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEoQil9fXZhciBRZT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLEx0PVFlJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSSxlKXtsZXQgZz1BLmRhdGEscj1tLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm8sd2l0aFhTUkZUb2tlbjpufT1BLGE7ZnVuY3Rpb24gUSgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQjtpZihDLmlzRm9ybURhdGEoZykpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilyLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChCPXIuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4udV09Qj9CLnNwbGl0KCI7IikubWFwKHk9PnkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107ci5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLnVdLmpvaW4oIjsgIikpfX1sZXQgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgYz1BLmF1dGgudXNlcm5hbWV8fCIiLHU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShjKyI6Iit1KSl9bGV0IGY9JChBLmJhc2VVUkwsQS51cmwpO2kub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoZixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxpLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIHMoKXtpZighaSlyZXR1cm47bGV0IGM9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gaSYmaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkseT17ZGF0YTohb3x8bz09PSJ0ZXh0Inx8bz09PSJqc29uIj9pLnJlc3BvbnNlVGV4dDppLnJlc3BvbnNlLHN0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDppfTtNQShmdW5jdGlvbihOKXtJKE4pLFEoKX0sZnVuY3Rpb24oTil7ZShOKSxRKCl9LHkpLGk9bnVsbH1pZigib25sb2FkZW5kImluIGk/aS5vbmxvYWRlbmQ9czppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFpfHxpLnJlYWR5U3RhdGUhPT00fHxpLnN0YXR1cz09PTAmJiEoaS5yZXNwb25zZVVSTCYmaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocyl9LGkub25hYm9ydD1mdW5jdGlvbigpe2kmJihlKG5ldyBsKCJSZXF1ZXN0IGFib3J0ZWQiLGwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbCl9LGkub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IGwoIk5ldHdvcmsgRXJyb3IiLGwuRVJSX05FVFdPUkssQSxpKSksaT1udWxsfSxpLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIix5PUEudHJhbnNpdGlvbmFsfHxhQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksZShuZXcgbCh1LHkuY2xhcmlmeVRpbWVvdXRFcnJvcj9sLkVUSU1FRE9VVDpsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobiYmQy5pc0Z1bmN0aW9uKG4pJiYobj1uKEEpKSxufHxuIT09ITEmJlV0KGYpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmTnQucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfWc9PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gaSYmQy5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24odSx5KXtpLnNldFJlcXVlc3RIZWFkZXIoeSx1KX0pLEMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoaS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksbyYmbyE9PSJqc29uIiYmKGkucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS51cGxvYWQmJmkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYT1jPT57aSYmKGUoIWN8fGMudHlwZT9uZXcgSChudWxsLEEsaSk6YyksaS5hYm9ydCgpLGk9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9hKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IEU9T0EoZik7aWYoRSYmdy5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtlKG5ldyBsKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGwuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59aS5zZW5kKGd8fG51bGwpfSl9O3ZhciBUQT17aHR0cDpRQSx4aHI6THR9O0MuZm9yRWFjaChUQSwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBKdD1BPT5gLSAke0F9YCxFZT1BPT5DLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbEE9e2dldEFkYXB0ZXI6QT0+e0E9Qy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxJLGUsZz17fTtmb3IobGV0IHI9MDtyPHQ7cisrKXtJPUFbcl07bGV0IG87aWYoZT1JLCFFZShJKSYmKGU9VEFbKG89U3RyaW5nKEkpKS50b0xvd2VyQ2FzZSgpXSxlPT09dm9pZCAwKSl0aHJvdyBuZXcgbChgVW5rbm93biBhZGFwdGVyIFwnJHtvfVwnYCk7aWYoZSlicmVhaztnW298fCIlMjMiK3JdPWV9aWYoIWUpe2xldCByPU9iamVjdC5lbnRyaWVzKGcpLm1hcCgoW24sYV0pPT5gYWRhcHRlciAke259IGArKGE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPXQ/ci5sZW5ndGg+MT9gc2luY2UgOiUwQWArci5tYXAoSnQpLmpvaW4oYCUwQWApOiIgIitKdChyWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBsKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIGV9LGFkYXB0ZXJzOlRBfTtmdW5jdGlvbiBQQShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSChudWxsLEEpfWZ1bmN0aW9uIERBKEEpe3JldHVybiBQQShBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGxBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxULmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFBBKEEpLGUuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUpLGUuaGVhZGVycz1tLmZyb20oZS5oZWFkZXJzKSxlfSxmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8KFBBKEEpLGUmJmUucmVzcG9uc2UmJihlLnJlc3BvbnNlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlLnJlc3BvbnNlKSxlLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKGUucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChlKX0pfXZhciBIdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgST17fTtmdW5jdGlvbiBlKFEsQixpKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KFEpJiZDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZS5jYWxsKHtjYXNlbGVzczppfSxRLEIpOkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlKHt9LEIpOkMuaXNBcnJheShCKT9CLnNsaWNlKCk6Qn1mdW5jdGlvbiBnKFEsQixpKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSxpKX1lbHNlIHJldHVybiBlKFEsQixpKX1mdW5jdGlvbiByKFEsQil7aWYoIUMuaXNVbmRlZmluZWQoQikpcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG8oUSxCKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSl9ZWxzZSByZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbihRLEIsaSl7aWYoaSBpbiB0KXJldHVybiBlKFEsQik7aWYoaSBpbiBBKXJldHVybiBlKHZvaWQgMCxRKX1sZXQgYT17dXJsOnIsbWV0aG9kOnIsZGF0YTpyLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpuLGhlYWRlcnM6KFEsQik9PmcoSHQoUSksSHQoQiksITApfTtyZXR1cm4gQy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24oQil7bGV0IGk9YVtCXXx8ZyxmPWkoQVtCXSx0W0JdLEIpO0MuaXNVbmRlZmluZWQoZikmJmkhPT1ufHwoSVtCXT1mKX0pLEl9dmFyIHVBPSIxLjYuOCI7dmFyIHhBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSx0KT0+e3hBW0FdPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09PUF8fCJhIisodDwxPyJuICI6IiAiKStBfX0pO3ZhciBZdD17fTt4QS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxJLGUpe2Z1bmN0aW9uIGcocixvKXtyZXR1cm4iW0F4aW9zIHYiK3VBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK3IrIlwnIitvKyhlPyIuICIrZToiIil9cmV0dXJuKHIsbyxuKT0+e2lmKHQ9PT0hMSl0aHJvdyBuZXcgbChnKG8sIiBoYXMgYmVlbiByZW1vdmVkIisoST8iIGluICIrSToiIikpLGwuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBJJiYhWXRbb10mJihZdFtvXT0hMCxjb25zb2xlLndhcm4oZyhvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitJKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLHQ/dChyLG8sbik6ITB9fTtmdW5jdGlvbiBhZShBLHQsSSl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBsKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxnPWUubGVuZ3RoO2Zvcig7Zy0tID4wOyl7bGV0IHI9ZVtnXSxvPXRbcl07aWYobyl7bGV0IG49QVtyXSxhPW49PT12b2lkIDB8fG8obixyLEEpO2lmKGEhPT0hMCl0aHJvdyBuZXcgbCgib3B0aW9uICIrcisiIG11c3QgYmUgIithLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKEkhPT0hMCl0aHJvdyBuZXcgbCgiVW5rbm93biBvcHRpb24gIityLGwuRVJSX0JBRF9PUFRJT04pfX12YXIgaEE9e2Fzc2VydE9wdGlvbnM6YWUsdmFsaWRhdG9yczp4QX07dmFyIFk9aEEudmFsaWRhdG9ycyx4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdHM9dCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgTEEscmVzcG9uc2U6bmV3IExBfX1hc3luYyByZXF1ZXN0KHQsSSl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KHQsSSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgZztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShnPXt9KTpnPW5ldyBFcnJvcjtsZXQgcj1nLnN0YWNrP2cuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7ZS5zdGFjaz9yJiYhU3RyaW5nKGUuc3RhY2spLmVuZHNXaXRoKHIucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihlLnN0YWNrKz1gJTBBYCtyKTplLnN0YWNrPXJ9dGhyb3cgZX19X3JlcXVlc3QodCxJKXt0eXBlb2YgdD09InN0cmluZyI/KEk9SXx8e30sSS51cmw9dCk6ST10fHx7fSxJPWsodGhpcy5kZWZhdWx0cyxJKTtsZXR7dHJhbnNpdGlvbmFsOmUscGFyYW1zU2VyaWFsaXplcjpnLGhlYWRlcnM6cn09STtlIT09dm9pZCAwJiZoQS5hc3NlcnRPcHRpb25zKGUse3NpbGVudEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbil9LCExKSxnIT1udWxsJiYoQy5pc0Z1bmN0aW9uKGcpP0kucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOmd9OmhBLmFzc2VydE9wdGlvbnMoZyx7ZW5jb2RlOlkuZnVuY3Rpb24sc2VyaWFsaXplOlkuZnVuY3Rpb259LCEwKSksSS5tZXRob2Q9KEkubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89ciYmQy5tZXJnZShyLmNvbW1vbixyW0kubWV0aG9kXSk7ciYmQy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgcltFXX0pLEkuaGVhZGVycz1tLmNvbmNhdChvLHIpO2xldCBuPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3R5cGVvZiBjLnJ1bldoZW49PSJmdW5jdGlvbiImJmMucnVuV2hlbihJKT09PSExfHwoYT1hJiZjLnN5bmNocm9ub3VzLG4udW5zaGlmdChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKSl9KTtsZXQgUT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGMpe1EucHVzaChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKX0pO2xldCBCLGk9MCxmO2lmKCFhKXtsZXQgRT1bREEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxuKSxFLnB1c2guYXBwbHkoRSxRKSxmPUUubGVuZ3RoLEI9UHJvbWlzZS5yZXNvbHZlKEkpO2k8ZjspQj1CLnRoZW4oRVtpKytdLEVbaSsrXSk7cmV0dXJuIEJ9Zj1uLmxlbmd0aDtsZXQgcz1JO2ZvcihpPTA7aTxmOyl7bGV0IEU9bltpKytdLGM9bltpKytdO3RyeXtzPUUocyl9Y2F0Y2godSl7Yy5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXtCPURBLmNhbGwodGhpcyxzKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKGk9MCxmPVEubGVuZ3RoO2k8ZjspQj1CLnRoZW4oUVtpKytdLFFbaSsrXSk7cmV0dXJuIEJ9Z2V0VXJpKHQpe3Q9ayh0aGlzLmRlZmF1bHRzLHQpO2xldCBJPSQodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gWChJLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe3gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKEksZSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKGV8fHt9LHttZXRob2Q6dCx1cmw6SSxkYXRhOihlfHx7fSkuZGF0YX0pKX19KTtDLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBJKGUpe3JldHVybiBmdW5jdGlvbihyLG8sbil7cmV0dXJuIHRoaXMucmVxdWVzdChrKG58fHt9LHttZXRob2Q6dCxoZWFkZXJzOmU/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTpvfSkpfX14LnByb3RvdHlwZVt0XT1JKCkseC5wcm90b3R5cGVbdCsiRm9ybSJdPUkoITApfSk7dmFyIEFBPXg7dmFyIGpBPWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBJO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXtJPXJ9KTtsZXQgZT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGc9PntpZighZS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1lLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOyllLl9saXN0ZW5lcnNbcl0oZyk7ZS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1nPT57bGV0IHIsbz1uZXcgUHJvbWlzZShuPT57ZS5zdWJzY3JpYmUobikscj1ufSkudGhlbihnKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKHIpfSxvfSx0KGZ1bmN0aW9uKHIsbyxuKXtlLnJlYXNvbnx8KGUucmVhc29uPW5ldyBIKHIsbyxuKSxJKGUucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IEk9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7SSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEksMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihnKXt0PWd9KSxjYW5jZWw6dH19fSxidD1qQTtmdW5jdGlvbiBXQShBKXtyZXR1cm4gZnVuY3Rpb24oSSl7cmV0dXJuIEEuYXBwbHkobnVsbCxJKX19ZnVuY3Rpb24gWkEoQSl7cmV0dXJuIEMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFZBPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhWQSkuZm9yRWFjaCgoW0EsdF0pPT57VkFbdF09QX0pO3ZhciBNdD1WQTtmdW5jdGlvbiBxdChBKXtsZXQgdD1uZXcgQUEoQSksST1XKEFBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBDLmV4dGVuZChJLEFBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksQy5leHRlbmQoSSx0LG51bGwse2FsbE93bktleXM6ITB9KSxJLmNyZWF0ZT1mdW5jdGlvbihnKXtyZXR1cm4gcXQoayhBLGcpKX0sSX12YXIgaD1xdChUKTtoLkF4aW9zPUFBO2guQ2FuY2VsZWRFcnJvcj1IO2guQ2FuY2VsVG9rZW49YnQ7aC5pc0NhbmNlbD12O2guVkVSU0lPTj11QTtoLnRvRm9ybURhdGE9SjtoLkF4aW9zRXJyb3I9bDtoLkNhbmNlbD1oLkNhbmNlbGVkRXJyb3I7aC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtoLnNwcmVhZD1XQTtoLmlzQXhpb3NFcnJvcj1aQTtoLm1lcmdlQ29uZmlnPWs7aC5BeGlvc0hlYWRlcnM9bTtoLmZvcm1Ub0pTT049QT0+Y0EoQy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtoLmdldEFkYXB0ZXI9bEEuZ2V0QWRhcHRlcjtoLkh0dHBTdGF0dXNDb2RlPU10O2guZGVmYXVsdD1oO3ZhciBkQT1oO3ZhcntBeGlvczppbyxBeGlvc0Vycm9yOkNvLENhbmNlbGVkRXJyb3I6Qm8saXNDYW5jZWw6bm8sQ2FuY2VsVG9rZW46c28sVkVSU0lPTjpRbyxhbGw6RW8sQ2FuY2VsOmFvLGlzQXhpb3NFcnJvcjpjbyxzcHJlYWQ6Zm8sdG9Gb3JtRGF0YTpsbyxBeGlvc0hlYWRlcnM6RG8sSHR0cFN0YXR1c0NvZGU6dW8sZm9ybVRvSlNPTjpobyxnZXRBZGFwdGVyOnlvLG1lcmdlQ29uZmlnOndvfT1kQTt2YXIgdEEsTCx6QSxYQT17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe3pBPW5ldyBVaW50OEFycmF5KEwuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSx5QT1jbGFzc3tpbml0KCl7cmV0dXJuIHRBfHwodHlwZW9mIGZldGNoPCJ1Ij90QT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK0t0KS50aGVuKHQ9PnQuYXJyYXlCdWZmZXIoKSkudGhlbih0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0LFhBKSkudGhlbih0aGlzLl9pbml0KTp0QT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShLdCwiYmFzZTY0IiksWEEpLnRoZW4odGhpcy5faW5pdCksdEEpfV9pbml0KHQpe0w9dC5pbnN0YW5jZSxYQS5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUodCxJPTApe2lmKCFMKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBlPXQuYnl0ZUxlbmd0aCxnPUwuZXhwb3J0cy5tYWxsb2MoZSk7ekEuc2V0KHQsZyksST1JfHxOdW1iZXIoTC5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUoZyxlKSk7bGV0IHI9TC5leHBvcnRzLm1hbGxvYyhJKSxvPUwuZXhwb3J0cy5aU1REX2RlY29tcHJlc3MocixJLGcsZSksbj16QS5zbGljZShyLHIrbyk7cmV0dXJuIEwuZXhwb3J0cy5mcmVlKGcpLEwuZXhwb3J0cy5mcmVlKHIpLG59fSxLdD0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBPdD1uZXcgeUEsVHQ9ITE7YXN5bmMgZnVuY3Rpb24gY2UoQSx0LEkpe2xldCBlPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP2U9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP2U9QTplPWAke3R9LyR7QX1gLGUuZW5kc1dpdGgoIi5qcyIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTMpKSxlLmVuZHNXaXRoKCIud2FzbSIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTUpKTtsZXQgZz1gJHtlfS53YXNtYCxyPWF3YWl0IGRBLmdldChgJHtnfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6SX0pO1R0fHwoYXdhaXQgT3QuaW5pdCgpLFR0PSEwKTtsZXQgbj1PdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7ZX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIFB0PWNlO3ZhciB3QT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGZlKEEsdCxJKXtsZXQgZT1BLGc9QSxyPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKGU9bmV3IFVSTChBLmhyZWYpLGc9ZS5ocmVmKSx3QS5oYXMoZyk/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLFB0KGUsdCxJKSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIHh0PWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9dWU7ZnVuY3Rpb24gaGUoQSx0KXtsZXQgST1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e0k9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDg6e0k9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFMuVUludDE2OntJPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFMuSW50MTY6e0k9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7ST1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDMyOntJPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ0ludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQzMjp7ST1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDY0OntJPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ST1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ST1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIEl9dmFyIEc9aGU7dmFyIFp0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGp0PW5ldyBUZXh0RW5jb2RlcixXdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSx0KXtsZXQgST17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3Blbih0LEkuZmxhZ3MpLHI9QS5mc19zdGF0KHQpLnNpemUsbz1udWxsO1p0P289bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOm89bmV3IEFycmF5QnVmZmVyKHIpO2xldCBuPW5ldyBVaW50OEFycmF5KG8pO3JldHVybiBBLmZzX3JlYWQoZSxuLDAsciwwKSxBLmZzX2Nsb3NlKGUpLG59ZnVuY3Rpb24gVnQoQSx0LEkpe2xldCBlPW51bGw7WnQ/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoSSk6ZT1uZXcgQXJyYXlCdWZmZXIoSSk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxJKTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiBkKEEsdCxJLGUpe2xldCBnPTA7cmV0dXJuIHQhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGUsdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gTShBLHQsSSl7bGV0IGU9SlNPTi5zdHJpbmdpZnkodCksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gcChBLHQsSSxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLG89VnQoQSxnLHIpO3JldHVybiBHKGUsby5idWZmZXIpfWZ1bmN0aW9uIG1BKEEsdCl7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksZT1BLlVURjhUb1N0cmluZyhJKTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLHQsSSxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxCKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IGk9anQuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IGk9anQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IGk9US5kYXRhLmRhdGEsZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IGk9US5kYXRhLGY9ZChBLGkuZGF0YSxCLDApLHM9ZChBLGkuZGlyZWN0aW9uLEIsMSksRT10eXBlb2YgaS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShpLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOmkuaW1hZ2VUeXBlLG5hbWU6aS5uYW1lLG9yaWdpbjppLm9yaWdpbixzcGFjaW5nOmkuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsc2l6ZTppLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtNKEEsYyxCKTticmVha31jYXNlIEQuTWVzaDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5jZWxscyxCLDEpLEU9ZChBLGkucG9pbnREYXRhLEIsMiksYz1kKEEsaS5jZWxsRGF0YSxCLDMpLHU9e21lc2hUeXBlOmkubWVzaFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczppLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsY2VsbEJ1ZmZlclNpemU6aS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsdSxCKTticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkucG9pbnREYXRhLEIsMSksRT17cG9pbnRTZXRUeXBlOmkucG9pbnRTZXRUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YH07TShBLEUsQik7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnZlcnRpY2VzLEIsMSksRT1kKEEsaS5saW5lcyxCLDIpLGM9ZChBLGkucG9seWdvbnMsQiwzKSx1PWQoQSxpLnRyaWFuZ2xlU3RyaXBzLEIsNCkseT1kKEEsaS5wb2ludERhdGEsQiw1KSxSPWQoQSxpLnBvaW50RGF0YSxCLDYpLE49e3BvbHlEYXRhVHlwZTppLnBvbHlEYXRhVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6aS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsbGluZXNCdWZmZXJTaXplOmkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTppLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6aS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07TShBLE4sQik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgbz1BLmdldE1vZHVsZVN0ZG91dCgpLG49QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiBJIT1udWxsJiZJLmxlbmd0aD4wJiZyPT09MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7bGV0IGk9bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9e2RhdGE6V3QuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPUpTT04ucGFyc2UoV3QuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pO2k9e2RhdGE6VnQoQSxzLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgcz1tQShBLEIpO3MuZGF0YT1wKEEsQiwwLHMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLHMuZGlyZWN0aW9uPXAoQSxCLDEsai5GbG9hdDY0KSxzLm1ldGFkYXRhPW5ldyBNYXAocy5tZXRhZGF0YSksaT1zO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxzPjA/cy5jZWxscz1wKEEsQiwxLHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOnMuY2VsbHM9RyhzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMixzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsMyxzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwxLHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxqLkZsb2F0MzIpOnMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXkscy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9zLnZlcnRpY2VzPXAoQSxCLDEsUy5VSW50MzIpOnMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LHMubGluZXNCdWZmZXJTaXplPjA/cy5saW5lcz1wKEEsQiwyLFMuVUludDMyKTpzLmxpbmVzPW5ldyBVaW50MzJBcnJheSxzLnBvbHlnb25zQnVmZmVyU2l6ZT4wP3MucG9seWdvbnM9cChBLEIsMyxTLlVJbnQzMik6cy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXkscy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9zLnRyaWFuZ2xlU3RyaXBzPXAoQSxCLDQsUy5VSW50MzIpOnMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDUscy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsNixzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOlEudHlwZSxkYXRhOml9O2EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpyLHN0ZG91dDpvLHN0ZGVycjpuLG91dHB1dHM6YX19dmFyIFh0PXllO3ZhciB3ZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gbWUoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBJPVtdO2ZvcihsZXQgZT0wO2U8QS5sZW5ndGg7ZSsrKXtsZXQgZz1wZShBW2VdLHQpO2chPT1udWxsJiZJLnB1c2goZyl9cmV0dXJuIEl9ZnVuY3Rpb24gcGUoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBJPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP0k9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoST1BKSx3ZSYmSSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9JOkkuc2xpY2UoMCl9dmFyIHp0PW1lO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBfdD1TZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgdnQ9RmU7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyICR0PVJlO2FzeW5jIGZ1bmN0aW9uIE5lKEEsdCxJLGUpe2xldCBnPVh0KEEsdCxJLGUpLHI9W107cmV0dXJuIGcub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8udHlwZT09PUQuQmluYXJ5U3RyZWFtfHxvLnR5cGU9PT1ELkJpbmFyeUZpbGUpe2xldCBuPW8uZGF0YTtyLnB1c2gobil9ZWxzZSBpZihvLnR5cGU9PT1ELkltYWdlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLl90KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuTWVzaCl7bGV0IG49by5kYXRhO3IucHVzaCguLi52dChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELlBvbHlEYXRhKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLiR0KG4pKX19KSxGQShnLHp0KHIsITApKX12YXIgQUk9TmU7dmFyIFVlPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsSSxlLGcscil7bGV0IG89YXdhaXQgeHQoQSx0LHIpO3JldHVybiBhd2FpdCBBSShvLEksZSxnKX19O2lBKFVlKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO2R0KGh0KTtleHBvcnR7c2UgYXMgY29tcGFyZURvdWJsZUltYWdlcyxFbiBhcyBjb21wYXJlSW1hZ2VzLHl0IGFzIGdldERlZmF1bHRXZWJXb3JrZXIsdiBhcyBnZXRQaXBlbGluZVdvcmtlclVybCxrQSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLE9zIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsZHQgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsUnMgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCxnZSBhcyB2ZWN0b3JNYWduaXR1ZGUsUkEgYXMgdmVyc2lvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" +default_js_module = """data:text/javascript;base64,dmFyIER0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgU3Q9KEEsZSk9Pntmb3IodmFyIHIgaW4gZSlEdChBLHIse2dldDplW3JdLGVudW1lcmFibGU6ITB9KX07dmFyIGJ0PSI1LjIuMyIsUkE9YnQ7dmFyIEZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sZj1GdDt2YXIga3Q9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LHc9a3Q7ZnVuY3Rpb24gUnQoQSxlKXtsZXQgcj1udWxsO3N3aXRjaChBKXtjYXNlIGYuVUludDg6e3I9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDg6e3I9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIGYuVUludDE2OntyPW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIGYuSW50MTY6e3I9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLlVJbnQzMjp7cj1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDMyOntyPW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgZi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnI9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ0ludDY0QXJyYXkoZSk6cj1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIHcuRmxvYXQzMjp7cj1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2Ugdy5GbG9hdDY0OntyPW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7cj1udWxsO2JyZWFrfWNhc2UgbnVsbDp7cj1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHJ9dmFyIE49UnQ7dmFyIFV0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sRj1VdDt2YXIgVUE9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHI9Zi5VSW50OCx0PUYuU2NhbGFyLG49MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9cix0aGlzLnBpeGVsVHlwZT10LHRoaXMuY29tcG9uZW50cz1ufX0sQ2U9VUE7ZnVuY3Rpb24gTnQoQSxlLHIsdCxuKXtBW3QrciplXT1ufXZhciBCZT1OdDt2YXIgTkE9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IENlKXt0aGlzLmltYWdlVHlwZT1lO2xldCByPWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheShyKSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkociksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheShyKnIpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCB0PTA7dDxyO3QrKylCZSh0aGlzLmRpcmVjdGlvbixyLHQsdCwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHIpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LGxlPU5BO2Z1bmN0aW9uIEd0KEEsZSl7bGV0IHI9ey4uLkEuaW1hZ2VUeXBlfTtpZih0eXBlb2YgZTwidSImJnR5cGVvZiBlLnBpeGVsVHlwZTwidSImJihyLnBpeGVsVHlwZT1lLnBpeGVsVHlwZSxlLnBpeGVsVHlwZT09PUYuU2NhbGFyJiZyLmNvbXBvbmVudHMhPT0xKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYXN0IG11bHRpLWNvbXBvbmVudCBpbWFnZSB0byBhIHNjYWxhciBpbWFnZSIpO3R5cGVvZiBlPCJ1IiYmdHlwZW9mIGUuY29tcG9uZW50VHlwZTwidSImJmUuY29tcG9uZW50VHlwZSE9PUEuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUmJihyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlKTtsZXQgdD1uZXcgbGUocik7aWYodC5uYW1lPUEubmFtZSx0Lm9yaWdpbj1BcnJheS5mcm9tKEEub3JpZ2luKSx0LnNwYWNpbmc9QXJyYXkuZnJvbShBLnNwYWNpbmcpLHQuZGlyZWN0aW9uPUEuZGlyZWN0aW9uLnNsaWNlKCksdC5zaXplPUFycmF5LmZyb20oQS5zaXplKSx0Lm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKEEubWV0YWRhdGEpKSkpLEEuZGF0YSE9PW51bGwpaWYodHlwZW9mIGU8InUiJiZ0eXBlb2YgZS5jb21wb25lbnRUeXBlPCJ1IiYmZS5jb21wb25lbnRUeXBlIT09QS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goQS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBmLlVJbnQ4OmNhc2UgZi5JbnQ4OmNhc2UgZi5VSW50MTY6Y2FzZSBmLkludDE2OmNhc2UgZi5VSW50MzI6Y2FzZSBmLkludDMyOmNhc2Ugdy5GbG9hdDMyOmNhc2Ugdy5GbG9hdDY0OnN3aXRjaCh0LmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIGYuVUludDg6dC5kYXRhPW5ldyBVaW50OEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuVUludDE2OnQuZGF0YT1uZXcgVWludDE2QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuSW50MTY6dC5kYXRhPW5ldyBJbnQxNkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDMyOnQuZGF0YT1uZXcgSW50MzJBcnJheShBLmRhdGEpO2JyZWFrO2Nhc2Ugdy5GbG9hdDMyOnQuZGF0YT1uZXcgRmxvYXQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSB3LkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuVUludDY0OnQuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWs7Y2FzZSBmLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQuZGF0YS5sZW5ndGg7bisrKXQuZGF0YVtuXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWt9YnJlYWs7Y2FzZSBmLlVJbnQ2NDpjYXNlIGYuSW50NjQ6c3dpdGNoKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgZi5VSW50ODp0LmRhdGE9bmV3IFVpbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQxNjp0LmRhdGE9bmV3IFVpbnQxNkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgZi5JbnQxNjp0LmRhdGE9bmV3IEludDE2QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgZi5JbnQzMjp0LmRhdGE9bmV3IEludDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSB3LkZsb2F0MzI6dC5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSB3LkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQ2NDp0LmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG49QS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgbihBLmRhdGEubGVuZ3RoKSx0LmRhdGEhPW51bGwmJnQuZGF0YS5zZXQoQS5kYXRhLDApfXJldHVybiB0fXZhciBpQT1HdDt2YXIgTHQ9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybToiVHJhbnNmb3JtIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxkPUx0O3ZhciBFZT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxUdD1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxUQT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksR0E9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLHNBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxRZT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIix4dD17Y2FuSGFuZGxlOkE9PlFlKEEpJiZBW0VlXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOmUscG9ydDI6cn09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiB1ZShBLGUpLFtyLFtyXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCkseEEoQSl9fSxPdD17Y2FuSGFuZGxlOkE9PlFlKEEpJiZzQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBlO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ZT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OmU9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW2UsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sZmU9bmV3IE1hcChbWyJwcm94eSIseHRdLFsidGhyb3ciLE90XV0pO2Z1bmN0aW9uIFB0KEEsZSl7Zm9yKGxldCByIG9mIEEpaWYoZT09PXJ8fHI9PT0iKiJ8fHIgaW5zdGFuY2VvZiBSZWdFeHAmJnIudGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB1ZShBLGU9Z2xvYmFsVGhpcyxyPVsiKiJdKXtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHQobil7aWYoIW58fCFuLmRhdGEpcmV0dXJuO2lmKCFQdChyLG4ub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiAnJHtuLm9yaWdpbn0nIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpvLHR5cGU6aSxwYXRoOkN9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LG4uZGF0YSksbD0obi5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChQKSxCO3RyeXtsZXQgST1DLnNsaWNlKDAsLTEpLnJlZHVjZSgoUSxnKT0+UVtnXSxBKSxhPUMucmVkdWNlKChRLGcpPT5RW2ddLEEpO3N3aXRjaChpKXtjYXNlIkdFVCI6Qj1hO2JyZWFrO2Nhc2UiU0VUIjpJW0Muc2xpY2UoLTEpWzBdXT1QKG4uZGF0YS52YWx1ZSksQj0hMDticmVhaztjYXNlIkFQUExZIjpCPWEuYXBwbHkoSSxsKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBRPW5ldyBhKC4uLmwpO0I9cXQoUSl9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpRLHBvcnQyOmd9PW5ldyBNZXNzYWdlQ2hhbm5lbDt1ZShBLGcpLEI9T0EoUSxbUV0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6Qj12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEkpe0I9e3ZhbHVlOkksW3NBXTowfX1Qcm9taXNlLnJlc29sdmUoQikuY2F0Y2goST0+KHt2YWx1ZTpJLFtzQV06MH0pKS50aGVuKEk9PntsZXRbYSxRXT1DQShJKTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6b30pLFEpLGk9PT0iUkVMRUFTRSImJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHQpLHBlKGUpLEdBIGluIEEmJnR5cGVvZiBBW0dBXT09ImZ1bmN0aW9uIiYmQVtHQV0oKSl9KS5jYXRjaChJPT57bGV0W2EsUV09Q0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtzQV06MH0pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtpZDpvfSksUSl9KX0pLGUuc3RhcnQmJmUuc3RhcnQoKX1mdW5jdGlvbiBKdChBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBwZShBKXtKdChBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIHhBKEEsZSl7cmV0dXJuIExBKEEsW10sZSl9ZnVuY3Rpb24gYUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIGRlKEEpe3JldHVybiBNKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3BlKEEpfSl9dmFyIElBPW5ldyBXZWFrTWFwLGdBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBlPShJQS5nZXQoQSl8fDApLTE7SUEuc2V0KEEsZSksZT09PTAmJmRlKEEpfSk7ZnVuY3Rpb24gTXQoQSxlKXtsZXQgcj0oSUEuZ2V0KGUpfHwwKSsxO0lBLnNldChlLHIpLGdBJiZnQS5yZWdpc3RlcihBLGUsQSl9ZnVuY3Rpb24gSHQoQSl7Z0EmJmdBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gTEEoQSxlPVtdLHI9ZnVuY3Rpb24oKXt9KXtsZXQgdD0hMSxuPW5ldyBQcm94eShyLHtnZXQobyxpKXtpZihhQSh0KSxpPT09VEEpcmV0dXJuKCk9PntIdChuKSxkZShBKSx0PSEwfTtpZihpPT09InRoZW4iKXtpZihlLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pm59O2xldCBDPU0oQSx7dHlwZToiR0VUIixwYXRoOmUubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKFApO3JldHVybiBDLnRoZW4uYmluZChDKX1yZXR1cm4gTEEoQSxbLi4uZSxpXSl9LHNldChvLGksQyl7YUEodCk7bGV0W2wsQl09Q0EoQyk7cmV0dXJuIE0oQSx7dHlwZToiU0VUIixwYXRoOlsuLi5lLGldLm1hcChJPT5JLnRvU3RyaW5nKCkpLHZhbHVlOmx9LEIpLnRoZW4oUCl9LGFwcGx5KG8saSxDKXthQSh0KTtsZXQgbD1lW2UubGVuZ3RoLTFdO2lmKGw9PT1UdClyZXR1cm4gTShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKFApO2lmKGw9PT0iYmluZCIpcmV0dXJuIExBKEEsZS5zbGljZSgwLC0xKSk7bGV0W0IsSV09Y2UoQyk7cmV0dXJuIE0oQSx7dHlwZToiQVBQTFkiLHBhdGg6ZS5tYXAoYT0+YS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Qn0sSSkudGhlbihQKX0sY29uc3RydWN0KG8saSl7YUEodCk7bGV0W0MsbF09Y2UoaSk7cmV0dXJuIE0oQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOmUubWFwKEI9PkIudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkN9LGwpLnRoZW4oUCl9fSk7cmV0dXJuIE10KG4sQSksbn1mdW5jdGlvbiBZdChBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBjZShBKXtsZXQgZT1BLm1hcChDQSk7cmV0dXJuW2UubWFwKHI9PnJbMF0pLFl0KGUubWFwKHI9PnJbMV0pKV19dmFyIG1lPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIE9BKEEsZSl7cmV0dXJuIG1lLnNldChBLGUpLEF9ZnVuY3Rpb24gcXQoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W0VlXTohMH0pfWZ1bmN0aW9uIENBKEEpe2ZvcihsZXRbZSxyXW9mIGZlKWlmKHIuY2FuSGFuZGxlKEEpKXtsZXRbdCxuXT1yLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6ZSx2YWx1ZTp0fSxuXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sbWUuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gUChBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBmZS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIE0oQSxlLHIpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57bGV0IG49S3QoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIG8oaSl7IWkuZGF0YXx8IWkuZGF0YS5pZHx8aS5kYXRhLmlkIT09bnx8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksdChpLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOm59LGUpLHIpfSl9ZnVuY3Rpb24gS3QoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFYoQSxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseShlLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpXdH09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6TUF9PU9iamVjdCxsQT0oQT0+ZT0+e2xldCByPVd0LmNhbGwoZSk7cmV0dXJuIEFbcl18fChBW3JdPXIuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxHPUE9PihBPUEudG9Mb3dlckNhc2UoKSxlPT5sQShlKT09PUEpLGNBPUE9PmU9PnR5cGVvZiBlPT09QSx7aXNBcnJheTpIfT1BcnJheSx6PWNBKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBqdChBKXtyZXR1cm4gQSE9PW51bGwmJiF6KEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIXooQS5jb25zdHJ1Y3RvcikmJmsoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIERlPUcoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gdnQoQSl7bGV0IGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhBKTplPUEmJkEuYnVmZmVyJiZEZShBLmJ1ZmZlciksZX12YXIgX3Q9Y0EoInN0cmluZyIpLGs9Y0EoImZ1bmN0aW9uIiksU2U9Y0EoIm51bWJlciIpLEVBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsVnQ9QT0+QT09PSEwfHxBPT09ITEsQkE9QT0+e2lmKGxBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IGU9TUEoQSk7cmV0dXJuKGU9PT1udWxsfHxlPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0senQ9RygiRGF0ZSIpLFp0PUcoIkZpbGUiKSxYdD1HKCJCbG9iIiksJHQ9RygiRmlsZUxpc3QiKSxBcj1BPT5FQShBKSYmayhBLnBpcGUpLGVyPUE9PntsZXQgZTtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxrKEEuYXBwZW5kKSYmKChlPWxBKEEpKT09PSJmb3JtZGF0YSJ8fGU9PT0ib2JqZWN0IiYmayhBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSx0cj1HKCJVUkxTZWFyY2hQYXJhbXMiKSxycj1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gWihBLGUse2FsbE93bktleXM6cj0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCB0LG47aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEgoQSkpZm9yKHQ9MCxuPUEubGVuZ3RoO3Q8bjt0KyspZS5jYWxsKG51bGwsQVt0XSx0LEEpO2Vsc2V7bGV0IG89cj9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxpPW8ubGVuZ3RoLEM7Zm9yKHQ9MDt0PGk7dCsrKUM9b1t0XSxlLmNhbGwobnVsbCxBW0NdLEMsQSl9fWZ1bmN0aW9uIGJlKEEsZSl7ZT1lLnRvTG93ZXJDYXNlKCk7bGV0IHI9T2JqZWN0LmtleXMoQSksdD1yLmxlbmd0aCxuO2Zvcig7dC0tID4wOylpZihuPXJbdF0sZT09PW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gbjtyZXR1cm4gbnVsbH12YXIgRmU9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxrZT1BPT4heihBKSYmQSE9PUZlO2Z1bmN0aW9uIEpBKCl7bGV0e2Nhc2VsZXNzOkF9PWtlKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHI9KHQsbik9PntsZXQgbz1BJiZiZShlLG4pfHxuO0JBKGVbb10pJiZCQSh0KT9lW29dPUpBKGVbb10sdCk6QkEodCk/ZVtvXT1KQSh7fSx0KTpIKHQpP2Vbb109dC5zbGljZSgpOmVbb109dH07Zm9yKGxldCB0PTAsbj1hcmd1bWVudHMubGVuZ3RoO3Q8bjt0KyspYXJndW1lbnRzW3RdJiZaKGFyZ3VtZW50c1t0XSxyKTtyZXR1cm4gZX12YXIgbnI9KEEsZSxyLHthbGxPd25LZXlzOnR9PXt9KT0+KFooZSwobixvKT0+e3ImJmsobik/QVtvXT1WKG4scik6QVtvXT1ufSx7YWxsT3duS2V5czp0fSksQSksb3I9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxpcj0oQSxlLHIsdCk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHQpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6ZS5wcm90b3R5cGV9KSxyJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHIpfSxhcj0oQSxlLHIsdCk9PntsZXQgbixvLGksQz17fTtpZihlPWV8fHt9LEE9PW51bGwpcmV0dXJuIGU7ZG97Zm9yKG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksbz1uLmxlbmd0aDtvLS0gPjA7KWk9bltvXSwoIXR8fHQoaSxBLGUpKSYmIUNbaV0mJihlW2ldPUFbaV0sQ1tpXT0hMCk7QT1yIT09ITEmJk1BKEEpfXdoaWxlKEEmJighcnx8cihBLGUpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBlfSxzcj0oQSxlLHIpPT57QT1TdHJpbmcoQSksKHI9PT12b2lkIDB8fHI+QS5sZW5ndGgpJiYocj1BLmxlbmd0aCksci09ZS5sZW5ndGg7bGV0IHQ9QS5pbmRleE9mKGUscik7cmV0dXJuIHQhPT0tMSYmdD09PXJ9LElyPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihIKEEpKXJldHVybiBBO2xldCBlPUEubGVuZ3RoO2lmKCFTZShlKSlyZXR1cm4gbnVsbDtsZXQgcj1uZXcgQXJyYXkoZSk7Zm9yKDtlLS0gPjA7KXJbZV09QVtlXTtyZXR1cm4gcn0sZ3I9KEE9PmU9PkEmJmUgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJk1BKFVpbnQ4QXJyYXkpKSxDcj0oQSxlKT0+e2xldCB0PShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksbjtmb3IoOyhuPXQubmV4dCgpKSYmIW4uZG9uZTspe2xldCBvPW4udmFsdWU7ZS5jYWxsKEEsb1swXSxvWzFdKX19LEJyPShBLGUpPT57bGV0IHIsdD1bXTtmb3IoOyhyPUEuZXhlYyhlKSkhPT1udWxsOyl0LnB1c2gocik7cmV0dXJuIHR9LGxyPUcoIkhUTUxGb3JtRWxlbWVudCIpLGNyPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpK259KSxoZT0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihlLHIpPT5BLmNhbGwoZSxyKSkoT2JqZWN0LnByb3RvdHlwZSksRXI9RygiUmVnRXhwIiksUmU9KEEsZSk9PntsZXQgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSx0PXt9O1oociwobixvKT0+e2xldCBpOyhpPWUobixvLEEpKSE9PSExJiYodFtvXT1pfHxuKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsdCl9LFFyPUE9PntSZShBLChlLHIpPT57aWYoayhBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHIpIT09LTEpcmV0dXJuITE7bGV0IHQ9QVtyXTtpZihrKHQpKXtpZihlLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIGUpe2Uud3JpdGFibGU9ITE7cmV0dXJufWUuc2V0fHwoZS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrcisiJyIpfSl9fSl9LGZyPShBLGUpPT57bGV0IHI9e30sdD1uPT57bi5mb3JFYWNoKG89PntyW29dPSEwfSl9O3JldHVybiBIKEEpP3QoQSk6dChTdHJpbmcoQSkuc3BsaXQoZSkpLHJ9LHVyPSgpPT57fSxwcj0oQSxlKT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6ZSksUEE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix3ZT0iMDEyMzQ1Njc4OSIsVWU9e0RJR0lUOndlLEFMUEhBOlBBLEFMUEhBX0RJR0lUOlBBK1BBLnRvVXBwZXJDYXNlKCkrd2V9LGRyPShBPTE2LGU9VWUuQUxQSEFfRElHSVQpPT57bGV0IHI9IiIse2xlbmd0aDp0fT1lO2Zvcig7QS0tOylyKz1lW01hdGgucmFuZG9tKCkqdHwwXTtyZXR1cm4gcn07ZnVuY3Rpb24gbXIoQSl7cmV0dXJuISEoQSYmayhBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIHlyPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHI9KHQsbik9PntpZihFQSh0KSl7aWYoZS5pbmRleE9mKHQpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gdCkpe2Vbbl09dDtsZXQgbz1IKHQpP1tdOnt9O3JldHVybiBaKHQsKGksQyk9PntsZXQgbD1yKGksbisxKTsheihsKSYmKG9bQ109bCl9KSxlW25dPXZvaWQgMCxvfX1yZXR1cm4gdH07cmV0dXJuIHIoQSwwKX0saHI9RygiQXN5bmNGdW5jdGlvbiIpLHdyPUE9PkEmJihFQShBKXx8ayhBKSkmJmsoQS50aGVuKSYmayhBLmNhdGNoKSxzPXtpc0FycmF5OkgsaXNBcnJheUJ1ZmZlcjpEZSxpc0J1ZmZlcjpqdCxpc0Zvcm1EYXRhOmVyLGlzQXJyYXlCdWZmZXJWaWV3OnZ0LGlzU3RyaW5nOl90LGlzTnVtYmVyOlNlLGlzQm9vbGVhbjpWdCxpc09iamVjdDpFQSxpc1BsYWluT2JqZWN0OkJBLGlzVW5kZWZpbmVkOnosaXNEYXRlOnp0LGlzRmlsZTpadCxpc0Jsb2I6WHQsaXNSZWdFeHA6RXIsaXNGdW5jdGlvbjprLGlzU3RyZWFtOkFyLGlzVVJMU2VhcmNoUGFyYW1zOnRyLGlzVHlwZWRBcnJheTpncixpc0ZpbGVMaXN0OiR0LGZvckVhY2g6WixtZXJnZTpKQSxleHRlbmQ6bnIsdHJpbTpycixzdHJpcEJPTTpvcixpbmhlcml0czppcix0b0ZsYXRPYmplY3Q6YXIsa2luZE9mOmxBLGtpbmRPZlRlc3Q6RyxlbmRzV2l0aDpzcix0b0FycmF5OklyLGZvckVhY2hFbnRyeTpDcixtYXRjaEFsbDpCcixpc0hUTUxGb3JtOmxyLGhhc093blByb3BlcnR5OmhlLGhhc093blByb3A6aGUscmVkdWNlRGVzY3JpcHRvcnM6UmUsZnJlZXplTWV0aG9kczpRcix0b09iamVjdFNldDpmcix0b0NhbWVsQ2FzZTpjcixub29wOnVyLHRvRmluaXRlTnVtYmVyOnByLGZpbmRLZXk6YmUsZ2xvYmFsOkZlLGlzQ29udGV4dERlZmluZWQ6a2UsQUxQSEFCRVQ6VWUsZ2VuZXJhdGVTdHJpbmc6ZHIsaXNTcGVjQ29tcGxpYW50Rm9ybTptcix0b0pTT05PYmplY3Q6eXIsaXNBc3luY0ZuOmhyLGlzVGhlbmFibGU6d3J9O2Z1bmN0aW9uIFkoQSxlLHIsdCxuKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGUmJih0aGlzLmNvZGU9ZSksciYmKHRoaXMuY29uZmlnPXIpLHQmJih0aGlzLnJlcXVlc3Q9dCksbiYmKHRoaXMucmVzcG9uc2U9bil9cy5pbmhlcml0cyhZLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6cy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgTmU9WS5wcm90b3R5cGUsR2U9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57R2VbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWSxHZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE5lLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO1kuZnJvbT0oQSxlLHIsdCxuLG8pPT57bGV0IGk9T2JqZWN0LmNyZWF0ZShOZSk7cmV0dXJuIHMudG9GbGF0T2JqZWN0KEEsaSxmdW5jdGlvbihsKXtyZXR1cm4gbCE9PUVycm9yLnByb3RvdHlwZX0sQz0+QyE9PSJpc0F4aW9zRXJyb3IiKSxZLmNhbGwoaSxBLm1lc3NhZ2UsZSxyLHQsbiksaS5jYXVzZT1BLGkubmFtZT1BLm5hbWUsbyYmT2JqZWN0LmFzc2lnbihpLG8pLGl9O3ZhciBwPVk7dmFyIFFBPW51bGw7ZnVuY3Rpb24gSEEoQSl7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChBKXx8cy5pc0FycmF5KEEpfWZ1bmN0aW9uIFRlKEEpe3JldHVybiBzLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIExlKEEsZSxyKXtyZXR1cm4gQT9BLmNvbmNhdChlKS5tYXAoZnVuY3Rpb24obixvKXtyZXR1cm4gbj1UZShuKSwhciYmbz8iWyIrbisiXSI6bn0pLmpvaW4ocj8iLiI6IiIpOmV9ZnVuY3Rpb24gRHIoQSl7cmV0dXJuIHMuaXNBcnJheShBKSYmIUEuc29tZShIQSl9dmFyIFNyPXMudG9GbGF0T2JqZWN0KHMse30sbnVsbCxmdW5jdGlvbihlKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoZSl9KTtmdW5jdGlvbiBicihBLGUscil7aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ZT1lfHxuZXcoUUF8fEZvcm1EYXRhKSxyPXMudG9GbGF0T2JqZWN0KHIse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihFLHUpe3JldHVybiFzLmlzVW5kZWZpbmVkKHVbRV0pfSk7bGV0IHQ9ci5tZXRhVG9rZW5zLG49ci52aXNpdG9yfHxJLG89ci5kb3RzLGk9ci5pbmRleGVzLGw9KHIuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmcy5pc1NwZWNDb21wbGlhbnRGb3JtKGUpO2lmKCFzLmlzRnVuY3Rpb24obikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBCKGMpe2lmKGM9PT1udWxsKXJldHVybiIiO2lmKHMuaXNEYXRlKGMpKXJldHVybiBjLnRvSVNPU3RyaW5nKCk7aWYoIWwmJnMuaXNCbG9iKGMpKXRocm93IG5ldyBwKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBzLmlzQXJyYXlCdWZmZXIoYyl8fHMuaXNUeXBlZEFycmF5KGMpP2wmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtjXSk6QnVmZmVyLmZyb20oYyk6Y31mdW5jdGlvbiBJKGMsRSx1KXtsZXQgbT1jO2lmKGMmJiF1JiZ0eXBlb2YgYz09Im9iamVjdCIpe2lmKHMuZW5kc1dpdGgoRSwie30iKSlFPXQ/RTpFLnNsaWNlKDAsLTIpLGM9SlNPTi5zdHJpbmdpZnkoYyk7ZWxzZSBpZihzLmlzQXJyYXkoYykmJkRyKGMpfHwocy5pc0ZpbGVMaXN0KGMpfHxzLmVuZHNXaXRoKEUsIltdIikpJiYobT1zLnRvQXJyYXkoYykpKXJldHVybiBFPVRlKEUpLG0uZm9yRWFjaChmdW5jdGlvbihVLHd0KXshKHMuaXNVbmRlZmluZWQoVSl8fFU9PT1udWxsKSYmZS5hcHBlbmQoaT09PSEwP0xlKFtFXSx3dCxvKTppPT09bnVsbD9FOkUrIltdIixCKFUpKX0pLCExfXJldHVybiBIQShjKT8hMDooZS5hcHBlbmQoTGUodSxFLG8pLEIoYykpLCExKX1sZXQgYT1bXSxRPU9iamVjdC5hc3NpZ24oU3Ise2RlZmF1bHRWaXNpdG9yOkksY29udmVydFZhbHVlOkIsaXNWaXNpdGFibGU6SEF9KTtmdW5jdGlvbiBnKGMsRSl7aWYoIXMuaXNVbmRlZmluZWQoYykpe2lmKGEuaW5kZXhPZihjKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitFLmpvaW4oIi4iKSk7YS5wdXNoKGMpLHMuZm9yRWFjaChjLGZ1bmN0aW9uKG0sUil7KCEocy5pc1VuZGVmaW5lZChtKXx8bT09PW51bGwpJiZuLmNhbGwoZSxtLHMuaXNTdHJpbmcoUik/Ui50cmltKCk6UixFLFEpKT09PSEwJiZnKG0sRT9FLmNvbmNhdChSKTpbUl0pfSksYS5wb3AoKX19aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBnKEEpLGV9dmFyIFQ9YnI7ZnVuY3Rpb24geGUoQSl7bGV0IGU9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KX1mdW5jdGlvbiBPZShBLGUpe3RoaXMuX3BhaXJzPVtdLEEmJlQoQSx0aGlzLGUpfXZhciBQZT1PZS5wcm90b3R5cGU7UGUuYXBwZW5kPWZ1bmN0aW9uKGUscil7dGhpcy5fcGFpcnMucHVzaChbZSxyXSl9O1BlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe2xldCByPWU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzLHQseGUpfTp4ZTtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiByKG5bMF0pKyI9IityKG5bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgZkE9T2U7ZnVuY3Rpb24gRnIoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gWChBLGUscil7aWYoIWUpcmV0dXJuIEE7bGV0IHQ9ciYmci5lbmNvZGV8fEZyLG49ciYmci5zZXJpYWxpemUsbztpZihuP289bihlLHIpOm89cy5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IGZBKGUscikudG9TdHJpbmcodCksbyl7bGV0IGk9QS5pbmRleE9mKCIjIik7aSE9PS0xJiYoQT1BLnNsaWNlKDAsaSkpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK299cmV0dXJuIEF9dmFyIFlBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSxyLHQpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnIsc3luY2hyb25vdXM6dD90LnN5bmNocm9ub3VzOiExLHJ1bldoZW46dD90LnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXtzLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbih0KXt0IT09bnVsbCYmZSh0KX0pfX0scUE9WUE7dmFyIHVBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgSmU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOmZBO3ZhciBNZT10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIEhlPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIFllPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOkplLEZvcm1EYXRhOk1lLEJsb2I6SGV9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgS0E9e307U3QoS0Ese2hhc0Jyb3dzZXJFbnY6KCk9PnFlLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+a3IsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5Scn0pO3ZhciBxZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixrcj0oQT0+cWUmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxScj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIEQ9ey4uLktBLC4uLlllfTtmdW5jdGlvbiBXQShBLGUpe3JldHVybiBUKEEsbmV3IEQuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihyLHQsbixvKXtyZXR1cm4gRC5pc05vZGUmJnMuaXNCdWZmZXIocik/KHRoaXMuYXBwZW5kKHQsci50b1N0cmluZygiYmFzZTY0IikpLCExKTpvLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBVcihBKXtyZXR1cm4gcy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIE5yKEEpe2xldCBlPXt9LHI9T2JqZWN0LmtleXMoQSksdCxuPXIubGVuZ3RoLG87Zm9yKHQ9MDt0PG47dCsrKW89clt0XSxlW29dPUFbb107cmV0dXJuIGV9ZnVuY3Rpb24gR3IoQSl7ZnVuY3Rpb24gZShyLHQsbixvKXtsZXQgaT1yW28rK107aWYoaT09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBDPU51bWJlci5pc0Zpbml0ZSgraSksbD1vPj1yLmxlbmd0aDtyZXR1cm4gaT0haSYmcy5pc0FycmF5KG4pP24ubGVuZ3RoOmksbD8ocy5oYXNPd25Qcm9wKG4saSk/bltpXT1bbltpXSx0XTpuW2ldPXQsIUMpOigoIW5baV18fCFzLmlzT2JqZWN0KG5baV0pKSYmKG5baV09W10pLGUocix0LG5baV0sbykmJnMuaXNBcnJheShuW2ldKSYmKG5baV09TnIobltpXSkpLCFDKX1pZihzLmlzRm9ybURhdGEoQSkmJnMuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgcj17fTtyZXR1cm4gcy5mb3JFYWNoRW50cnkoQSwodCxuKT0+e2UoVXIodCksbixyLDApfSkscn1yZXR1cm4gbnVsbH12YXIgcEE9R3I7ZnVuY3Rpb24gTHIoQSxlLHIpe2lmKHMuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxzLnRyaW0oQSl9Y2F0Y2godCl7aWYodC5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyB0fXJldHVybihyfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIGpBPXt0cmFuc2l0aW9uYWw6dUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHIpe2xldCB0PXIuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj10LmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPXMuaXNPYmplY3QoZSk7aWYobyYmcy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLHMuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShwQShlKSk6ZTtpZihzLmlzQXJyYXlCdWZmZXIoZSl8fHMuaXNCdWZmZXIoZSl8fHMuaXNTdHJlYW0oZSl8fHMuaXNGaWxlKGUpfHxzLmlzQmxvYihlKSlyZXR1cm4gZTtpZihzLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihzLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiByLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgQztpZihvKXtpZih0LmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBXQShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEM9cy5pc0ZpbGVMaXN0KGUpKXx8dC5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBsPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gVChDP3siZmlsZXNbXSI6ZX06ZSxsJiZuZXcgbCx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIG98fG4/KHIuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxMcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgcj10aGlzLnRyYW5zaXRpb25hbHx8akEudHJhbnNpdGlvbmFsLHQ9ciYmci5mb3JjZWRKU09OUGFyc2luZyxuPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJnMuaXNTdHJpbmcoZSkmJih0JiYhdGhpcy5yZXNwb25zZVR5cGV8fG4pKXtsZXQgaT0hKHImJnIuc2lsZW50SlNPTlBhcnNpbmcpJiZuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChDKXtpZihpKXRocm93IEMubmFtZT09PSJTeW50YXhFcnJvciI/cC5mcm9tKEMscC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpDfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6RC5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6RC5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07cy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntqQS5oZWFkZXJzW0FdPXt9fSk7dmFyIHE9akE7dmFyIFRyPXMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksS2U9QT0+e2xldCBlPXt9LHIsdCxuO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihpKXtuPWkuaW5kZXhPZigiOiIpLHI9aS5zdWJzdHJpbmcoMCxuKS50cmltKCkudG9Mb3dlckNhc2UoKSx0PWkuc3Vic3RyaW5nKG4rMSkudHJpbSgpLCEoIXJ8fGVbcl0mJlRyW3JdKSYmKHI9PT0ic2V0LWNvb2tpZSI/ZVtyXT9lW3JdLnB1c2godCk6ZVtyXT1bdF06ZVtyXT1lW3JdP2Vbcl0rIiwgIit0OnQpfSksZX07dmFyIFdlPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gJChBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGRBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAoZEEpOlN0cmluZyhBKX1mdW5jdGlvbiB4cihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHI9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyx0O2Zvcig7dD1yLmV4ZWMoQSk7KWVbdFsxXV09dFsyXTtyZXR1cm4gZX12YXIgT3I9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gdkEoQSxlLHIsdCxuKXtpZihzLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLGUscik7aWYobiYmKGU9ciksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHQpKXJldHVybiBlLmluZGV4T2YodCkhPT0tMTtpZihzLmlzUmVnRXhwKHQpKXJldHVybiB0LnRlc3QoZSl9fWZ1bmN0aW9uIFByKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUscix0KT0+ci50b1VwcGVyQ2FzZSgpK3QpfWZ1bmN0aW9uIEpyKEEsZSl7bGV0IHI9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHQ9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSx0K3Ise3ZhbHVlOmZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gdGhpc1t0XS5jYWxsKHRoaXMsZSxuLG8saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIEs9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUscix0KXtsZXQgbj10aGlzO2Z1bmN0aW9uIG8oQyxsLEIpe2xldCBJPSQobCk7aWYoIUkpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBhPXMuZmluZEtleShuLEkpOyghYXx8blthXT09PXZvaWQgMHx8Qj09PSEwfHxCPT09dm9pZCAwJiZuW2FdIT09ITEpJiYoblthfHxsXT1kQShDKSl9bGV0IGk9KEMsbCk9PnMuZm9yRWFjaChDLChCLEkpPT5vKEIsSSxsKSk7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/aShlLHIpOnMuaXNTdHJpbmcoZSkmJihlPWUudHJpbSgpKSYmIU9yKGUpP2koS2UoZSkscik6ZSE9bnVsbCYmbyhyLGUsdCksdGhpc31nZXQoZSxyKXtpZihlPSQoZSksZSl7bGV0IHQ9cy5maW5kS2V5KHRoaXMsZSk7aWYodCl7bGV0IG49dGhpc1t0XTtpZighcilyZXR1cm4gbjtpZihyPT09ITApcmV0dXJuIHhyKG4pO2lmKHMuaXNGdW5jdGlvbihyKSlyZXR1cm4gci5jYWxsKHRoaXMsbix0KTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLmV4ZWMobik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHIpe2lmKGU9JChlKSxlKXtsZXQgdD1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hISh0JiZ0aGlzW3RdIT09dm9pZCAwJiYoIXJ8fHZBKHRoaXMsdGhpc1t0XSx0LHIpKSl9cmV0dXJuITF9ZGVsZXRlKGUscil7bGV0IHQ9dGhpcyxuPSExO2Z1bmN0aW9uIG8oaSl7aWYoaT0kKGkpLGkpe2xldCBDPXMuZmluZEtleSh0LGkpO0MmJighcnx8dkEodCx0W0NdLEMscikpJiYoZGVsZXRlIHRbQ10sbj0hMCl9fXJldHVybiBzLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKG8pOm8oZSksbn1jbGVhcihlKXtsZXQgcj1PYmplY3Qua2V5cyh0aGlzKSx0PXIubGVuZ3RoLG49ITE7Zm9yKDt0LS07KXtsZXQgbz1yW3RdOyghZXx8dkEodGhpcyx0aGlzW29dLG8sZSwhMCkpJiYoZGVsZXRlIHRoaXNbb10sbj0hMCl9cmV0dXJuIG59bm9ybWFsaXplKGUpe2xldCByPXRoaXMsdD17fTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKG4sbyk9PntsZXQgaT1zLmZpbmRLZXkodCxvKTtpZihpKXtyW2ldPWRBKG4pLGRlbGV0ZSByW29dO3JldHVybn1sZXQgQz1lP1ByKG8pOlN0cmluZyhvKS50cmltKCk7QyE9PW8mJmRlbGV0ZSByW29dLHJbQ109ZEEobiksdFtDXT0hMH0pLHRoaXN9Y29uY2F0KC4uLmUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLmUpfXRvSlNPTihlKXtsZXQgcj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBzLmZvckVhY2godGhpcywodCxuKT0+e3QhPW51bGwmJnQhPT0hMSYmKHJbbl09ZSYmcy5pc0FycmF5KHQpP3Quam9pbigiLCAiKTp0KX0pLHJ9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2Uscl0pPT5lKyI6ICIrcikuam9pbihgCmApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzP2U6bmV3IHRoaXMoZSl9c3RhdGljIGNvbmNhdChlLC4uLnIpe2xldCB0PW5ldyB0aGlzKGUpO3JldHVybiByLmZvckVhY2gobj0+dC5zZXQobikpLHR9c3RhdGljIGFjY2Vzc29yKGUpe2xldCB0PSh0aGlzW1dlXT10aGlzW1dlXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLG49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gbyhpKXtsZXQgQz0kKGkpO3RbQ118fChKcihuLGkpLHRbQ109ITApfXJldHVybiBzLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKG8pOm8oZSksdGhpc319O0suYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO3MucmVkdWNlRGVzY3JpcHRvcnMoSy5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCByPWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHQpe3RoaXNbcl09dH19fSk7cy5mcmVlemVNZXRob2RzKEspO3ZhciBTPUs7ZnVuY3Rpb24gQUEoQSxlKXtsZXQgcj10aGlzfHxxLHQ9ZXx8cixuPVMuZnJvbSh0LmhlYWRlcnMpLG89dC5kYXRhO3JldHVybiBzLmZvckVhY2goQSxmdW5jdGlvbihDKXtvPUMuY2FsbChyLG8sbi5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxuLm5vcm1hbGl6ZSgpLG99ZnVuY3Rpb24gZUEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBqZShBLGUscil7cC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixwLkVSUl9DQU5DRUxFRCxlLHIpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9cy5pbmhlcml0cyhqZSxwLHtfX0NBTkNFTF9fOiEwfSk7dmFyIHg9amU7ZnVuY3Rpb24gX0EoQSxlLHIpe2xldCB0PXIuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFyLnN0YXR1c3x8IXR8fHQoci5zdGF0dXMpP0Eocik6ZShuZXcgcCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Iuc3RhdHVzLFtwLkVSUl9CQURfUkVRVUVTVCxwLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3Ioci5zdGF0dXMvMTAwKS00XSxyLmNvbmZpZyxyLnJlcXVlc3QscikpfXZhciB2ZT1ELmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHIsdCxuLG8pe2xldCBpPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO3MuaXNOdW1iZXIocikmJmkucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHIpLnRvR01UU3RyaW5nKCkpLHMuaXNTdHJpbmcodCkmJmkucHVzaCgicGF0aD0iK3QpLHMuaXNTdHJpbmcobikmJmkucHVzaCgiZG9tYWluPSIrbiksbz09PSEwJiZpLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1pLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBWQShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIHpBKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiB0QShBLGUpe3JldHVybiBBJiYhVkEoZSk/ekEoQSxlKTplfXZhciBfZT1ELmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksdDtmdW5jdGlvbiBuKG8pe2xldCBpPW87cmV0dXJuIGUmJihyLnNldEF0dHJpYnV0ZSgiaHJlZiIsaSksaT1yLmhyZWYpLHIuc2V0QXR0cmlidXRlKCJocmVmIixpKSx7aHJlZjpyLmhyZWYscHJvdG9jb2w6ci5wcm90b2NvbD9yLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpyLmhvc3Qsc2VhcmNoOnIuc2VhcmNoP3Iuc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6ci5oYXNoP3IuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnIuaG9zdG5hbWUscG9ydDpyLnBvcnQscGF0aG5hbWU6ci5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/ci5wYXRobmFtZToiLyIrci5wYXRobmFtZX19cmV0dXJuIHQ9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oaSl7bGV0IEM9cy5pc1N0cmluZyhpKT9uKGkpOmk7cmV0dXJuIEMucHJvdG9jb2w9PT10LnByb3RvY29sJiZDLmhvc3Q9PT10Lmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIFpBKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBNcihBLGUpe0E9QXx8MTA7bGV0IHI9bmV3IEFycmF5KEEpLHQ9bmV3IEFycmF5KEEpLG49MCxvPTAsaTtyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKGwpe2xldCBCPURhdGUubm93KCksST10W29dO2l8fChpPUIpLHJbbl09bCx0W25dPUI7bGV0IGE9byxRPTA7Zm9yKDthIT09bjspUSs9clthKytdLGE9YSVBO2lmKG49KG4rMSklQSxuPT09byYmKG89KG8rMSklQSksQi1pPGUpcmV0dXJuO2xldCBnPUkmJkItSTtyZXR1cm4gZz9NYXRoLnJvdW5kKFEqMWUzL2cpOnZvaWQgMH19dmFyIFZlPU1yO2Z1bmN0aW9uIHplKEEsZSl7bGV0IHI9MCx0PVZlKDUwLDI1MCk7cmV0dXJuIG49PntsZXQgbz1uLmxvYWRlZCxpPW4ubGVuZ3RoQ29tcHV0YWJsZT9uLnRvdGFsOnZvaWQgMCxDPW8tcixsPXQoQyksQj1vPD1pO3I9bztsZXQgST17bG9hZGVkOm8sdG90YWw6aSxwcm9ncmVzczppP28vaTp2b2lkIDAsYnl0ZXM6QyxyYXRlOmx8fHZvaWQgMCxlc3RpbWF0ZWQ6bCYmaSYmQj8oaS1vKS9sOnZvaWQgMCxldmVudDpufTtJW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShJKX19dmFyIEhyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsWmU9SHImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLHQpe2xldCBuPUEuZGF0YSxvPVMuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6aSx3aXRoWFNSRlRva2VuOkN9PUEsbDtmdW5jdGlvbiBCKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShsKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpfWxldCBJO2lmKHMuaXNGb3JtRGF0YShuKSl7aWYoRC5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fEQuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KW8uc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEk9by5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbRSwuLi51XT1JP0kuc3BsaXQoIjsiKS5tYXAobT0+bS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtvLnNldENvbnRlbnRUeXBlKFtFfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBhPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBFPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO28uc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKEUrIjoiK3UpKX1sZXQgUT10QShBLmJhc2VVUkwsQS51cmwpO2Eub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoUSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxhLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIGcoKXtpZighYSlyZXR1cm47bGV0IEU9Uy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYSYmYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksbT17ZGF0YTohaXx8aT09PSJ0ZXh0Inx8aT09PSJqc29uIj9hLnJlc3BvbnNlVGV4dDphLnJlc3BvbnNlLHN0YXR1czphLnN0YXR1cyxzdGF0dXNUZXh0OmEuc3RhdHVzVGV4dCxoZWFkZXJzOkUsY29uZmlnOkEscmVxdWVzdDphfTtfQShmdW5jdGlvbihVKXtyKFUpLEIoKX0sZnVuY3Rpb24oVSl7dChVKSxCKCl9LG0pLGE9bnVsbH1pZigib25sb2FkZW5kImluIGE/YS5vbmxvYWRlbmQ9ZzphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFhfHxhLnJlYWR5U3RhdGUhPT00fHxhLnN0YXR1cz09PTAmJiEoYS5yZXNwb25zZVVSTCYmYS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoZyl9LGEub25hYm9ydD1mdW5jdGlvbigpe2EmJih0KG5ldyBwKCJSZXF1ZXN0IGFib3J0ZWQiLHAuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbCl9LGEub25lcnJvcj1mdW5jdGlvbigpe3QobmV3IHAoIk5ldHdvcmsgRXJyb3IiLHAuRVJSX05FVFdPUkssQSxhKSksYT1udWxsfSxhLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixtPUEudHJhbnNpdGlvbmFsfHx1QTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksdChuZXcgcCh1LG0uY2xhcmlmeVRpbWVvdXRFcnJvcj9wLkVUSU1FRE9VVDpwLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGx9LEQuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoQyYmcy5pc0Z1bmN0aW9uKEMpJiYoQz1DKEEpKSxDfHxDIT09ITEmJl9lKFEpKSl7bGV0IEU9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmdmUucmVhZChBLnhzcmZDb29raWVOYW1lKTtFJiZvLnNldChBLnhzcmZIZWFkZXJOYW1lLEUpfW49PT12b2lkIDAmJm8uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYSYmcy5mb3JFYWNoKG8udG9KU09OKCksZnVuY3Rpb24odSxtKXthLnNldFJlcXVlc3RIZWFkZXIobSx1KX0pLHMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoYS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksaSYmaSE9PSJqc29uIiYmKGEucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHplKEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS51cGxvYWQmJmEudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix6ZShBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYobD1FPT57YSYmKHQoIUV8fEUudHlwZT9uZXcgeChudWxsLEEsYSk6RSksYS5hYm9ydCgpLGE9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9sKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpKSk7bGV0IGM9WkEoUSk7aWYoYyYmRC5wcm90b2NvbHMuaW5kZXhPZihjKT09PS0xKXt0KG5ldyBwKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2MrIjoiLHAuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59YS5zZW5kKG58fG51bGwpfSl9O3ZhciBYQT17aHR0cDpRQSx4aHI6WmV9O3MuZm9yRWFjaChYQSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBYZT1BPT5gLSAke0F9YCxZcj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbUE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSxyLHQsbj17fTtmb3IobGV0IG89MDtvPGU7bysrKXtyPUFbb107bGV0IGk7aWYodD1yLCFZcihyKSYmKHQ9WEFbKGk9U3RyaW5nKHIpKS50b0xvd2VyQ2FzZSgpXSx0PT09dm9pZCAwKSl0aHJvdyBuZXcgcChgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHQpYnJlYWs7bltpfHwiIyIrb109dH1pZighdCl7bGV0IG89T2JqZWN0LmVudHJpZXMobikubWFwKChbQyxsXSk9PmBhZGFwdGVyICR7Q30gYCsobD09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9vLmxlbmd0aD4xP2BzaW5jZSA6CmArby5tYXAoWGUpLmpvaW4oYApgKToiICIrWGUob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgcCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiB0fSxhZGFwdGVyczpYQX07ZnVuY3Rpb24gJEEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHgobnVsbCxBKX1mdW5jdGlvbiB5QShBKXtyZXR1cm4gJEEoQSksQS5oZWFkZXJzPVMuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1BQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fHEuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gJEEoQSksdC5kYXRhPUFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHQpLHQuaGVhZGVycz1TLmZyb20odC5oZWFkZXJzKSx0fSxmdW5jdGlvbih0KXtyZXR1cm4gZUEodCl8fCgkQShBKSx0JiZ0LnJlc3BvbnNlJiYodC5yZXNwb25zZS5kYXRhPUFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHQucmVzcG9uc2UpLHQucmVzcG9uc2UuaGVhZGVycz1TLmZyb20odC5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHQpfSl9dmFyICRlPUE9PkEgaW5zdGFuY2VvZiBTP3suLi5BfTpBO2Z1bmN0aW9uIEwoQSxlKXtlPWV8fHt9O2xldCByPXt9O2Z1bmN0aW9uIHQoQixJLGEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQikmJnMuaXNQbGFpbk9iamVjdChJKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOmF9LEIsSSk6cy5pc1BsYWluT2JqZWN0KEkpP3MubWVyZ2Uoe30sSSk6cy5pc0FycmF5KEkpP0kuc2xpY2UoKTpJfWZ1bmN0aW9uIG4oQixJLGEpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEIpKXJldHVybiB0KHZvaWQgMCxCLGEpfWVsc2UgcmV0dXJuIHQoQixJLGEpfWZ1bmN0aW9uIG8oQixJKXtpZighcy5pc1VuZGVmaW5lZChJKSlyZXR1cm4gdCh2b2lkIDAsSSl9ZnVuY3Rpb24gaShCLEkpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEIpKXJldHVybiB0KHZvaWQgMCxCKX1lbHNlIHJldHVybiB0KHZvaWQgMCxJKX1mdW5jdGlvbiBDKEIsSSxhKXtpZihhIGluIGUpcmV0dXJuIHQoQixJKTtpZihhIGluIEEpcmV0dXJuIHQodm9pZCAwLEIpfWxldCBsPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOkMsaGVhZGVyczooQixJKT0+bigkZShCKSwkZShJKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihJKXtsZXQgYT1sW0ldfHxuLFE9YShBW0ldLGVbSV0sSSk7cy5pc1VuZGVmaW5lZChRKSYmYSE9PUN8fChyW0ldPVEpfSkscn12YXIgaEE9IjEuNi44Ijt2YXIgQWU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57QWVbQV09ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIEF0PXt9O0FlLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHIsdCl7ZnVuY3Rpb24gbihvLGkpe3JldHVybiJbQXhpb3MgdiIraEErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitpKyh0PyIuICIrdDoiIil9cmV0dXJuKG8saSxDKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgcChuKGksIiBoYXMgYmVlbiByZW1vdmVkIisocj8iIGluICIrcjoiIikpLHAuRVJSX0RFUFJFQ0FURUQpO3JldHVybiByJiYhQXRbaV0mJihBdFtpXT0hMCxjb25zb2xlLndhcm4obihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IityKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLGksQyk6ITB9fTtmdW5jdGlvbiBxcihBLGUscil7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBwKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixwLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxuPXQubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IG89dFtuXSxpPWVbb107aWYoaSl7bGV0IEM9QVtvXSxsPUM9PT12b2lkIDB8fGkoQyxvLEEpO2lmKGwhPT0hMCl0aHJvdyBuZXcgcCgib3B0aW9uICIrbysiIG11c3QgYmUgIitsLHAuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHIhPT0hMCl0aHJvdyBuZXcgcCgiVW5rbm93biBvcHRpb24gIitvLHAuRVJSX0JBRF9PUFRJT04pfX12YXIgd0E9e2Fzc2VydE9wdGlvbnM6cXIsdmFsaWRhdG9yczpBZX07dmFyIE89d0EudmFsaWRhdG9ycyxXPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgcUEscmVzcG9uc2U6bmV3IHFBfX1hc3luYyByZXF1ZXN0KGUscil7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUscil9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgbz1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjt0LnN0YWNrP28mJiFTdHJpbmcodC5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJih0LnN0YWNrKz1gCmArbyk6dC5zdGFjaz1vfXRocm93IHR9fV9yZXF1ZXN0KGUscil7dHlwZW9mIGU9PSJzdHJpbmciPyhyPXJ8fHt9LHIudXJsPWUpOnI9ZXx8e30scj1MKHRoaXMuZGVmYXVsdHMscik7bGV0e3RyYW5zaXRpb25hbDp0LHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOm99PXI7dCE9PXZvaWQgMCYmd0EuYXNzZXJ0T3B0aW9ucyh0LHtzaWxlbnRKU09OUGFyc2luZzpPLnRyYW5zaXRpb25hbChPLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOk8udHJhbnNpdGlvbmFsKE8uYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpPLnRyYW5zaXRpb25hbChPLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKHMuaXNGdW5jdGlvbihuKT9yLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTp3QS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpPLmZ1bmN0aW9uLHNlcmlhbGl6ZTpPLmZ1bmN0aW9ufSwhMCkpLHIubWV0aG9kPShyLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPW8mJnMubWVyZ2Uoby5jb21tb24sb1tyLm1ldGhvZF0pO28mJnMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxjPT57ZGVsZXRlIG9bY119KSxyLmhlYWRlcnM9Uy5jb25jYXQoaSxvKTtsZXQgQz1bXSxsPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihFKXt0eXBlb2YgRS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZFLnJ1bldoZW4ocik9PT0hMXx8KGw9bCYmRS5zeW5jaHJvbm91cyxDLnVuc2hpZnQoRS5mdWxmaWxsZWQsRS5yZWplY3RlZCkpfSk7bGV0IEI9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihFKXtCLnB1c2goRS5mdWxmaWxsZWQsRS5yZWplY3RlZCl9KTtsZXQgSSxhPTAsUTtpZighbCl7bGV0IGM9W3lBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoYy51bnNoaWZ0LmFwcGx5KGMsQyksYy5wdXNoLmFwcGx5KGMsQiksUT1jLmxlbmd0aCxJPVByb21pc2UucmVzb2x2ZShyKTthPFE7KUk9SS50aGVuKGNbYSsrXSxjW2ErK10pO3JldHVybiBJfVE9Qy5sZW5ndGg7bGV0IGc9cjtmb3IoYT0wO2E8UTspe2xldCBjPUNbYSsrXSxFPUNbYSsrXTt0cnl7Zz1jKGcpfWNhdGNoKHUpe0UuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7ST15QS5jYWxsKHRoaXMsZyl9Y2F0Y2goYyl7cmV0dXJuIFByb21pc2UucmVqZWN0KGMpfWZvcihhPTAsUT1CLmxlbmd0aDthPFE7KUk9SS50aGVuKEJbYSsrXSxCW2ErK10pO3JldHVybiBJfWdldFVyaShlKXtlPUwodGhpcy5kZWZhdWx0cyxlKTtsZXQgcj10QShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBYKHIsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKX19O3MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oZSl7Vy5wcm90b3R5cGVbZV09ZnVuY3Rpb24ocix0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEwodHx8e30se21ldGhvZDplLHVybDpyLGRhdGE6KHR8fHt9KS5kYXRhfSkpfX0pO3MuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKG8saSxDKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEwoQ3x8e30se21ldGhvZDplLGhlYWRlcnM6dD97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6byxkYXRhOml9KSl9fVcucHJvdG90eXBlW2VdPXIoKSxXLnByb3RvdHlwZVtlKyJGb3JtIl09cighMCl9KTt2YXIgckE9Vzt2YXIgZWU9Y2xhc3MgQXtjb25zdHJ1Y3RvcihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHI7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG8pe3I9b30pO2xldCB0PXRoaXM7dGhpcy5wcm9taXNlLnRoZW4obj0+e2lmKCF0Ll9saXN0ZW5lcnMpcmV0dXJuO2xldCBvPXQuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtvLS0gPjA7KXQuX2xpc3RlbmVyc1tvXShuKTt0Ll9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPW49PntsZXQgbyxpPW5ldyBQcm9taXNlKEM9Pnt0LnN1YnNjcmliZShDKSxvPUN9KS50aGVuKG4pO3JldHVybiBpLmNhbmNlbD1mdW5jdGlvbigpe3QudW5zdWJzY3JpYmUobyl9LGl9LGUoZnVuY3Rpb24obyxpLEMpe3QucmVhc29ufHwodC5yZWFzb249bmV3IHgobyxpLEMpLHIodC5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoZSl7aWYodGhpcy5yZWFzb24pe2UodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX11bnN1YnNjcmliZShlKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTtyIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UociwxKX1zdGF0aWMgc291cmNlKCl7bGV0IGU7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKG4pe2U9bn0pLGNhbmNlbDplfX19LGV0PWVlO2Z1bmN0aW9uIHRlKEEpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gQS5hcHBseShudWxsLHIpfX1mdW5jdGlvbiByZShBKXtyZXR1cm4gcy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgbmU9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKG5lKS5mb3JFYWNoKChbQSxlXSk9PntuZVtlXT1BfSk7dmFyIHR0PW5lO2Z1bmN0aW9uIHJ0KEEpe2xldCBlPW5ldyByQShBKSxyPVYockEucHJvdG90eXBlLnJlcXVlc3QsZSk7cmV0dXJuIHMuZXh0ZW5kKHIsckEucHJvdG90eXBlLGUse2FsbE93bktleXM6ITB9KSxzLmV4dGVuZChyLGUsbnVsbCx7YWxsT3duS2V5czohMH0pLHIuY3JlYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBydChMKEEsbikpfSxyfXZhciB5PXJ0KHEpO3kuQXhpb3M9ckE7eS5DYW5jZWxlZEVycm9yPXg7eS5DYW5jZWxUb2tlbj1ldDt5LmlzQ2FuY2VsPWVBO3kuVkVSU0lPTj1oQTt5LnRvRm9ybURhdGE9VDt5LkF4aW9zRXJyb3I9cDt5LkNhbmNlbD15LkNhbmNlbGVkRXJyb3I7eS5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfTt5LnNwcmVhZD10ZTt5LmlzQXhpb3NFcnJvcj1yZTt5Lm1lcmdlQ29uZmlnPUw7eS5BeGlvc0hlYWRlcnM9Uzt5LmZvcm1Ub0pTT049QT0+cEEocy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTt5LmdldEFkYXB0ZXI9bUEuZ2V0QWRhcHRlcjt5Lkh0dHBTdGF0dXNDb2RlPXR0O3kuZGVmYXVsdD15O3ZhciBqPXk7dmFye0F4aW9zOkRhLEF4aW9zRXJyb3I6U2EsQ2FuY2VsZWRFcnJvcjpiYSxpc0NhbmNlbDpGYSxDYW5jZWxUb2tlbjprYSxWRVJTSU9OOlJhLGFsbDpVYSxDYW5jZWw6TmEsaXNBeGlvc0Vycm9yOkdhLHNwcmVhZDpMYSx0b0Zvcm1EYXRhOlRhLEF4aW9zSGVhZGVyczp4YSxIdHRwU3RhdHVzQ29kZTpPYSxmb3JtVG9KU09OOlBhLGdldEFkYXB0ZXI6SmEsbWVyZ2VDb25maWc6TWF9PWo7YXN5bmMgZnVuY3Rpb24gS3IoQSxlKXtsZXQgcj1BLHQ9bnVsbDtpZihyPT1udWxsKXQ9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYoci5zdGFydHNXaXRoKCJodHRwIikpe2xldCBuPWF3YWl0IGouZ2V0KHIse3Jlc3BvbnNlVHlwZToiYmxvYiIscGFyYW1zOmV9KSxvPVVSTC5jcmVhdGVPYmplY3RVUkwobi5kYXRhKTt0PW5ldyBXb3JrZXIobyx7dHlwZToibW9kdWxlIn0pfWVsc2UgdD1uZXcgV29ya2VyKHIse3R5cGU6Im1vZHVsZSJ9KTtyZXR1cm4gdH12YXIgbkE9S3I7ZnVuY3Rpb24gbnQoQSl7bGV0IGU9eEEoQSkscj1BO3JldHVybiByLnRlcm1pbmF0ZWQ9ITEsci53b3JrZXJQcm94eT1lLHIub3JpZ2luYWxUZXJtaW5hdGU9ci50ZXJtaW5hdGUsci50ZXJtaW5hdGU9KCk9PntyLnRlcm1pbmF0ZWQ9ITAsci53b3JrZXJQcm94eVtUQV0oKSxyLm9yaWdpbmFsVGVybWluYXRlKCl9LHt3b3JrZXJQcm94eTplLHdvcmtlcjpyfX1hc3luYyBmdW5jdGlvbiBXcihBLGUscil7bGV0IHQ7aWYoQSE9bnVsbCl7bGV0IG89QTtyZXR1cm4gby53b3JrZXJQcm94eSE9PXZvaWQgMD8odD1vLndvcmtlclByb3h5LHt3b3JrZXJQcm94eTp0LHdvcmtlcjpvfSk6bnQoQSl9bGV0IG49YXdhaXQgbkEoZSxyKTtyZXR1cm4gbnQobil9dmFyIG90PVdyO2FzeW5jIGZ1bmN0aW9uIGpyKEEsZSxyKXtsZXQgdD0idW5rbm93biI7dHlwZW9mIEEhPSJzdHJpbmciP3Q9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP3Q9QTp0PXR5cGVvZiBlPCJ1Ij9gJHtlfS8ke0F9YDpBLHQuZW5kc1dpdGgoIi5qcyIpJiYodD10LnN1YnN0cmluZygwLHQubGVuZ3RoLTMpKSx0LmVuZHNXaXRoKCIud2FzbSIpJiYodD10LnN1YnN0cmluZygwLHQubGVuZ3RoLTUpKTtsZXQgbj1gJHt0fS53YXNtYCxpPShhd2FpdCBqLmdldChuLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6cn0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7dH0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTppfSl9dmFyIGl0PWpyO3ZhciBhdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgZ3Q9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsc3Q9bmV3IFRleHRFbmNvZGVyLEl0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiB2cihBLGUpe2xldCByPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHQ9QS5mc19vcGVuKGUsci5mbGFncyksbz1BLmZzX3N0YXQoZSkuc2l6ZSxpPW51bGw7Z3Q/aT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIobyk6aT1uZXcgQXJyYXlCdWZmZXIobyk7bGV0IEM9bmV3IFVpbnQ4QXJyYXkoaSk7cmV0dXJuIEEuZnNfcmVhZCh0LEMsMCxvLDApLEEuZnNfY2xvc2UodCksQ31mdW5jdGlvbiBDdChBLGUscil7bGV0IHQ9bnVsbDtndD90PW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTp0PW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgbj1uZXcgVWludDhBcnJheSh0KSxvPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHIpO3JldHVybiBuLnNldChvKSxufWZ1bmN0aW9uIGgoQSxlLHIsdCl7bGV0IG49MDtyZXR1cm4gZSE9PW51bGwmJihuPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHIsdCxlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxuKSksbn1mdW5jdGlvbiBKKEEsZSxyKXtsZXQgdD1KU09OLnN0cmluZ2lmeShlKSxuPUEubGVuZ3RoQnl0ZXNVVEY4KHQpKzEsbz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHIsbl0pO0Euc3RyaW5nVG9VVEY4KHQsbyxuKX1mdW5jdGlvbiBiKEEsZSxyLHQpe2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUscl0pLG89QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxyXSksaT1DdChBLG4sbyk7cmV0dXJuIE4odCxpLmJ1ZmZlcil9ZnVuY3Rpb24gREEoQSxlKXtsZXQgcj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSx0PUEuVVRGOFRvU3RyaW5nKHIpO3JldHVybiBKU09OLnBhcnNlKHQpfWZ1bmN0aW9uIF9yKEEsZSxyLHQpe3QhPW51bGwmJnQubGVuZ3RoPjAmJnQuZm9yRWFjaChmdW5jdGlvbihCLEkpe3N3aXRjaChCLnR5cGUpe2Nhc2UgZC5UZXh0U3RyZWFtOntsZXQgYT1zdC5lbmNvZGUoQi5kYXRhLmRhdGEpLFE9aChBLGEsSSwwKSxnPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YH07SihBLGcsSSk7YnJlYWt9Y2FzZSBkLkpzb25Db21wYXRpYmxlOntsZXQgYT1zdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoQi5kYXRhKSksUT1oKEEsYSxJLDApLGc9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTtKKEEsZyxJKTticmVha31jYXNlIGQuQmluYXJ5U3RyZWFtOntsZXQgYT1CLmRhdGEuZGF0YSxRPWgoQSxhLEksMCksZz17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWB9O0ooQSxnLEkpO2JyZWFrfWNhc2UgZC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoQi5kYXRhLnBhdGgsQi5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgZC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShCLmRhdGEucGF0aCxCLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBkLkltYWdlOntsZXQgYT1CLmRhdGEsUT1oKEEsYS5kYXRhLEksMCksZz1oKEEsYS5kaXJlY3Rpb24sSSwxKSxjPXR5cGVvZiBhLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGEubWV0YWRhdGEuZW50cmllcygpKTpbXSxFPXtpbWFnZVR5cGU6YS5pbWFnZVR5cGUsbmFtZTphLm5hbWUsb3JpZ2luOmEub3JpZ2luLHNwYWNpbmc6YS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2d9YCxzaXplOmEuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG1ldGFkYXRhOmN9O0ooQSxFLEkpO2JyZWFrfWNhc2UgZC5NZXNoOntsZXQgYT1CLmRhdGEsUT1oKEEsYS5wb2ludHMsSSwwKSxnPWgoQSxhLmNlbGxzLEksMSksYz1oKEEsYS5wb2ludERhdGEsSSwyKSxFPWgoQSxhLmNlbGxEYXRhLEksMyksdT17bWVzaFR5cGU6YS5tZXNoVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxudW1iZXJPZkNlbGxzOmEubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2d9YCxjZWxsQnVmZmVyU2l6ZTphLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWB9O0ooQSx1LEkpO2JyZWFrfWNhc2UgZC5Qb2ludFNldDp7bGV0IGE9Qi5kYXRhLFE9aChBLGEucG9pbnRzLEksMCksZz1oKEEsYS5wb2ludERhdGEsSSwxKSxjPXtwb2ludFNldFR5cGU6YS5wb2ludFNldFR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gfTtKKEEsYyxJKTticmVha31jYXNlIGQuUG9seURhdGE6e2xldCBhPUIuZGF0YSxRPWgoQSxhLnBvaW50cyxJLDApLGc9aChBLGEudmVydGljZXMsSSwxKSxjPWgoQSxhLmxpbmVzLEksMiksRT1oKEEsYS5wb2x5Z29ucyxJLDMpLHU9aChBLGEudHJpYW5nbGVTdHJpcHMsSSw0KSxtPWgoQSxhLnBvaW50RGF0YSxJLDUpLFI9aChBLGEucG9pbnREYXRhLEksNiksVT17cG9seURhdGFUeXBlOmEucG9seURhdGFUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLHZlcnRpY2VzQnVmZmVyU2l6ZTphLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2d9YCxsaW5lc0J1ZmZlclNpemU6YS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAscG9seWdvbnNCdWZmZXJTaXplOmEucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTphLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHttfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtKKEEsVSxJKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgbj1BLnN0YWNrU2F2ZSgpLG89MDt0cnl7bz1BLmNhbGxNYWluKGUuc2xpY2UoKSl9Y2F0Y2goQil7dGhyb3cgdHlwZW9mIEI9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoQikpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksQn1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKG4pfWxldCBpPUEuZ2V0TW9kdWxlU3Rkb3V0KCksQz1BLmdldE1vZHVsZVN0ZGVycigpLGw9W107cmV0dXJuIHIhPW51bGwmJnIubGVuZ3RoPjAmJm89PT0wJiZyLmZvckVhY2goZnVuY3Rpb24oQixJKXtsZXQgYT1udWxsO3N3aXRjaChCLnR5cGUpe2Nhc2UgZC5UZXh0U3RyZWFtOntsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxjPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLEU9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGcsYyk7YT17ZGF0YTpJdC5kZWNvZGUoRSl9O2JyZWFrfWNhc2UgZC5Kc29uQ29tcGF0aWJsZTp7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksYz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixnLGMpO2E9SlNPTi5wYXJzZShJdC5kZWNvZGUoRSkpO2JyZWFrfWNhc2UgZC5CaW5hcnlTdHJlYW06e2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLGM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSk7YT17ZGF0YTpDdChBLGcsYyl9O2JyZWFrfWNhc2UgZC5UZXh0RmlsZTp7YT17cGF0aDpCLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoQi5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIGQuQmluYXJ5RmlsZTp7YT17cGF0aDpCLmRhdGEucGF0aCxkYXRhOnZyKEEsQi5kYXRhLnBhdGgpfTticmVha31jYXNlIGQuSW1hZ2U6e2xldCBnPURBKEEsSSk7Zy5kYXRhPWIoQSxJLDAsZy5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksZy5kaXJlY3Rpb249YihBLEksMSx3LkZsb2F0NjQpLGcubWV0YWRhdGE9bmV3IE1hcChnLm1ldGFkYXRhKSxhPWc7YnJlYWt9Y2FzZSBkLk1lc2g6e2xldCBnPURBKEEsSSk7Zy5udW1iZXJPZlBvaW50cz4wP2cucG9pbnRzPWIoQSxJLDAsZy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmcucG9pbnRzPU4oZy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mQ2VsbHM+MD9nLmNlbGxzPWIoQSxJLDEsZy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6Zy5jZWxscz1OKGcubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mUG9pbnRQaXhlbHM+MD9nLnBvaW50RGF0YT1iKEEsSSwyLGcubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOmcucG9pbnREYXRhPU4oZy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Zy5jZWxsRGF0YT1iKEEsSSwzLGcubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5jZWxsRGF0YT1OKGcubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9ZzticmVha31jYXNlIGQuUG9pbnRTZXQ6e2xldCBnPURBKEEsSSk7Zy5udW1iZXJPZlBvaW50cz4wP2cucG9pbnRzPWIoQSxJLDAsZy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpnLnBvaW50cz1OKGcucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZQb2ludFBpeGVscz4wP2cucG9pbnREYXRhPWIoQSxJLDEsZy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOmcucG9pbnREYXRhPU4oZy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPWc7YnJlYWt9Y2FzZSBkLlBvbHlEYXRhOntsZXQgZz1EQShBLEkpO2cubnVtYmVyT2ZQb2ludHM+MD9nLnBvaW50cz1iKEEsSSwwLHcuRmxvYXQzMik6Zy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxnLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP2cudmVydGljZXM9YihBLEksMSxmLlVJbnQzMik6Zy52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksZy5saW5lc0J1ZmZlclNpemU+MD9nLmxpbmVzPWIoQSxJLDIsZi5VSW50MzIpOmcubGluZXM9bmV3IFVpbnQzMkFycmF5LGcucG9seWdvbnNCdWZmZXJTaXplPjA/Zy5wb2x5Z29ucz1iKEEsSSwzLGYuVUludDMyKTpnLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxnLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP2cudHJpYW5nbGVTdHJpcHM9YihBLEksNCxmLlVJbnQzMik6Zy50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksZy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Zy5wb2ludERhdGE9YihBLEksNSxnLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9TihnLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Zy5jZWxsRGF0YT1iKEEsSSw2LGcucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOmcuY2VsbERhdGE9TihnLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1nO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IFE9e3R5cGU6Qi50eXBlLGRhdGE6YX07bC5wdXNoKFEpfSkse3JldHVyblZhbHVlOm8sc3Rkb3V0Omksc3RkZXJyOkMsb3V0cHV0czpsfX12YXIgQnQ9X3I7dmFyIFZyPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiB6cihBLGUpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHI9W107Zm9yKGxldCB0PTA7dDxBLmxlbmd0aDt0Kyspe2xldCBuPVpyKEFbdF0sZSk7biE9PW51bGwmJnIucHVzaChuKX1yZXR1cm4gcn1mdW5jdGlvbiBacihBLGUpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHI9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/cj1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihyPUEpLFZyJiZyIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDplP3I6ci5zbGljZSgwKX12YXIgbHQ9enI7ZnVuY3Rpb24gWHIoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIGN0PVhyO2Z1bmN0aW9uICRyKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciBFdD0kcjtmdW5jdGlvbiBBbihBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgUXQ9QW47dmFyIGVuO2Z1bmN0aW9uIFNBKCl7cmV0dXJuIGVufXZhciB0bjtmdW5jdGlvbiBmdCgpe3JldHVybiB0bn12YXIgcm47ZnVuY3Rpb24gYkEoKXtyZXR1cm4gcm59dmFyIG9lPW5ldyBNYXA7ZnVuY3Rpb24gbm4oKXtsZXQgQT1iQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW51bGwpLEF9ZnVuY3Rpb24gdXQoKXtsZXQgQT1TQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW5ldyBVUkwoIi9waXBlbGluZXMiLGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbikuaHJlZiksQX1mdW5jdGlvbiBGQSgpe2xldCBBPWZ0KCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9e30pLEF9YXN5bmMgZnVuY3Rpb24gb24oQSxlLHIpe2xldCB0PUEsbj1BO2lmKHR5cGVvZiBBIT0ic3RyaW5nIiYmKHQ9bmV3IFVSTChBLmhyZWYpLG49dC5ocmVmKSxvZS5oYXMobikpcmV0dXJuIG9lLmdldChuKTt7bGV0IG89YXdhaXQgaXQoQSxlPy50b1N0cmluZygpPz91dCgpLHI/P0ZBKCkpO3JldHVybiBvZS5zZXQobixvKSxvfX1hc3luYyBmdW5jdGlvbiBhbihBLGUscix0LG4pe2lmKCFhd2FpdCBhdCgpKXtsZXQgdT0iV2ViQXNzZW1ibHkgU0lNRCBzdXBwb3J0IGlzIHJlcXVpcmVkIC0tIHBsZWFzZSB1cGRhdGUgeW91ciBicm93c2VyLiI7dGhyb3cgYWxlcnQodSksbmV3IEVycm9yKHUpfWxldCBvPW4/LndlYldvcmtlcj8/bnVsbDtpZihvPT09ITEpe2xldCB1PWF3YWl0IG9uKEEudG9TdHJpbmcoKSxuPy5waXBlbGluZUJhc2VVcmwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/RkEoKSk7cmV0dXJuIEJ0KHUsZSxyLHQpfWxldCBpPW8sQz1uPy5waXBlbGluZVdvcmtlclVybD8/bm4oKSxsPXR5cGVvZiBDIT0ic3RyaW5nIiYmdHlwZW9mIEM/LmhyZWY8InUiP0MuaHJlZjpDLHt3b3JrZXJQcm94eTpCLHdvcmtlcjpJfT1hd2FpdCBvdChpLGwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/RkEoKSk7aT1JO2xldCBhPVtdO3QhPW51bGwmJnQubGVuZ3RoPjAmJnQuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1LnR5cGU9PT1kLkJpbmFyeVN0cmVhbSl7bGV0IG09dS5kYXRhLmRhdGE7YS5wdXNoKG0pfWVsc2UgaWYodS50eXBlPT09ZC5CaW5hcnlGaWxlKXtsZXQgbT11LmRhdGEuZGF0YTthLnB1c2gobSl9ZWxzZSBpZih1LnR5cGU9PT1kLkltYWdlKXtsZXQgbT11LmRhdGE7bS5kYXRhIT09bnVsbCYmYS5wdXNoKC4uLmN0KG0pKX1lbHNlIGlmKHUudHlwZT09PWQuTWVzaCl7bGV0IG09dS5kYXRhO2EucHVzaCguLi5FdChtKSl9ZWxzZSBpZih1LnR5cGU9PT1kLlBvbHlEYXRhKXtsZXQgbT11LmRhdGE7YS5wdXNoKC4uLlF0KG0pKX19KTtsZXQgUT1uPy5waXBlbGluZUJhc2VVcmw/P3V0KCksZz10eXBlb2YgUSE9InN0cmluZyImJnR5cGVvZiBRPy5ocmVmPCJ1Ij9RLmhyZWY6USxjPXQhPW51bGw/T0EodCxsdChhLG4/Lm5vQ29weSkpOm51bGwsRT1hd2FpdCBCLnJ1blBpcGVsaW5lKEEudG9TdHJpbmcoKSxnLGUscixjLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P0ZBKCkpO3JldHVybntyZXR1cm5WYWx1ZTpFLnJldHVyblZhbHVlLHN0ZG91dDpFLnN0ZG91dCxzdGRlcnI6RS5zdGRlcnIsb3V0cHV0czpFLm91dHB1dHMsd2ViV29ya2VyOml9fXZhciBvQT1hbjt2YXIgc249bnVsbDtmdW5jdGlvbiBwdCgpe3JldHVybiBzbn12YXIgaWUsSW49YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGl0ay13YXNtL2NvbXBhcmUtaW1hZ2VzQCR7UkF9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBScyhBKXtpZT1BfWZ1bmN0aW9uIGtBKCl7aWYodHlwZW9mIGllPCJ1IilyZXR1cm4gaWU7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6SW59dmFyIGFlLGduPW51bGw7ZnVuY3Rpb24gZHQoQSl7YWU9QX1mdW5jdGlvbiB2KCl7aWYodHlwZW9mIGFlPCJ1IilyZXR1cm4gYWU7bGV0IEE9YkEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6Z259dmFyIF89bnVsbDthc3luYyBmdW5jdGlvbiBtdCgpe2xldCBBPXYoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO189YXdhaXQgbkEoZSl9ZnVuY3Rpb24gT3MoQSl7Xz1BfWFzeW5jIGZ1bmN0aW9uIHl0KCl7aWYoXyE9PW51bGwpcmV0dXJuIF8udGVybWluYXRlZCYmYXdhaXQgbXQoKSxfO2xldCBBPXB0KCk7cmV0dXJuIEEhPT1udWxsP0E6KGF3YWl0IG10KCksXyl9YXN5bmMgZnVuY3Rpb24gQ24oQSxlPXtiYXNlbGluZUltYWdlczpbXX0pe2xldCByPVt7dHlwZTpkLkpzb25Db21wYXRpYmxlfSx7dHlwZTpkLkltYWdlfSx7dHlwZTpkLkltYWdlfV0sdD1be3R5cGU6ZC5JbWFnZSxkYXRhOkF9XSxuPVtdO2lmKG4ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiMSIpLG4ucHVzaCgiMiIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgZS5iYXNlbGluZUltYWdlczwidSIpe2lmKGUuYmFzZWxpbmVJbWFnZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCciYmFzZWxpbmUtaW1hZ2VzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO24ucHVzaCgiLS1iYXNlbGluZS1pbWFnZXMiKSxhd2FpdCBQcm9taXNlLmFsbChlLmJhc2VsaW5lSW1hZ2VzLm1hcChhc3luYyBFPT57bGV0IHU9dC5sZW5ndGgudG9TdHJpbmcoKTt0LnB1c2goe3R5cGU6ZC5JbWFnZSxkYXRhOkV9KSxuLnB1c2godSl9KSl9dHlwZW9mIGUuZGlmZmVyZW5jZVRocmVzaG9sZDwidSImJm4ucHVzaCgiLS1kaWZmZXJlbmNlLXRocmVzaG9sZCIsZS5kaWZmZXJlbmNlVGhyZXNob2xkLnRvU3RyaW5nKCkpLHR5cGVvZiBlLnJhZGl1c1RvbGVyYW5jZTwidSImJm4ucHVzaCgiLS1yYWRpdXMtdG9sZXJhbmNlIixlLnJhZGl1c1RvbGVyYW5jZS50b1N0cmluZygpKSx0eXBlb2YgZS5zcGF0aWFsVG9sZXJhbmNlPCJ1IiYmbi5wdXNoKCItLXNwYXRpYWwtdG9sZXJhbmNlIixlLnNwYXRpYWxUb2xlcmFuY2UudG9TdHJpbmcoKSksdHlwZW9mIGUubnVtYmVyT2ZQaXhlbHNUb2xlcmFuY2U8InUiJiZuLnB1c2goIi0tbnVtYmVyLW9mLXBpeGVscy10b2xlcmFuY2UiLGUubnVtYmVyT2ZQaXhlbHNUb2xlcmFuY2UudG9TdHJpbmcoKSksdHlwZW9mIGUuaWdub3JlQm91bmRhcnlQaXhlbHM8InUiJiZlLmlnbm9yZUJvdW5kYXJ5UGl4ZWxzJiZuLnB1c2goIi0taWdub3JlLWJvdW5kYXJ5LXBpeGVscyIpO2xldCBCPSJjb21wYXJlLWRvdWJsZS1pbWFnZXMiLHt3ZWJXb3JrZXI6SSxyZXR1cm5WYWx1ZTphLHN0ZGVycjpRLG91dHB1dHM6Z309YXdhaXQgb0EoQixuLHIsdCx7cGlwZWxpbmVCYXNlVXJsOmtBKCkscGlwZWxpbmVXb3JrZXJVcmw6digpLHdlYldvcmtlcjplPy53ZWJXb3JrZXI/P251bGx9KTtpZihhIT09MCl0aHJvdyBuZXcgRXJyb3IoUSk7cmV0dXJue3dlYldvcmtlcjpJLG1ldHJpY3M6Z1swXS5kYXRhLGRpZmZlcmVuY2VJbWFnZTpnWzFdLmRhdGEsZGlmZmVyZW5jZVVjaGFyMmRJbWFnZTpnWzJdLmRhdGF9fXZhciBzZT1Dbjthc3luYyBmdW5jdGlvbiBCbihBLGUpe2xldCByPWU7aWYoci5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSE9PXcuRmxvYXQ2NCl7bGV0IHQ7ZS5pbWFnZVR5cGUucGl4ZWxUeXBlIT09Ri5TY2FsYXImJmUuaW1hZ2VUeXBlLnBpeGVsVHlwZSE9PUYuVmFyaWFibGVMZW5ndGhWZWN0b3ImJih0PUYuVmFyaWFibGVMZW5ndGhWZWN0b3IpLHI9aUEoZSx7Y29tcG9uZW50VHlwZTp3LkZsb2F0NjQscGl4ZWxUeXBlOnR9KX1lbHNlIGlmKGUuaW1hZ2VUeXBlLnBpeGVsVHlwZSE9PUYuU2NhbGFyJiZlLmltYWdlVHlwZS5waXhlbFR5cGUhPT1GLlZhcmlhYmxlTGVuZ3RoVmVjdG9yKXtsZXQgdD1GLlZhcmlhYmxlTGVuZ3RoVmVjdG9yO3I9aUEoZSx7cGl4ZWxUeXBlOnR9KX1yZXR1cm4gci5pbWFnZVR5cGUucGl4ZWxUeXBlPT09Ri5WYXJpYWJsZUxlbmd0aFZlY3RvciYmKHI9KGF3YWl0IEEocikpLm1hZ25pdHVkZUltYWdlKSxyfXZhciBJZT1Cbjthc3luYyBmdW5jdGlvbiBsbihBLGU9e30pe2xldCByPVt7dHlwZTpkLkltYWdlfV0sdD1be3R5cGU6ZC5JbWFnZSxkYXRhOkF9XSxuPVtdO24ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKTtsZXQgQz0idmVjdG9yLW1hZ25pdHVkZSIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgeXQoKSk7bGV0e3dlYldvcmtlcjpCLHJldHVyblZhbHVlOkksc3RkZXJyOmEsb3V0cHV0czpRfT1hd2FpdCBvQShDLG4scix0LHtwaXBlbGluZUJhc2VVcmw6a0EoKSxwaXBlbGluZVdvcmtlclVybDp2KCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEkhPT0wJiZhIT09IiIpdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6QixtYWduaXR1ZGVJbWFnZTpRWzBdPy5kYXRhfX12YXIgZ2U9bG47YXN5bmMgZnVuY3Rpb24gY24oQSxlPXtiYXNlbGluZUltYWdlczpbXX0pe2FzeW5jIGZ1bmN0aW9uIHIoaSl7bGV0e3dlYldvcmtlcjpDLG1hZ25pdHVkZUltYWdlOmx9PWF3YWl0IGdlKGkpO3JldHVybiBDPy50ZXJtaW5hdGUoKSx7bWFnbml0dWRlSW1hZ2U6bH19bGV0IHQ9YXdhaXQgSWUocixBKSxuPWF3YWl0IFByb21pc2UuYWxsKGUuYmFzZWxpbmVJbWFnZXMubWFwKGFzeW5jIGk9PmF3YWl0IEllKHIsaSkpKSxvPXsuLi5lfTtyZXR1cm4gby5iYXNlbGluZUltYWdlcz1uLHNlKHQsbyl9dmFyIEVuPWNuO3ZhciBodD0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgSUk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBlST0oQSx0KT0+e2Zvcih2YXIgSSBpbiB0KUlJKEEsSSx7Z2V0OnRbSV0sZW51bWVyYWJsZTohMH0pfTt2YXIgdkE9U3ltYm9sKCJDb21saW5rLnByb3h5IiksZ0k9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50Iiksckk9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLHBBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxlQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksJEE9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsb0k9e2NhbkhhbmRsZTpBPT4kQShBKSYmQVt2QV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTp0LHBvcnQyOkl9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gaUEoQSx0KSxbSSxbSV1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLG5JKEEpfX0saUk9e2NhbkhhbmRsZTpBPT4kQShBKSYmZUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgdDtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOkF9LFt0LFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LEF0PW5ldyBNYXAoW1sicHJveHkiLG9JXSxbInRocm93IixpSV1dKTtmdW5jdGlvbiBDSShBLHQpe2ZvcihsZXQgSSBvZiBBKWlmKHQ9PT1JfHxJPT09IioifHxJIGluc3RhbmNlb2YgUmVnRXhwJiZJLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaUEoQSx0PWdsb2JhbFRoaXMsST1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBlKGcpe2lmKCFnfHwhZy5kYXRhKXJldHVybjtpZighQ0koSSxnLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke2cub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpyLHR5cGU6byxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGcuZGF0YSksYT0oZy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChiKSxRO3RyeXtsZXQgQj1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixzKT0+ZltzXSxBKSxpPW4ucmVkdWNlKChmLHMpPT5mW3NdLEEpO3N3aXRjaChvKXtjYXNlIkdFVCI6UT1pO2JyZWFrO2Nhc2UiU0VUIjpCW24uc2xpY2UoLTEpWzBdXT1iKGcuZGF0YS52YWx1ZSksUT0hMDticmVhaztjYXNlIkFQUExZIjpRPWkuYXBwbHkoQixhKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBpKC4uLmEpO1E9YUkoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOnN9PW5ldyBNZXNzYWdlQ2hhbm5lbDtpQShBLHMpLFE9RkEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6UT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEIpe1E9e3ZhbHVlOkIsW2VBXTowfX1Qcm9taXNlLnJlc29sdmUoUSkuY2F0Y2goQj0+KHt2YWx1ZTpCLFtlQV06MH0pKS50aGVuKEI9PntsZXRbaSxmXT1vQShCKTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpLG89PT0iUkVMRUFTRSImJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGUpLHR0KHQpLHBBIGluIEEmJnR5cGVvZiBBW3BBXT09ImZ1bmN0aW9uIiYmQVtwQV0oKSl9KS5jYXRjaChCPT57bGV0W2ksZl09b0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtlQV06MH0pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZil9KX0pLHQuc3RhcnQmJnQuc3RhcnQoKX1mdW5jdGlvbiBCSShBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiB0dChBKXtCSShBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIG5JKEEsdCl7cmV0dXJuIFNBKEEsW10sdCl9ZnVuY3Rpb24gSUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIEl0KEEpe3JldHVybiBxKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3R0KEEpfSl9dmFyIGdBPW5ldyBXZWFrTWFwLHJBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCB0PShnQS5nZXQoQSl8fDApLTE7Z0Euc2V0KEEsdCksdD09PTAmJkl0KEEpfSk7ZnVuY3Rpb24gc0koQSx0KXtsZXQgST0oZ0EuZ2V0KHQpfHwwKSsxO2dBLnNldCh0LEkpLHJBJiZyQS5yZWdpc3RlcihBLHQsQSl9ZnVuY3Rpb24gUUkoQSl7ckEmJnJBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gU0EoQSx0PVtdLEk9ZnVuY3Rpb24oKXt9KXtsZXQgZT0hMSxnPW5ldyBQcm94eShJLHtnZXQocixvKXtpZihJQShlKSxvPT09ckkpcmV0dXJuKCk9PntRSShnKSxJdChBKSxlPSEwfTtpZihvPT09InRoZW4iKXtpZih0Lmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pmd9O2xldCBuPXEoQSx7dHlwZToiR0VUIixwYXRoOnQubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKGIpO3JldHVybiBuLnRoZW4uYmluZChuKX1yZXR1cm4gU0EoQSxbLi4udCxvXSl9LHNldChyLG8sbil7SUEoZSk7bGV0W2EsUV09b0Eobik7cmV0dXJuIHEoQSx7dHlwZToiU0VUIixwYXRoOlsuLi50LG9dLm1hcChCPT5CLnRvU3RyaW5nKCkpLHZhbHVlOmF9LFEpLnRoZW4oYil9LGFwcGx5KHIsbyxuKXtJQShlKTtsZXQgYT10W3QubGVuZ3RoLTFdO2lmKGE9PT1nSSlyZXR1cm4gcShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKGIpO2lmKGE9PT0iYmluZCIpcmV0dXJuIFNBKEEsdC5zbGljZSgwLC0xKSk7bGV0W1EsQl09X0Eobik7cmV0dXJuIHEoQSx7dHlwZToiQVBQTFkiLHBhdGg6dC5tYXAoaT0+aS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6UX0sQikudGhlbihiKX0sY29uc3RydWN0KHIsbyl7SUEoZSk7bGV0W24sYV09X0Eobyk7cmV0dXJuIHEoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOnQubWFwKFE9PlEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Om59LGEpLnRoZW4oYil9fSk7cmV0dXJuIHNJKGcsQSksZ31mdW5jdGlvbiBFSShBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBfQShBKXtsZXQgdD1BLm1hcChvQSk7cmV0dXJuW3QubWFwKEk9PklbMF0pLEVJKHQubWFwKEk9PklbMV0pKV19dmFyIGV0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEZBKEEsdCl7cmV0dXJuIGV0LnNldChBLHQpLEF9ZnVuY3Rpb24gYUkoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3ZBXTohMH0pfWZ1bmN0aW9uIG9BKEEpe2ZvcihsZXRbdCxJXW9mIEF0KWlmKEkuY2FuSGFuZGxlKEEpKXtsZXRbZSxnXT1JLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6dCx2YWx1ZTplfSxnXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZXQuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gYihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBBdC5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIHEoQSx0LEkpe3JldHVybiBuZXcgUHJvbWlzZShlPT57bGV0IGc9Y0koKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobyl7IW8uZGF0YXx8IW8uZGF0YS5pZHx8by5kYXRhLmlkIT09Z3x8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZShvLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmd9LHQpLEkpfSl9ZnVuY3Rpb24gY0koKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFcoQSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseSh0LGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpmSX09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6VUF9PU9iamVjdCxCQT0oQT0+dD0+e2xldCBJPWZJLmNhbGwodCk7cmV0dXJuIEFbSV18fChBW0ldPUkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxVPUE9PihBPUEudG9Mb3dlckNhc2UoKSx0PT5CQSh0KT09PUEpLG5BPUE9PnQ9PnR5cGVvZiB0PT09QSx7aXNBcnJheTpLfT1BcnJheSxaPW5BKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBsSShBKXtyZXR1cm4gQSE9PW51bGwmJiFaKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIVooQS5jb25zdHJ1Y3RvcikmJkYoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIGl0PVUoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gREkoQSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz90PUFycmF5QnVmZmVyLmlzVmlldyhBKTp0PUEmJkEuYnVmZmVyJiZpdChBLmJ1ZmZlciksdH12YXIgdUk9bkEoInN0cmluZyIpLEY9bkEoImZ1bmN0aW9uIiksQ3Q9bkEoIm51bWJlciIpLHNBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsaEk9QT0+QT09PSEwfHxBPT09ITEsQ0E9QT0+e2lmKEJBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IHQ9VUEoQSk7cmV0dXJuKHQ9PT1udWxsfHx0PT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZEk9VSgiRGF0ZSIpLHlJPVUoIkZpbGUiKSx3ST1VKCJCbG9iIiksbUk9VSgiRmlsZUxpc3QiKSxwST1BPT5zQShBKSYmRihBLnBpcGUpLFNJPUE9PntsZXQgdDtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxGKEEuYXBwZW5kKSYmKCh0PUJBKEEpKT09PSJmb3JtZGF0YSJ8fHQ9PT0ib2JqZWN0IiYmRihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxGST1VKCJVUkxTZWFyY2hQYXJhbXMiKSxSST1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gVihBLHQse2FsbE93bktleXM6ST0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBlLGc7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEsoQSkpZm9yKGU9MCxnPUEubGVuZ3RoO2U8ZztlKyspdC5jYWxsKG51bGwsQVtlXSxlLEEpO2Vsc2V7bGV0IHI9ST9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxvPXIubGVuZ3RoLG47Zm9yKGU9MDtlPG87ZSsrKW49cltlXSx0LmNhbGwobnVsbCxBW25dLG4sQSl9fWZ1bmN0aW9uIEJ0KEEsdCl7dD10LnRvTG93ZXJDYXNlKCk7bGV0IEk9T2JqZWN0LmtleXMoQSksZT1JLmxlbmd0aCxnO2Zvcig7ZS0tID4wOylpZihnPUlbZV0sdD09PWcudG9Mb3dlckNhc2UoKSlyZXR1cm4gZztyZXR1cm4gbnVsbH12YXIgbnQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxzdD1BPT4hWihBKSYmQSE9PW50O2Z1bmN0aW9uIE5BKCl7bGV0e2Nhc2VsZXNzOkF9PXN0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LEk9KGUsZyk9PntsZXQgcj1BJiZCdCh0LGcpfHxnO0NBKHRbcl0pJiZDQShlKT90W3JdPU5BKHRbcl0sZSk6Q0EoZSk/dFtyXT1OQSh7fSxlKTpLKGUpP3Rbcl09ZS5zbGljZSgpOnRbcl09ZX07Zm9yKGxldCBlPTAsZz1hcmd1bWVudHMubGVuZ3RoO2U8ZztlKyspYXJndW1lbnRzW2VdJiZWKGFyZ3VtZW50c1tlXSxJKTtyZXR1cm4gdH12YXIgTkk9KEEsdCxJLHthbGxPd25LZXlzOmV9PXt9KT0+KFYodCwoZyxyKT0+e0kmJkYoZyk/QVtyXT1XKGcsSSk6QVtyXT1nfSx7YWxsT3duS2V5czplfSksQSksVUk9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxHST0oQSx0LEksZSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6dC5wcm90b3R5cGV9KSxJJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLEkpfSxrST0oQSx0LEksZSk9PntsZXQgZyxyLG8sbj17fTtpZih0PXR8fHt9LEE9PW51bGwpcmV0dXJuIHQ7ZG97Zm9yKGc9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSkscj1nLmxlbmd0aDtyLS0gPjA7KW89Z1tyXSwoIWV8fGUobyxBLHQpKSYmIW5bb10mJih0W29dPUFbb10sbltvXT0hMCk7QT1JIT09ITEmJlVBKEEpfXdoaWxlKEEmJighSXx8SShBLHQpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB0fSxMST0oQSx0LEkpPT57QT1TdHJpbmcoQSksKEk9PT12b2lkIDB8fEk+QS5sZW5ndGgpJiYoST1BLmxlbmd0aCksSS09dC5sZW5ndGg7bGV0IGU9QS5pbmRleE9mKHQsSSk7cmV0dXJuIGUhPT0tMSYmZT09PUl9LEpJPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihLKEEpKXJldHVybiBBO2xldCB0PUEubGVuZ3RoO2lmKCFDdCh0KSlyZXR1cm4gbnVsbDtsZXQgST1uZXcgQXJyYXkodCk7Zm9yKDt0LS0gPjA7KUlbdF09QVt0XTtyZXR1cm4gSX0sSEk9KEE9PnQ9PkEmJnQgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJlVBKFVpbnQ4QXJyYXkpKSxZST0oQSx0KT0+e2xldCBlPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksZztmb3IoOyhnPWUubmV4dCgpKSYmIWcuZG9uZTspe2xldCByPWcudmFsdWU7dC5jYWxsKEEsclswXSxyWzFdKX19LGJJPShBLHQpPT57bGV0IEksZT1bXTtmb3IoOyhJPUEuZXhlYyh0KSkhPT1udWxsOyllLnB1c2goSSk7cmV0dXJuIGV9LE1JPVUoIkhUTUxGb3JtRWxlbWVudCIpLHFJPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKEksZSxnKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK2d9KSxydD0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9Pih0LEkpPT5BLmNhbGwodCxJKSkoT2JqZWN0LnByb3RvdHlwZSksS0k9VSgiUmVnRXhwIiksUXQ9KEEsdCk9PntsZXQgST1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxlPXt9O1YoSSwoZyxyKT0+e2xldCBvOyhvPXQoZyxyLEEpKSE9PSExJiYoZVtyXT1vfHxnKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsZSl9LE9JPUE9PntRdChBLCh0LEkpPT57aWYoRihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKEkpIT09LTEpcmV0dXJuITE7bGV0IGU9QVtJXTtpZihGKGUpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK0krIlwnIil9KX19KX0sVEk9KEEsdCk9PntsZXQgST17fSxlPWc9PntnLmZvckVhY2gocj0+e0lbcl09ITB9KX07cmV0dXJuIEsoQSk/ZShBKTplKFN0cmluZyhBKS5zcGxpdCh0KSksSX0sUEk9KCk9Pnt9LHhJPShBLHQpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTp0KSxSQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLG90PSIwMTIzNDU2Nzg5IixFdD17RElHSVQ6b3QsQUxQSEE6UkEsQUxQSEFfRElHSVQ6UkErUkEudG9VcHBlckNhc2UoKStvdH0sakk9KEE9MTYsdD1FdC5BTFBIQV9ESUdJVCk9PntsZXQgST0iIix7bGVuZ3RoOmV9PXQ7Zm9yKDtBLS07KUkrPXRbTWF0aC5yYW5kb20oKSplfDBdO3JldHVybiBJfTtmdW5jdGlvbiBXSShBKXtyZXR1cm4hIShBJiZGKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgWkk9QT0+e2xldCB0PW5ldyBBcnJheSgxMCksST0oZSxnKT0+e2lmKHNBKGUpKXtpZih0LmluZGV4T2YoZSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBlKSl7dFtnXT1lO2xldCByPUsoZSk/W106e307cmV0dXJuIFYoZSwobyxuKT0+e2xldCBhPUkobyxnKzEpOyFaKGEpJiYocltuXT1hKX0pLHRbZ109dm9pZCAwLHJ9fXJldHVybiBlfTtyZXR1cm4gSShBLDApfSxWST1VKCJBc3luY0Z1bmN0aW9uIiksWEk9QT0+QSYmKHNBKEEpfHxGKEEpKSYmRihBLnRoZW4pJiZGKEEuY2F0Y2gpLEM9e2lzQXJyYXk6Syxpc0FycmF5QnVmZmVyOml0LGlzQnVmZmVyOmxJLGlzRm9ybURhdGE6U0ksaXNBcnJheUJ1ZmZlclZpZXc6REksaXNTdHJpbmc6dUksaXNOdW1iZXI6Q3QsaXNCb29sZWFuOmhJLGlzT2JqZWN0OnNBLGlzUGxhaW5PYmplY3Q6Q0EsaXNVbmRlZmluZWQ6Wixpc0RhdGU6ZEksaXNGaWxlOnlJLGlzQmxvYjp3SSxpc1JlZ0V4cDpLSSxpc0Z1bmN0aW9uOkYsaXNTdHJlYW06cEksaXNVUkxTZWFyY2hQYXJhbXM6RkksaXNUeXBlZEFycmF5OkhJLGlzRmlsZUxpc3Q6bUksZm9yRWFjaDpWLG1lcmdlOk5BLGV4dGVuZDpOSSx0cmltOlJJLHN0cmlwQk9NOlVJLGluaGVyaXRzOkdJLHRvRmxhdE9iamVjdDprSSxraW5kT2Y6QkEsa2luZE9mVGVzdDpVLGVuZHNXaXRoOkxJLHRvQXJyYXk6SkksZm9yRWFjaEVudHJ5OllJLG1hdGNoQWxsOmJJLGlzSFRNTEZvcm06TUksaGFzT3duUHJvcGVydHk6cnQsaGFzT3duUHJvcDpydCxyZWR1Y2VEZXNjcmlwdG9yczpRdCxmcmVlemVNZXRob2RzOk9JLHRvT2JqZWN0U2V0OlRJLHRvQ2FtZWxDYXNlOnFJLG5vb3A6UEksdG9GaW5pdGVOdW1iZXI6eEksZmluZEtleTpCdCxnbG9iYWw6bnQsaXNDb250ZXh0RGVmaW5lZDpzdCxBTFBIQUJFVDpFdCxnZW5lcmF0ZVN0cmluZzpqSSxpc1NwZWNDb21wbGlhbnRGb3JtOldJLHRvSlNPTk9iamVjdDpaSSxpc0FzeW5jRm46VkksaXNUaGVuYWJsZTpYSX07ZnVuY3Rpb24gTyhBLHQsSSxlLGcpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxJJiYodGhpcy5jb25maWc9SSksZSYmKHRoaXMucmVxdWVzdD1lKSxnJiYodGhpcy5yZXNwb25zZT1nKX1DLmluaGVyaXRzKE8sRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpDLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBhdD1PLnByb3RvdHlwZSxjdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntjdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLGN0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXQsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Ty5mcm9tPShBLHQsSSxlLGcscik9PntsZXQgbz1PYmplY3QuY3JlYXRlKGF0KTtyZXR1cm4gQy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGEpe3JldHVybiBhIT09RXJyb3IucHJvdG90eXBlfSxuPT5uIT09ImlzQXhpb3NFcnJvciIpLE8uY2FsbChvLEEubWVzc2FnZSx0LEksZSxnKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxyJiZPYmplY3QuYXNzaWduKG8sciksb307dmFyIGw9Tzt2YXIgUUE9bnVsbDtmdW5jdGlvbiBHQShBKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KEEpfHxDLmlzQXJyYXkoQSl9ZnVuY3Rpb24gbHQoQSl7cmV0dXJuIEMuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gZnQoQSx0LEkpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihnLHIpe3JldHVybiBnPWx0KGcpLCFJJiZyPyJbIitnKyJdIjpnfSkuam9pbihJPyIuIjoiIik6dH1mdW5jdGlvbiB6SShBKXtyZXR1cm4gQy5pc0FycmF5KEEpJiYhQS5zb21lKEdBKX12YXIgX0k9Qy50b0ZsYXRPYmplY3QoQyx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHZJKEEsdCxJKXtpZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhRQXx8Rm9ybURhdGEpLEk9Qy50b0ZsYXRPYmplY3QoSSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIUMuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgZT1JLm1ldGFUb2tlbnMsZz1JLnZpc2l0b3J8fEIscj1JLmRvdHMsbz1JLmluZGV4ZXMsYT0oSS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZDLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIUMuaXNGdW5jdGlvbihnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIFEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoQy5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYSYmQy5pc0Jsb2IoRSkpdGhyb3cgbmV3IGwoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEMuaXNBcnJheUJ1ZmZlcihFKXx8Qy5pc1R5cGVkQXJyYXkoRSk/YSYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEIoRSxjLHUpe2xldCB5PUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoQy5lbmRzV2l0aChjLCJ7fSIpKWM9ZT9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKEMuaXNBcnJheShFKSYmekkoRSl8fChDLmlzRmlsZUxpc3QoRSl8fEMuZW5kc1dpdGgoYywiW10iKSkmJih5PUMudG9BcnJheShFKSkpcmV0dXJuIGM9bHQoYykseS5mb3JFYWNoKGZ1bmN0aW9uKE4sdEkpeyEoQy5pc1VuZGVmaW5lZChOKXx8Tj09PW51bGwpJiZ0LmFwcGVuZChvPT09ITA/ZnQoW2NdLHRJLHIpOm89PT1udWxsP2M6YysiW10iLFEoTikpfSksITF9cmV0dXJuIEdBKEUpPyEwOih0LmFwcGVuZChmdCh1LGMsciksUShFKSksITEpfWxldCBpPVtdLGY9T2JqZWN0LmFzc2lnbihfSSx7ZGVmYXVsdFZpc2l0b3I6Qixjb252ZXJ0VmFsdWU6USxpc1Zpc2l0YWJsZTpHQX0pO2Z1bmN0aW9uIHMoRSxjKXtpZighQy5pc1VuZGVmaW5lZChFKSl7aWYoaS5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTtpLnB1c2goRSksQy5mb3JFYWNoKEUsZnVuY3Rpb24oeSxSKXsoIShDLmlzVW5kZWZpbmVkKHkpfHx5PT09bnVsbCkmJmcuY2FsbCh0LHksQy5pc1N0cmluZyhSKT9SLnRyaW0oKTpSLGMsZikpPT09ITAmJnMoeSxjP2MuY29uY2F0KFIpOltSXSl9KSxpLnBvcCgpfX1pZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIHMoQSksdH12YXIgSj12STtmdW5jdGlvbiBEdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIHV0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmSihBLHRoaXMsdCl9dmFyIGh0PXV0LnByb3RvdHlwZTtodC5hcHBlbmQ9ZnVuY3Rpb24odCxJKXt0aGlzLl9wYWlycy5wdXNoKFt0LEldKX07aHQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IEk9dD9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxEdCl9OkR0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIEkoZ1swXSkrIj0iK0koZ1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciBFQT11dDtmdW5jdGlvbiAkSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiBYKEEsdCxJKXtpZighdClyZXR1cm4gQTtsZXQgZT1JJiZJLmVuY29kZXx8JEksZz1JJiZJLnNlcmlhbGl6ZSxyO2lmKGc/cj1nKHQsSSk6cj1DLmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcgRUEodCxJKS50b1N0cmluZyhlKSxyKXtsZXQgbz1BLmluZGV4T2YoIiUyMyIpO28hPT0tMSYmKEE9QS5zbGljZSgwLG8pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStyfXJldHVybiBBfXZhciBrQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsSSxlKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDpJLHN5bmNocm9ub3VzOmU/ZS5zeW5jaHJvbm91czohMSxydW5XaGVuOmU/ZS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7Qy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oZSl7ZSE9PW51bGwmJnQoZSl9KX19LExBPWtBO3ZhciBhQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGR0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpFQTt2YXIgeXQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciB3dD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBtdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpkdCxGb3JtRGF0YTp5dCxCbG9iOnd0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIEpBPXt9O2VJKEpBLHtoYXNCcm93c2VyRW52OigpPT5wdCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFlLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+dGV9KTt2YXIgcHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsQWU9KEE9PnB0JiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksdGU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciB3PXsuLi5KQSwuLi5tdH07ZnVuY3Rpb24gSEEoQSx0KXtyZXR1cm4gSihBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oSSxlLGcscil7cmV0dXJuIHcuaXNOb2RlJiZDLmlzQnVmZmVyKEkpPyh0aGlzLmFwcGVuZChlLEkudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6ci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gSWUoQSl7cmV0dXJuIEMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBlZShBKXtsZXQgdD17fSxJPU9iamVjdC5rZXlzKEEpLGUsZz1JLmxlbmd0aCxyO2ZvcihlPTA7ZTxnO2UrKylyPUlbZV0sdFtyXT1BW3JdO3JldHVybiB0fWZ1bmN0aW9uIGdlKEEpe2Z1bmN0aW9uIHQoSSxlLGcscil7bGV0IG89SVtyKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgbj1OdW1iZXIuaXNGaW5pdGUoK28pLGE9cj49SS5sZW5ndGg7cmV0dXJuIG89IW8mJkMuaXNBcnJheShnKT9nLmxlbmd0aDpvLGE/KEMuaGFzT3duUHJvcChnLG8pP2dbb109W2dbb10sZV06Z1tvXT1lLCFuKTooKCFnW29dfHwhQy5pc09iamVjdChnW29dKSkmJihnW29dPVtdKSx0KEksZSxnW29dLHIpJiZDLmlzQXJyYXkoZ1tvXSkmJihnW29dPWVlKGdbb10pKSwhbil9aWYoQy5pc0Zvcm1EYXRhKEEpJiZDLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IEk9e307cmV0dXJuIEMuZm9yRWFjaEVudHJ5KEEsKGUsZyk9Pnt0KEllKGUpLGcsSSwwKX0pLEl9cmV0dXJuIG51bGx9dmFyIGNBPWdlO2Z1bmN0aW9uIHJlKEEsdCxJKXtpZihDLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksQy50cmltKEEpfWNhdGNoKGUpe2lmKGUubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgZX1yZXR1cm4oSXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBZQT17dHJhbnNpdGlvbmFsOmFBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxJKXtsZXQgZT1JLmdldENvbnRlbnRUeXBlKCl8fCIiLGc9ZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEscj1DLmlzT2JqZWN0KHQpO2lmKHImJkMuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxDLmlzRm9ybURhdGEodCkpcmV0dXJuIGc/SlNPTi5zdHJpbmdpZnkoY0EodCkpOnQ7aWYoQy5pc0FycmF5QnVmZmVyKHQpfHxDLmlzQnVmZmVyKHQpfHxDLmlzU3RyZWFtKHQpfHxDLmlzRmlsZSh0KXx8Qy5pc0Jsb2IodCkpcmV0dXJuIHQ7aWYoQy5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoQy5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IG47aWYocil7aWYoZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gSEEodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChuPUMuaXNGaWxlTGlzdCh0KSl8fGUuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEoobj97ImZpbGVzW10iOnR9OnQsYSYmbmV3IGEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiByfHxnPyhJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSkscmUodCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IEk9dGhpcy50cmFuc2l0aW9uYWx8fFlBLnRyYW5zaXRpb25hbCxlPUkmJkkuZm9yY2VkSlNPTlBhcnNpbmcsZz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZih0JiZDLmlzU3RyaW5nKHQpJiYoZSYmIXRoaXMucmVzcG9uc2VUeXBlfHxnKSl7bGV0IG89IShJJiZJLnNpbGVudEpTT05QYXJzaW5nKSYmZzt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2gobil7aWYobyl0aHJvdyBuLm5hbWU9PT0iU3ludGF4RXJyb3IiP2wuZnJvbShuLGwuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bn19cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57WUEuaGVhZGVyc1tBXT17fX0pO3ZhciBUPVlBO3ZhciBvZT1DLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLFN0PUE9PntsZXQgdD17fSxJLGUsZztyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihvKXtnPW8uaW5kZXhPZigiOiIpLEk9by5zdWJzdHJpbmcoMCxnKS50cmltKCkudG9Mb3dlckNhc2UoKSxlPW8uc3Vic3RyaW5nKGcrMSkudHJpbSgpLCEoIUl8fHRbSV0mJm9lW0ldKSYmKEk9PT0ic2V0LWNvb2tpZSI/dFtJXT90W0ldLnB1c2goZSk6dFtJXT1bZV06dFtJXT10W0ldP3RbSV0rIiwgIitlOmUpfSksdH07dmFyIEZ0PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24geihBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpDLmlzQXJyYXkoQSk/QS5tYXAoZkEpOlN0cmluZyhBKX1mdW5jdGlvbiBpZShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLEk9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxlO2Zvcig7ZT1JLmV4ZWMoQSk7KXRbZVsxXV09ZVsyXTtyZXR1cm4gdH12YXIgQ2U9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gYkEoQSx0LEksZSxnKXtpZihDLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHQsSSk7aWYoZyYmKHQ9SSksISFDLmlzU3RyaW5nKHQpKXtpZihDLmlzU3RyaW5nKGUpKXJldHVybiB0LmluZGV4T2YoZSkhPT0tMTtpZihDLmlzUmVnRXhwKGUpKXJldHVybiBlLnRlc3QodCl9fWZ1bmN0aW9uIEJlKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxJLGUpPT5JLnRvVXBwZXJDYXNlKCkrZSl9ZnVuY3Rpb24gbmUoQSx0KXtsZXQgST1DLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGUrSSx7dmFsdWU6ZnVuY3Rpb24oZyxyLG8pe3JldHVybiB0aGlzW2VdLmNhbGwodGhpcyx0LGcscixvKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxJLGUpe2xldCBnPXRoaXM7ZnVuY3Rpb24gcihuLGEsUSl7bGV0IEI9eihhKTtpZighQil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGk9Qy5maW5kS2V5KGcsQik7KCFpfHxnW2ldPT09dm9pZCAwfHxRPT09ITB8fFE9PT12b2lkIDAmJmdbaV0hPT0hMSkmJihnW2l8fGFdPWZBKG4pKX1sZXQgbz0obixhKT0+Qy5mb3JFYWNoKG4sKFEsQik9PnIoUSxCLGEpKTtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKHQsSSk6Qy5pc1N0cmluZyh0KSYmKHQ9dC50cmltKCkpJiYhQ2UodCk/byhTdCh0KSxJKTp0IT1udWxsJiZyKEksdCxlKSx0aGlzfWdldCh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtpZihlKXtsZXQgZz10aGlzW2VdO2lmKCFJKXJldHVybiBnO2lmKEk9PT0hMClyZXR1cm4gaWUoZyk7aWYoQy5pc0Z1bmN0aW9uKEkpKXJldHVybiBJLmNhbGwodGhpcyxnLGUpO2lmKEMuaXNSZWdFeHAoSSkpcmV0dXJuIEkuZXhlYyhnKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKGUmJnRoaXNbZV0hPT12b2lkIDAmJighSXx8YkEodGhpcyx0aGlzW2VdLGUsSSkpKX1yZXR1cm4hMX1kZWxldGUodCxJKXtsZXQgZT10aGlzLGc9ITE7ZnVuY3Rpb24gcihvKXtpZihvPXoobyksbyl7bGV0IG49Qy5maW5kS2V5KGUsbyk7biYmKCFJfHxiQShlLGVbbl0sbixJKSkmJihkZWxldGUgZVtuXSxnPSEwKX19cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSxnfWNsZWFyKHQpe2xldCBJPU9iamVjdC5rZXlzKHRoaXMpLGU9SS5sZW5ndGgsZz0hMTtmb3IoO2UtLTspe2xldCByPUlbZV07KCF0fHxiQSh0aGlzLHRoaXNbcl0scix0LCEwKSkmJihkZWxldGUgdGhpc1tyXSxnPSEwKX1yZXR1cm4gZ31ub3JtYWxpemUodCl7bGV0IEk9dGhpcyxlPXt9O3JldHVybiBDLmZvckVhY2godGhpcywoZyxyKT0+e2xldCBvPUMuZmluZEtleShlLHIpO2lmKG8pe0lbb109ZkEoZyksZGVsZXRlIElbcl07cmV0dXJufWxldCBuPXQ/QmUocik6U3RyaW5nKHIpLnRyaW0oKTtuIT09ciYmZGVsZXRlIElbcl0sSVtuXT1mQShnKSxlW25dPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChlLGcpPT57ZSE9bnVsbCYmZSE9PSExJiYoSVtnXT10JiZDLmlzQXJyYXkoZSk/ZS5qb2luKCIsICIpOmUpfSksSX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxJXSk9PnQrIjogIitJKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5JKXtsZXQgZT1uZXcgdGhpcyh0KTtyZXR1cm4gSS5mb3JFYWNoKGc9PmUuc2V0KGcpKSxlfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgZT0odGhpc1tGdF09dGhpc1tGdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxnPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIobyl7bGV0IG49eihvKTtlW25dfHwobmUoZyxvKSxlW25dPSEwKX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLHRoaXN9fTtQLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtDLnJlZHVjZURlc2NyaXB0b3JzKFAucHJvdG90eXBlLCh7dmFsdWU6QX0sdCk9PntsZXQgST10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChlKXt0aGlzW0ldPWV9fX0pO0MuZnJlZXplTWV0aG9kcyhQKTt2YXIgbT1QO2Z1bmN0aW9uIF8oQSx0KXtsZXQgST10aGlzfHxULGU9dHx8SSxnPW0uZnJvbShlLmhlYWRlcnMpLHI9ZS5kYXRhO3JldHVybiBDLmZvckVhY2goQSxmdW5jdGlvbihuKXtyPW4uY2FsbChJLHIsZy5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxnLm5vcm1hbGl6ZSgpLHJ9ZnVuY3Rpb24gdihBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFJ0KEEsdCxJKXtsLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGwuRVJSX0NBTkNFTEVELHQsSSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1DLmluaGVyaXRzKFJ0LGwse19fQ0FOQ0VMX186ITB9KTt2YXIgSD1SdDtmdW5jdGlvbiBNQShBLHQsSSl7bGV0IGU9SS5jb25maWcudmFsaWRhdGVTdGF0dXM7IUkuc3RhdHVzfHwhZXx8ZShJLnN0YXR1cyk/QShJKTp0KG5ldyBsKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrSS5zdGF0dXMsW2wuRVJSX0JBRF9SRVFVRVNULGwuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihJLnN0YXR1cy8xMDApLTRdLEkuY29uZmlnLEkucmVxdWVzdCxJKSl9dmFyIE50PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsSSxlLGcscil7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07Qy5pc051bWJlcihJKSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoSSkudG9HTVRTdHJpbmcoKSksQy5pc1N0cmluZyhlKSYmby5wdXNoKCJwYXRoPSIrZSksQy5pc1N0cmluZyhnKSYmby5wdXNoKCJkb21haW49IitnKSxyPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gcUEoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gS0EoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uICQoQSx0KXtyZXR1cm4gQSYmIXFBKHQpP0tBKEEsdCk6dH12YXIgVXQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLGU7ZnVuY3Rpb24gZyhyKXtsZXQgbz1yO3JldHVybiB0JiYoSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLG89SS5ocmVmKSxJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbykse2hyZWY6SS5ocmVmLHByb3RvY29sOkkucHJvdG9jb2w/SS5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6SS5ob3N0LHNlYXJjaDpJLnNlYXJjaD9JLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDpJLmhhc2g/SS5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTpJLmhvc3RuYW1lLHBvcnQ6SS5wb3J0LHBhdGhuYW1lOkkucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP0kucGF0aG5hbWU6Ii8iK0kucGF0aG5hbWV9fXJldHVybiBlPWcod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG8pe2xldCBuPUMuaXNTdHJpbmcobyk/ZyhvKTpvO3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiBPQShBKXtsZXQgdD0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gdCYmdFsxXXx8IiJ9ZnVuY3Rpb24gc2UoQSx0KXtBPUF8fDEwO2xldCBJPW5ldyBBcnJheShBKSxlPW5ldyBBcnJheShBKSxnPTAscj0wLG87cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjFlMyxmdW5jdGlvbihhKXtsZXQgUT1EYXRlLm5vdygpLEI9ZVtyXTtvfHwobz1RKSxJW2ddPWEsZVtnXT1RO2xldCBpPXIsZj0wO2Zvcig7aSE9PWc7KWYrPUlbaSsrXSxpPWklQTtpZihnPShnKzEpJUEsZz09PXImJihyPShyKzEpJUEpLFEtbzx0KXJldHVybjtsZXQgcz1CJiZRLUI7cmV0dXJuIHM/TWF0aC5yb3VuZChmKjFlMy9zKTp2b2lkIDB9fXZhciBHdD1zZTtmdW5jdGlvbiBrdChBLHQpe2xldCBJPTAsZT1HdCg1MCwyNTApO3JldHVybiBnPT57bGV0IHI9Zy5sb2FkZWQsbz1nLmxlbmd0aENvbXB1dGFibGU/Zy50b3RhbDp2b2lkIDAsbj1yLUksYT1lKG4pLFE9cjw9bztJPXI7bGV0IEI9e2xvYWRlZDpyLHRvdGFsOm8scHJvZ3Jlc3M6bz9yL286dm9pZCAwLGJ5dGVzOm4scmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJm8mJlE/KG8tcikvYTp2b2lkIDAsZXZlbnQ6Z307Qlt0PyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEoQil9fXZhciBRZT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLEx0PVFlJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSSxlKXtsZXQgZz1BLmRhdGEscj1tLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm8sd2l0aFhTUkZUb2tlbjpufT1BLGE7ZnVuY3Rpb24gUSgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQjtpZihDLmlzRm9ybURhdGEoZykpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilyLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChCPXIuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4udV09Qj9CLnNwbGl0KCI7IikubWFwKHk9PnkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107ci5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLnVdLmpvaW4oIjsgIikpfX1sZXQgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgYz1BLmF1dGgudXNlcm5hbWV8fCIiLHU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShjKyI6Iit1KSl9bGV0IGY9JChBLmJhc2VVUkwsQS51cmwpO2kub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoZixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxpLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIHMoKXtpZighaSlyZXR1cm47bGV0IGM9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gaSYmaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkseT17ZGF0YTohb3x8bz09PSJ0ZXh0Inx8bz09PSJqc29uIj9pLnJlc3BvbnNlVGV4dDppLnJlc3BvbnNlLHN0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDppfTtNQShmdW5jdGlvbihOKXtJKE4pLFEoKX0sZnVuY3Rpb24oTil7ZShOKSxRKCl9LHkpLGk9bnVsbH1pZigib25sb2FkZW5kImluIGk/aS5vbmxvYWRlbmQ9czppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFpfHxpLnJlYWR5U3RhdGUhPT00fHxpLnN0YXR1cz09PTAmJiEoaS5yZXNwb25zZVVSTCYmaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocyl9LGkub25hYm9ydD1mdW5jdGlvbigpe2kmJihlKG5ldyBsKCJSZXF1ZXN0IGFib3J0ZWQiLGwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbCl9LGkub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IGwoIk5ldHdvcmsgRXJyb3IiLGwuRVJSX05FVFdPUkssQSxpKSksaT1udWxsfSxpLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIix5PUEudHJhbnNpdGlvbmFsfHxhQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksZShuZXcgbCh1LHkuY2xhcmlmeVRpbWVvdXRFcnJvcj9sLkVUSU1FRE9VVDpsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobiYmQy5pc0Z1bmN0aW9uKG4pJiYobj1uKEEpKSxufHxuIT09ITEmJlV0KGYpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmTnQucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfWc9PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gaSYmQy5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24odSx5KXtpLnNldFJlcXVlc3RIZWFkZXIoeSx1KX0pLEMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoaS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksbyYmbyE9PSJqc29uIiYmKGkucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS51cGxvYWQmJmkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYT1jPT57aSYmKGUoIWN8fGMudHlwZT9uZXcgSChudWxsLEEsaSk6YyksaS5hYm9ydCgpLGk9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9hKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IEU9T0EoZik7aWYoRSYmdy5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtlKG5ldyBsKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGwuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59aS5zZW5kKGd8fG51bGwpfSl9O3ZhciBUQT17aHR0cDpRQSx4aHI6THR9O0MuZm9yRWFjaChUQSwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBKdD1BPT5gLSAke0F9YCxFZT1BPT5DLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbEE9e2dldEFkYXB0ZXI6QT0+e0E9Qy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxJLGUsZz17fTtmb3IobGV0IHI9MDtyPHQ7cisrKXtJPUFbcl07bGV0IG87aWYoZT1JLCFFZShJKSYmKGU9VEFbKG89U3RyaW5nKEkpKS50b0xvd2VyQ2FzZSgpXSxlPT09dm9pZCAwKSl0aHJvdyBuZXcgbChgVW5rbm93biBhZGFwdGVyIFwnJHtvfVwnYCk7aWYoZSlicmVhaztnW298fCIlMjMiK3JdPWV9aWYoIWUpe2xldCByPU9iamVjdC5lbnRyaWVzKGcpLm1hcCgoW24sYV0pPT5gYWRhcHRlciAke259IGArKGE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPXQ/ci5sZW5ndGg+MT9gc2luY2UgOiUwQWArci5tYXAoSnQpLmpvaW4oYCUwQWApOiIgIitKdChyWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBsKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIGV9LGFkYXB0ZXJzOlRBfTtmdW5jdGlvbiBQQShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSChudWxsLEEpfWZ1bmN0aW9uIERBKEEpe3JldHVybiBQQShBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGxBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxULmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFBBKEEpLGUuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUpLGUuaGVhZGVycz1tLmZyb20oZS5oZWFkZXJzKSxlfSxmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8KFBBKEEpLGUmJmUucmVzcG9uc2UmJihlLnJlc3BvbnNlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlLnJlc3BvbnNlKSxlLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKGUucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChlKX0pfXZhciBIdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgST17fTtmdW5jdGlvbiBlKFEsQixpKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KFEpJiZDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZS5jYWxsKHtjYXNlbGVzczppfSxRLEIpOkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlKHt9LEIpOkMuaXNBcnJheShCKT9CLnNsaWNlKCk6Qn1mdW5jdGlvbiBnKFEsQixpKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSxpKX1lbHNlIHJldHVybiBlKFEsQixpKX1mdW5jdGlvbiByKFEsQil7aWYoIUMuaXNVbmRlZmluZWQoQikpcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG8oUSxCKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSl9ZWxzZSByZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbihRLEIsaSl7aWYoaSBpbiB0KXJldHVybiBlKFEsQik7aWYoaSBpbiBBKXJldHVybiBlKHZvaWQgMCxRKX1sZXQgYT17dXJsOnIsbWV0aG9kOnIsZGF0YTpyLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpuLGhlYWRlcnM6KFEsQik9PmcoSHQoUSksSHQoQiksITApfTtyZXR1cm4gQy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24oQil7bGV0IGk9YVtCXXx8ZyxmPWkoQVtCXSx0W0JdLEIpO0MuaXNVbmRlZmluZWQoZikmJmkhPT1ufHwoSVtCXT1mKX0pLEl9dmFyIHVBPSIxLjYuOCI7dmFyIHhBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSx0KT0+e3hBW0FdPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09PUF8fCJhIisodDwxPyJuICI6IiAiKStBfX0pO3ZhciBZdD17fTt4QS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxJLGUpe2Z1bmN0aW9uIGcocixvKXtyZXR1cm4iW0F4aW9zIHYiK3VBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK3IrIlwnIitvKyhlPyIuICIrZToiIil9cmV0dXJuKHIsbyxuKT0+e2lmKHQ9PT0hMSl0aHJvdyBuZXcgbChnKG8sIiBoYXMgYmVlbiByZW1vdmVkIisoST8iIGluICIrSToiIikpLGwuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBJJiYhWXRbb10mJihZdFtvXT0hMCxjb25zb2xlLndhcm4oZyhvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitJKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLHQ/dChyLG8sbik6ITB9fTtmdW5jdGlvbiBhZShBLHQsSSl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBsKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxnPWUubGVuZ3RoO2Zvcig7Zy0tID4wOyl7bGV0IHI9ZVtnXSxvPXRbcl07aWYobyl7bGV0IG49QVtyXSxhPW49PT12b2lkIDB8fG8obixyLEEpO2lmKGEhPT0hMCl0aHJvdyBuZXcgbCgib3B0aW9uICIrcisiIG11c3QgYmUgIithLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKEkhPT0hMCl0aHJvdyBuZXcgbCgiVW5rbm93biBvcHRpb24gIityLGwuRVJSX0JBRF9PUFRJT04pfX12YXIgaEE9e2Fzc2VydE9wdGlvbnM6YWUsdmFsaWRhdG9yczp4QX07dmFyIFk9aEEudmFsaWRhdG9ycyx4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdHM9dCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgTEEscmVzcG9uc2U6bmV3IExBfX1hc3luYyByZXF1ZXN0KHQsSSl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KHQsSSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgZztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShnPXt9KTpnPW5ldyBFcnJvcjtsZXQgcj1nLnN0YWNrP2cuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7ZS5zdGFjaz9yJiYhU3RyaW5nKGUuc3RhY2spLmVuZHNXaXRoKHIucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihlLnN0YWNrKz1gJTBBYCtyKTplLnN0YWNrPXJ9dGhyb3cgZX19X3JlcXVlc3QodCxJKXt0eXBlb2YgdD09InN0cmluZyI/KEk9SXx8e30sSS51cmw9dCk6ST10fHx7fSxJPWsodGhpcy5kZWZhdWx0cyxJKTtsZXR7dHJhbnNpdGlvbmFsOmUscGFyYW1zU2VyaWFsaXplcjpnLGhlYWRlcnM6cn09STtlIT09dm9pZCAwJiZoQS5hc3NlcnRPcHRpb25zKGUse3NpbGVudEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbil9LCExKSxnIT1udWxsJiYoQy5pc0Z1bmN0aW9uKGcpP0kucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOmd9OmhBLmFzc2VydE9wdGlvbnMoZyx7ZW5jb2RlOlkuZnVuY3Rpb24sc2VyaWFsaXplOlkuZnVuY3Rpb259LCEwKSksSS5tZXRob2Q9KEkubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89ciYmQy5tZXJnZShyLmNvbW1vbixyW0kubWV0aG9kXSk7ciYmQy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgcltFXX0pLEkuaGVhZGVycz1tLmNvbmNhdChvLHIpO2xldCBuPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3R5cGVvZiBjLnJ1bldoZW49PSJmdW5jdGlvbiImJmMucnVuV2hlbihJKT09PSExfHwoYT1hJiZjLnN5bmNocm9ub3VzLG4udW5zaGlmdChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKSl9KTtsZXQgUT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGMpe1EucHVzaChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKX0pO2xldCBCLGk9MCxmO2lmKCFhKXtsZXQgRT1bREEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxuKSxFLnB1c2guYXBwbHkoRSxRKSxmPUUubGVuZ3RoLEI9UHJvbWlzZS5yZXNvbHZlKEkpO2k8ZjspQj1CLnRoZW4oRVtpKytdLEVbaSsrXSk7cmV0dXJuIEJ9Zj1uLmxlbmd0aDtsZXQgcz1JO2ZvcihpPTA7aTxmOyl7bGV0IEU9bltpKytdLGM9bltpKytdO3RyeXtzPUUocyl9Y2F0Y2godSl7Yy5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXtCPURBLmNhbGwodGhpcyxzKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKGk9MCxmPVEubGVuZ3RoO2k8ZjspQj1CLnRoZW4oUVtpKytdLFFbaSsrXSk7cmV0dXJuIEJ9Z2V0VXJpKHQpe3Q9ayh0aGlzLmRlZmF1bHRzLHQpO2xldCBJPSQodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gWChJLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe3gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKEksZSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKGV8fHt9LHttZXRob2Q6dCx1cmw6SSxkYXRhOihlfHx7fSkuZGF0YX0pKX19KTtDLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBJKGUpe3JldHVybiBmdW5jdGlvbihyLG8sbil7cmV0dXJuIHRoaXMucmVxdWVzdChrKG58fHt9LHttZXRob2Q6dCxoZWFkZXJzOmU/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTpvfSkpfX14LnByb3RvdHlwZVt0XT1JKCkseC5wcm90b3R5cGVbdCsiRm9ybSJdPUkoITApfSk7dmFyIEFBPXg7dmFyIGpBPWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBJO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXtJPXJ9KTtsZXQgZT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGc9PntpZighZS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1lLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOyllLl9saXN0ZW5lcnNbcl0oZyk7ZS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1nPT57bGV0IHIsbz1uZXcgUHJvbWlzZShuPT57ZS5zdWJzY3JpYmUobikscj1ufSkudGhlbihnKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKHIpfSxvfSx0KGZ1bmN0aW9uKHIsbyxuKXtlLnJlYXNvbnx8KGUucmVhc29uPW5ldyBIKHIsbyxuKSxJKGUucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IEk9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7SSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEksMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihnKXt0PWd9KSxjYW5jZWw6dH19fSxidD1qQTtmdW5jdGlvbiBXQShBKXtyZXR1cm4gZnVuY3Rpb24oSSl7cmV0dXJuIEEuYXBwbHkobnVsbCxJKX19ZnVuY3Rpb24gWkEoQSl7cmV0dXJuIEMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFZBPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhWQSkuZm9yRWFjaCgoW0EsdF0pPT57VkFbdF09QX0pO3ZhciBNdD1WQTtmdW5jdGlvbiBxdChBKXtsZXQgdD1uZXcgQUEoQSksST1XKEFBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBDLmV4dGVuZChJLEFBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksQy5leHRlbmQoSSx0LG51bGwse2FsbE93bktleXM6ITB9KSxJLmNyZWF0ZT1mdW5jdGlvbihnKXtyZXR1cm4gcXQoayhBLGcpKX0sSX12YXIgaD1xdChUKTtoLkF4aW9zPUFBO2guQ2FuY2VsZWRFcnJvcj1IO2guQ2FuY2VsVG9rZW49YnQ7aC5pc0NhbmNlbD12O2guVkVSU0lPTj11QTtoLnRvRm9ybURhdGE9SjtoLkF4aW9zRXJyb3I9bDtoLkNhbmNlbD1oLkNhbmNlbGVkRXJyb3I7aC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtoLnNwcmVhZD1XQTtoLmlzQXhpb3NFcnJvcj1aQTtoLm1lcmdlQ29uZmlnPWs7aC5BeGlvc0hlYWRlcnM9bTtoLmZvcm1Ub0pTT049QT0+Y0EoQy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtoLmdldEFkYXB0ZXI9bEEuZ2V0QWRhcHRlcjtoLkh0dHBTdGF0dXNDb2RlPU10O2guZGVmYXVsdD1oO3ZhciBkQT1oO3ZhcntBeGlvczppbyxBeGlvc0Vycm9yOkNvLENhbmNlbGVkRXJyb3I6Qm8saXNDYW5jZWw6bm8sQ2FuY2VsVG9rZW46c28sVkVSU0lPTjpRbyxhbGw6RW8sQ2FuY2VsOmFvLGlzQXhpb3NFcnJvcjpjbyxzcHJlYWQ6Zm8sdG9Gb3JtRGF0YTpsbyxBeGlvc0hlYWRlcnM6RG8sSHR0cFN0YXR1c0NvZGU6dW8sZm9ybVRvSlNPTjpobyxnZXRBZGFwdGVyOnlvLG1lcmdlQ29uZmlnOndvfT1kQTt2YXIgdEEsTCx6QSxYQT17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe3pBPW5ldyBVaW50OEFycmF5KEwuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSx5QT1jbGFzc3tpbml0KCl7cmV0dXJuIHRBfHwodHlwZW9mIGZldGNoPCJ1Ij90QT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK0t0KS50aGVuKHQ9PnQuYXJyYXlCdWZmZXIoKSkudGhlbih0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0LFhBKSkudGhlbih0aGlzLl9pbml0KTp0QT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShLdCwiYmFzZTY0IiksWEEpLnRoZW4odGhpcy5faW5pdCksdEEpfV9pbml0KHQpe0w9dC5pbnN0YW5jZSxYQS5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUodCxJPTApe2lmKCFMKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBlPXQuYnl0ZUxlbmd0aCxnPUwuZXhwb3J0cy5tYWxsb2MoZSk7ekEuc2V0KHQsZyksST1JfHxOdW1iZXIoTC5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUoZyxlKSk7bGV0IHI9TC5leHBvcnRzLm1hbGxvYyhJKSxvPUwuZXhwb3J0cy5aU1REX2RlY29tcHJlc3MocixJLGcsZSksbj16QS5zbGljZShyLHIrbyk7cmV0dXJuIEwuZXhwb3J0cy5mcmVlKGcpLEwuZXhwb3J0cy5mcmVlKHIpLG59fSxLdD0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBPdD1uZXcgeUEsVHQ9ITE7YXN5bmMgZnVuY3Rpb24gY2UoQSx0LEkpe2xldCBlPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP2U9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP2U9QTplPWAke3R9LyR7QX1gLGUuZW5kc1dpdGgoIi5qcyIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTMpKSxlLmVuZHNXaXRoKCIud2FzbSIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTUpKTtsZXQgZz1gJHtlfS53YXNtYCxyPWF3YWl0IGRBLmdldChgJHtnfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6SX0pO1R0fHwoYXdhaXQgT3QuaW5pdCgpLFR0PSEwKTtsZXQgbj1PdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7ZX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIFB0PWNlO3ZhciB3QT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGZlKEEsdCxJKXtsZXQgZT1BLGc9QSxyPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKGU9bmV3IFVSTChBLmhyZWYpLGc9ZS5ocmVmKSx3QS5oYXMoZyk/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLFB0KGUsdCxJKSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIHh0PWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9dWU7ZnVuY3Rpb24gaGUoQSx0KXtsZXQgST1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e0k9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDg6e0k9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFMuVUludDE2OntJPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFMuSW50MTY6e0k9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7ST1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDMyOntJPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ0ludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQzMjp7ST1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDY0OntJPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ST1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ST1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIEl9dmFyIEc9aGU7dmFyIFp0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGp0PW5ldyBUZXh0RW5jb2RlcixXdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSx0KXtsZXQgST17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3Blbih0LEkuZmxhZ3MpLHI9QS5mc19zdGF0KHQpLnNpemUsbz1udWxsO1p0P289bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOm89bmV3IEFycmF5QnVmZmVyKHIpO2xldCBuPW5ldyBVaW50OEFycmF5KG8pO3JldHVybiBBLmZzX3JlYWQoZSxuLDAsciwwKSxBLmZzX2Nsb3NlKGUpLG59ZnVuY3Rpb24gVnQoQSx0LEkpe2xldCBlPW51bGw7WnQ/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoSSk6ZT1uZXcgQXJyYXlCdWZmZXIoSSk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxJKTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiBkKEEsdCxJLGUpe2xldCBnPTA7cmV0dXJuIHQhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGUsdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gTShBLHQsSSl7bGV0IGU9SlNPTi5zdHJpbmdpZnkodCksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gcChBLHQsSSxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLG89VnQoQSxnLHIpO3JldHVybiBHKGUsby5idWZmZXIpfWZ1bmN0aW9uIG1BKEEsdCl7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksZT1BLlVURjhUb1N0cmluZyhJKTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLHQsSSxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxCKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IGk9anQuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IGk9anQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IGk9US5kYXRhLmRhdGEsZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IGk9US5kYXRhLGY9ZChBLGkuZGF0YSxCLDApLHM9ZChBLGkuZGlyZWN0aW9uLEIsMSksRT10eXBlb2YgaS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShpLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOmkuaW1hZ2VUeXBlLG5hbWU6aS5uYW1lLG9yaWdpbjppLm9yaWdpbixzcGFjaW5nOmkuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsc2l6ZTppLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtNKEEsYyxCKTticmVha31jYXNlIEQuTWVzaDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5jZWxscyxCLDEpLEU9ZChBLGkucG9pbnREYXRhLEIsMiksYz1kKEEsaS5jZWxsRGF0YSxCLDMpLHU9e21lc2hUeXBlOmkubWVzaFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczppLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsY2VsbEJ1ZmZlclNpemU6aS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsdSxCKTticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkucG9pbnREYXRhLEIsMSksRT17cG9pbnRTZXRUeXBlOmkucG9pbnRTZXRUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YH07TShBLEUsQik7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnZlcnRpY2VzLEIsMSksRT1kKEEsaS5saW5lcyxCLDIpLGM9ZChBLGkucG9seWdvbnMsQiwzKSx1PWQoQSxpLnRyaWFuZ2xlU3RyaXBzLEIsNCkseT1kKEEsaS5wb2ludERhdGEsQiw1KSxSPWQoQSxpLnBvaW50RGF0YSxCLDYpLE49e3BvbHlEYXRhVHlwZTppLnBvbHlEYXRhVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6aS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsbGluZXNCdWZmZXJTaXplOmkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTppLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6aS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07TShBLE4sQik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgbz1BLmdldE1vZHVsZVN0ZG91dCgpLG49QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiBJIT1udWxsJiZJLmxlbmd0aD4wJiZyPT09MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7bGV0IGk9bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9e2RhdGE6V3QuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPUpTT04ucGFyc2UoV3QuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pO2k9e2RhdGE6VnQoQSxzLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgcz1tQShBLEIpO3MuZGF0YT1wKEEsQiwwLHMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLHMuZGlyZWN0aW9uPXAoQSxCLDEsai5GbG9hdDY0KSxzLm1ldGFkYXRhPW5ldyBNYXAocy5tZXRhZGF0YSksaT1zO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxzPjA/cy5jZWxscz1wKEEsQiwxLHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOnMuY2VsbHM9RyhzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMixzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsMyxzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwxLHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxqLkZsb2F0MzIpOnMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXkscy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9zLnZlcnRpY2VzPXAoQSxCLDEsUy5VSW50MzIpOnMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LHMubGluZXNCdWZmZXJTaXplPjA/cy5saW5lcz1wKEEsQiwyLFMuVUludDMyKTpzLmxpbmVzPW5ldyBVaW50MzJBcnJheSxzLnBvbHlnb25zQnVmZmVyU2l6ZT4wP3MucG9seWdvbnM9cChBLEIsMyxTLlVJbnQzMik6cy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXkscy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9zLnRyaWFuZ2xlU3RyaXBzPXAoQSxCLDQsUy5VSW50MzIpOnMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDUscy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsNixzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOlEudHlwZSxkYXRhOml9O2EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpyLHN0ZG91dDpvLHN0ZGVycjpuLG91dHB1dHM6YX19dmFyIFh0PXllO3ZhciB3ZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gbWUoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBJPVtdO2ZvcihsZXQgZT0wO2U8QS5sZW5ndGg7ZSsrKXtsZXQgZz1wZShBW2VdLHQpO2chPT1udWxsJiZJLnB1c2goZyl9cmV0dXJuIEl9ZnVuY3Rpb24gcGUoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBJPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP0k9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoST1BKSx3ZSYmSSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9JOkkuc2xpY2UoMCl9dmFyIHp0PW1lO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBfdD1TZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgdnQ9RmU7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyICR0PVJlO2FzeW5jIGZ1bmN0aW9uIE5lKEEsdCxJLGUpe2xldCBnPVh0KEEsdCxJLGUpLHI9W107cmV0dXJuIGcub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8udHlwZT09PUQuQmluYXJ5U3RyZWFtfHxvLnR5cGU9PT1ELkJpbmFyeUZpbGUpe2xldCBuPW8uZGF0YTtyLnB1c2gobil9ZWxzZSBpZihvLnR5cGU9PT1ELkltYWdlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLl90KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuTWVzaCl7bGV0IG49by5kYXRhO3IucHVzaCguLi52dChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELlBvbHlEYXRhKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLiR0KG4pKX19KSxGQShnLHp0KHIsITApKX12YXIgQUk9TmU7dmFyIFVlPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsSSxlLGcscil7bGV0IG89YXdhaXQgeHQoQSx0LHIpO3JldHVybiBhd2FpdCBBSShvLEksZSxnKX19O2lBKFVlKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO2R0KGh0KTtleHBvcnR7c2UgYXMgY29tcGFyZURvdWJsZUltYWdlcyxFbiBhcyBjb21wYXJlSW1hZ2VzLHl0IGFzIGdldERlZmF1bHRXZWJXb3JrZXIsdiBhcyBnZXRQaXBlbGluZVdvcmtlclVybCxrQSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLE9zIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsZHQgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsUnMgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCxnZSBhcyB2ZWN0b3JNYWduaXR1ZGUsUkEgYXMgdmVyc2lvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py index 15cf13501..fd4cdef3e 100644 --- a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py @@ -1 +1 @@ -__version__ = "5.2.2" +__version__ = "5.2.3" diff --git a/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py b/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py index 15cf13501..fd4cdef3e 100644 --- a/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py @@ -1 +1 @@ -__version__ = "5.2.2" +__version__ = "5.2.3" diff --git a/packages/compare-images/typescript/package.json b/packages/compare-images/typescript/package.json index aba858910..3ba34feff 100644 --- a/packages/compare-images/typescript/package.json +++ b/packages/compare-images/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compare-images", - "version": "5.2.2", + "version": "5.2.3", "description": "Compare images with a tolerance for regression testing.", "type": "module", "module": "./dist/index.js", From ee3fcafeab1839e2d0e1df265ad6f85d015b6c26 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 22:01:10 -0400 Subject: [PATCH 18/39] build(compress-stringify): add version-sync and publish scripts Other style and fixes included. --- packages/compress-stringify/package.json | 11 +- packages/compress-stringify/pixi.lock | 5558 ++++++++++++----- packages/compress-stringify/pixi.toml | 86 +- .../typescript/package.json | 1 - 4 files changed, 3955 insertions(+), 1701 deletions(-) diff --git a/packages/compress-stringify/package.json b/packages/compress-stringify/package.json index 0f4653c76..d0f81e8e2 100644 --- a/packages/compress-stringify/package.json +++ b/packages/compress-stringify/package.json @@ -1,9 +1,8 @@ { "name": "@itk-wasm/compress-stringify-build", - "version": "1.0.0", + "version": "3.3.1", "private": true, - "packageManager": "pnpm@9.6.0", - "description": "scripts to generate @itk-wasm/compare-stringify itk-wasm artifacts.", + "description": "@itk-wasm/compare-stringify build configuration.", "type": "module", "itk-wasm": { "emscripten-docker-image": "itkwasm/emscripten:latest", @@ -33,9 +32,9 @@ "test": "pnpm test:data:download && pnpm build:gen:python && pnpm test:python", "test:data:download": "dam download test/data test/data.tar.gz bafkreiha6oye3fd5cxfadnua5r2jlkaco2xuyeek454d2ihiffsx7rauqe https://placeholder", "test:data:pack": "dam pack test/data test/data.tar.gz", - "test:python:wasi": "pixi run test-wasi", - "test:python:emscripten": "pixi run test-emscripten", - "test:python:dispatch": "pixi run test-dispatch", + "test:python:wasi": "pnpm test:data:download && pixi run test-wasi", + "test:python:emscripten": "pnpm test:data:download && pixi run test-emscripten", + "test:python:dispatch": "pnpm test:data:download && pixi run test-dispatch", "test:python": "pixi run test-python", "test:wasi": "itk-wasm pnpm-script test:wasi" }, diff --git a/packages/compress-stringify/pixi.lock b/packages/compress-stringify/pixi.lock index 3b39f291c..c2b3378c8 100644 --- a/packages/compress-stringify/pixi.lock +++ b/packages/compress-stringify/pixi.lock @@ -7,15 +7,48 @@ environments: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda @@ -24,27 +57,92 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.1-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda @@ -53,54 +151,208 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.1-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.1-h8d36dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.1-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda python: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -110,18 +362,50 @@ environments: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda @@ -130,41 +414,52 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.1-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/37/56b0da468a85e7704f3b2bc045015301bdf4be2184a44868c71f6dca6fe2/greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/05/8c42705a563e74fe42d2bb31fd7e0e1d887cbb43106f121d3b8e1c8a43f2/itkwasm_compare_images-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/91/ab9c4ed1e095f218c7f17ccf691d1ebe0991250d0c55d64fa7ef5e3ce070/itkwasm_compare_images_wasi-5.2.0-py3-none-any.whl @@ -176,65 +471,71 @@ environments: - pypi: https://files.pythonhosted.org/packages/c6/23/6f6798c7533bb6d0a1ec653b58bb0114d17514b53db6240588ff52c58830/itkwasm_mesh_io_wasi-1.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/41/5d58fd387a44af577ca708df6976ccc60da3a0357baae64b9e997b2d4661/itkwasm_mesh_to_poly_data-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5e/12/c3803828cbaa733fecfbbdd495f6c0aa695e5e12d83ef80c20bfc1c0dfcf/itkwasm_mesh_to_poly_data_wasi-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/80/a6/c5152c817db664d75c439c2bd99d51f906a31c1df4a04e673ef51008b12f/playwright-1.47.0-py3-none-manylinux1_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/67/91/5474b84e505a6ccc295b2d322d90ff6aa0746745717839ee0c5fb4fdcceb/rich-13.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/75/a0/dd773135ca0f7227e8257555fd2f7a0c88672bfd111a400361f10c09face/trove_classifiers-2024.10.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/af/2d/cab3cc5529bb05ea7f4e54e308fa889ab626df45c0e2da5ab546e17ad876/uv-0.4.24-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fc/79/edeb217c57fe1bf16d890aa91a1c2c96b28c07b46afed54a5dcf310c3f6f/zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: python/itkwasm-compress-stringify - pypi: python/itkwasm-compress-stringify-wasi linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda @@ -243,41 +544,52 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.1-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda - - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/05/8c42705a563e74fe42d2bb31fd7e0e1d887cbb43106f121d3b8e1c8a43f2/itkwasm_compare_images-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/91/ab9c4ed1e095f218c7f17ccf691d1ebe0991250d0c55d64fa7ef5e3ce070/itkwasm_compare_images_wasi-5.2.0-py3-none-any.whl @@ -289,97 +601,108 @@ environments: - pypi: https://files.pythonhosted.org/packages/c6/23/6f6798c7533bb6d0a1ec653b58bb0114d17514b53db6240588ff52c58830/itkwasm_mesh_io_wasi-1.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/41/5d58fd387a44af577ca708df6976ccc60da3a0357baae64b9e997b2d4661/itkwasm_mesh_to_poly_data-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5e/12/c3803828cbaa733fecfbbdd495f6c0aa695e5e12d83ef80c20bfc1c0dfcf/itkwasm_mesh_to_poly_data_wasi-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0d/05/b97fb8c828a070e8291826922b2712d1146b11563b4860bc9ba80f5635d1/uv-0.4.25-py3-none-manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/af/36d89aae0c1f95a0a98e50711bc5d92c144939efc1f81a2fcd3e78d7f4c1/zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: python/itkwasm-compress-stringify - pypi: python/itkwasm-compress-stringify-wasi osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.1-h8d36dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl - - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/05/8c42705a563e74fe42d2bb31fd7e0e1d887cbb43106f121d3b8e1c8a43f2/itkwasm_compare_images-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/91/ab9c4ed1e095f218c7f17ccf691d1ebe0991250d0c55d64fa7ef5e3ce070/itkwasm_compare_images_wasi-5.2.0-py3-none-any.whl @@ -391,93 +714,113 @@ environments: - pypi: https://files.pythonhosted.org/packages/c6/23/6f6798c7533bb6d0a1ec653b58bb0114d17514b53db6240588ff52c58830/itkwasm_mesh_io_wasi-1.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/41/5d58fd387a44af577ca708df6976ccc60da3a0357baae64b9e997b2d4661/itkwasm_mesh_to_poly_data-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5e/12/c3803828cbaa733fecfbbdd495f6c0aa695e5e12d83ef80c20bfc1c0dfcf/itkwasm_mesh_to_poly_data_wasi-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e8/c9/2f924bb29bd53c51b839c1c6126bd2cf4c451d4a7d8f34be078f9e31c57e/uv-0.4.25-py3-none-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: python/itkwasm-compress-stringify - pypi: python/itkwasm-compress-stringify-wasi win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.1-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 - - pypi: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6b/48/8c10e7e7f47bfe96d598511dc6e7e80604345192fef39716d07e23bb0b6b/hypothesis-6.115.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/05/8c42705a563e74fe42d2bb31fd7e0e1d887cbb43106f121d3b8e1c8a43f2/itkwasm_compare_images-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/91/ab9c4ed1e095f218c7f17ccf691d1ebe0991250d0c55d64fa7ef5e3ce070/itkwasm_compare_images_wasi-5.2.0-py3-none-any.whl @@ -489,48 +832,23 @@ environments: - pypi: https://files.pythonhosted.org/packages/c6/23/6f6798c7533bb6d0a1ec653b58bb0114d17514b53db6240588ff52c58830/itkwasm_mesh_io_wasi-1.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/41/5d58fd387a44af577ca708df6976ccc60da3a0357baae64b9e997b2d4661/itkwasm_mesh_to_poly_data-1.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5e/12/c3803828cbaa733fecfbbdd495f6c0aa695e5e12d83ef80c20bfc1c0dfcf/itkwasm_mesh_to_poly_data_wasi-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/e9/c00d2bb4a286b13fad0f06488ea9cbe9e76d0efcd81e7a907f72195d5b83/uv-0.4.25-py3-none-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/75/37/872d74bd7739639c4553bf94c84af7d54d8211b626b352bc57f0fd8d1e3f/zstandard-0.23.0-cp312-cp312-win_amd64.whl - pypi: python/itkwasm-compress-stringify - pypi: python/itkwasm-compress-stringify-wasi packages: @@ -580,52 +898,55 @@ packages: - openmp_impl 9999 license: BSD-3-Clause license_family: BSD + purls: [] size: 23712 timestamp: 1650670790230 - kind: conda - name: _openmp_mutex - version: '4.5' - build: 2_gnu - build_number: 16 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 - sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 - md5: 6168d71addc746e8f2b8d57dfd2edcea - depends: - - libgomp >=7.5.0 + name: anyio + version: 4.6.2.post1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.1 constrains: - - openmp_impl 9999 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 23712 - timestamp: 1650670790230 -- kind: pypi + - uvloop >=0.21.0b1 + - trio >=0.26.1 + license: MIT + license_family: MIT + size: 109864 + timestamp: 1728935803440 +- kind: conda name: anyio version: 4.6.2.post1 - url: https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl - sha256: 6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d - requires_dist: - - idna>=2.8 - - sniffio>=1.1 - - exceptiongroup>=1.0.2 ; python_full_version < '3.11' - - typing-extensions>=4.1 ; python_full_version < '3.11' - - packaging ; extra == 'doc' - - sphinx~=7.4 ; extra == 'doc' - - sphinx-rtd-theme ; extra == 'doc' - - sphinx-autodoc-typehints>=1.2.0 ; extra == 'doc' - - anyio[trio] ; extra == 'test' - - coverage[toml]>=7 ; extra == 'test' - - exceptiongroup>=1.2.0 ; extra == 'test' - - hypothesis>=4.0 ; extra == 'test' - - psutil>=5.9 ; extra == 'test' - - pytest>=7.0 ; extra == 'test' - - pytest-mock>=3.6.1 ; extra == 'test' - - trustme ; extra == 'test' - - uvloop>=0.21.0b1 ; platform_python_implementation == 'CPython' and platform_system != 'Windows' and extra == 'test' - - truststore>=0.9.1 ; python_full_version >= '3.10' and extra == 'test' - - trio>=0.26.1 ; extra == 'trio' - requires_python: '>=3.9' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - uvloop >=0.21.0b1 + - trio >=0.26.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/anyio?source=compressed-mapping + size: 109864 + timestamp: 1728935803440 - kind: pypi name: attrs version: 24.2.0 @@ -675,22 +996,74 @@ packages: - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' requires_python: '>=3.7' - kind: conda - name: bzip2 - version: 1.0.8 - build: h2466b09_7 - build_number: 7 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b - md5: 276e7ffe9ffe39688abc665ef0f45596 + name: backports + version: '1.0' + build: pyhd8ed1ab_4 + build_number: 4 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + sha256: 31b51537ce7d2ba8b5b3d0095f1813711884304ac1701bc55938ca75f6c82e19 + md5: 67bdebbc334513034826e9b63f769d4c depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: bzip2-1.0.6 + - python >=3 + license: BSD-3-Clause license_family: BSD - size: 54927 - timestamp: 1720974860185 + size: 6989 + timestamp: 1722295637981 +- kind: conda + name: backports + version: '1.0' + build: pyhd8ed1ab_4 + build_number: 4 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + sha256: 31b51537ce7d2ba8b5b3d0095f1813711884304ac1701bc55938ca75f6c82e19 + md5: 67bdebbc334513034826e9b63f769d4c + depends: + - python >=3 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6989 + timestamp: 1722295637981 +- kind: conda + name: backports.tarfile + version: 1.0.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + sha256: 7ba30f32daad2e7ca251508525185ba170eedc14123572611c2acf261c7956b3 + md5: c747b1d79f136013c3b7ebcba876afa6 + depends: + - backports + - python >=3.8 + license: MIT + license_family: MIT + size: 31951 + timestamp: 1712700751335 +- kind: conda + name: backports.tarfile + version: 1.0.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + sha256: 7ba30f32daad2e7ca251508525185ba170eedc14123572611c2acf261c7956b3 + md5: c747b1d79f136013c3b7ebcba876afa6 + depends: + - backports + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/backports-tarfile?source=hash-mapping + size: 31951 + timestamp: 1712700751335 - kind: conda name: bzip2 version: 1.0.8 @@ -726,21 +1099,6 @@ packages: purls: [] size: 252783 timestamp: 1720974456583 -- kind: conda - name: bzip2 - version: 1.0.8 - build: h68df207_7 - build_number: 7 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda - sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb - md5: 56398c28220513b9ea13d7b450acfb20 - depends: - - libgcc-ng >=12 - license: bzip2-1.0.6 - license_family: BSD - size: 189884 - timestamp: 1720974504976 - kind: conda name: bzip2 version: 1.0.8 @@ -757,21 +1115,6 @@ packages: purls: [] size: 189884 timestamp: 1720974504976 -- kind: conda - name: bzip2 - version: 1.0.8 - build: h99b78c6_7 - build_number: 7 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 - md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab - depends: - - __osx >=11.0 - license: bzip2-1.0.6 - license_family: BSD - size: 122909 - timestamp: 1720974522888 - kind: conda name: bzip2 version: 1.0.8 @@ -788,17 +1131,6 @@ packages: purls: [] size: 122909 timestamp: 1720974522888 -- kind: conda - name: ca-certificates - version: 2024.8.30 - build: h56e8100_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda - sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 - md5: 4c4fd67c18619be5aa65dc5b6c72e490 - license: ISC - size: 158773 - timestamp: 1725019107649 - kind: conda name: ca-certificates version: 2024.8.30 @@ -823,17 +1155,6 @@ packages: purls: [] size: 159003 timestamp: 1725018903918 -- kind: conda - name: ca-certificates - version: 2024.8.30 - build: hcefe29a_0 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda - sha256: 2a2d827bee3775a85f0f1b2f2089291475c4416336d1b3a8cbce2964db547af8 - md5: 70e57e8f59d2c98f86b49c69e5074be5 - license: ISC - size: 159106 - timestamp: 1725020043153 - kind: conda name: ca-certificates version: 2024.8.30 @@ -855,173 +1176,645 @@ packages: sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 md5: 40dec13fd8348dbe303e57be74bd3d35 license: ISC + purls: [] size: 158482 timestamp: 1725019034582 - kind: conda - name: ca-certificates + name: certifi version: 2024.8.30 - build: hf0a4a13_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda - sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 - md5: 40dec13fd8348dbe303e57be74bd3d35 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 license: ISC - purls: [] - size: 158482 - timestamp: 1725019034582 -- kind: pypi + size: 163752 + timestamp: 1725278204397 +- kind: conda name: certifi version: 2024.8.30 - url: https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl - sha256: 922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 - requires_python: '>=3.6' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping + size: 163752 + timestamp: 1725278204397 +- kind: conda name: cffi version: 1.17.1 - url: https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - sha256: da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 - requires_dist: + build: py312h06ac9bb_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 + md5: a861504bbea4161a9170b85d4d2be840 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 - pycparser - requires_python: '>=3.8' -- kind: pypi + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 294403 + timestamp: 1725560714366 +- kind: conda name: cffi version: 1.17.1 - url: https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl - sha256: 51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 - requires_dist: + build: py312h06ac9bb_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 + md5: a861504bbea4161a9170b85d4d2be840 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 - pycparser - requires_python: '>=3.8' -- kind: pypi + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 294403 + timestamp: 1725560714366 +- kind: conda name: cffi version: 1.17.1 - url: https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - sha256: b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 - requires_dist: + build: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 - pycparser - requires_python: '>=3.8' -- kind: pypi - name: click - version: 8.1.7 - url: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl - sha256: ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 - requires_dist: - - colorama ; platform_system == 'Windows' - - importlib-metadata ; python_full_version < '3.8' - requires_python: '>=3.7' + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 281206 + timestamp: 1725560813378 - kind: conda - name: colorama - version: 0.4.6 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 - md5: 3faab06a954c2a04039983f2c4a50d99 + name: cffi + version: 1.17.1 + build: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e depends: - - python >=3.7 - license: BSD-3-Clause - license_family: BSD + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT purls: - - pkg:pypi/colorama?source=hash-mapping - size: 25170 - timestamp: 1666700778190 -- kind: pypi - name: cryptography - version: 43.0.3 - url: https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl - sha256: f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7 - requires_dist: - - cffi>=1.12 ; platform_python_implementation != 'PyPy' - - bcrypt>=3.1.5 ; extra == 'ssh' - - nox ; extra == 'nox' - - cryptography-vectors==43.0.3 ; extra == 'test' - - pytest>=6.2.0 ; extra == 'test' - - pytest-benchmark ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-xdist ; extra == 'test' - - pretend ; extra == 'test' - - certifi ; extra == 'test' - - pytest-randomly ; extra == 'test-randomorder' - - sphinx>=5.3.0 ; extra == 'docs' - - sphinx-rtd-theme>=1.1.1 ; extra == 'docs' - - pyenchant>=1.6.11 ; extra == 'docstest' - - readme-renderer ; extra == 'docstest' - - sphinxcontrib-spelling>=4.0.1 ; extra == 'docstest' - - build ; extra == 'sdist' - - ruff ; extra == 'pep8test' - - mypy ; extra == 'pep8test' - - check-sdist ; extra == 'pep8test' - - click ; extra == 'pep8test' - requires_python: '>=3.7' -- kind: pypi - name: cryptography - version: 43.0.3 - url: https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl - sha256: c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405 - requires_dist: - - cffi>=1.12 ; platform_python_implementation != 'PyPy' - - bcrypt>=3.1.5 ; extra == 'ssh' - - nox ; extra == 'nox' - - cryptography-vectors==43.0.3 ; extra == 'test' - - pytest>=6.2.0 ; extra == 'test' - - pytest-benchmark ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-xdist ; extra == 'test' - - pretend ; extra == 'test' - - certifi ; extra == 'test' - - pytest-randomly ; extra == 'test-randomorder' - - sphinx>=5.3.0 ; extra == 'docs' - - sphinx-rtd-theme>=1.1.1 ; extra == 'docs' - - pyenchant>=1.6.11 ; extra == 'docstest' - - readme-renderer ; extra == 'docstest' - - sphinxcontrib-spelling>=4.0.1 ; extra == 'docstest' - - build ; extra == 'sdist' - - ruff ; extra == 'pep8test' - - mypy ; extra == 'pep8test' - - check-sdist ; extra == 'pep8test' - - click ; extra == 'pep8test' - requires_python: '>=3.7' -- kind: pypi + - pkg:pypi/cffi?source=hash-mapping + size: 281206 + timestamp: 1725560813378 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h4389bb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + sha256: ac007bf5fd56d13e16d95eea036433012f2e079dc015505c8a79efebbad1fcbc + md5: 08310c1a22ef957d537e547f8d484f92 + depends: + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 288142 + timestamp: 1725560896359 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h4389bb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + sha256: ac007bf5fd56d13e16d95eea036433012f2e079dc015505c8a79efebbad1fcbc + md5: 08310c1a22ef957d537e547f8d484f92 + depends: + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 288142 + timestamp: 1725560896359 +- kind: conda + name: cffi + version: 1.17.1 + build: py312hac81daf_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + sha256: 1162e3ca039e7ca7c0e78f0a020ed1bde968096841b663e3f393c966eb82f0f0 + md5: 1a256e5581b1099e9295cb84d53db3ea + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 312892 + timestamp: 1725561779888 +- kind: conda + name: cffi + version: 1.17.1 + build: py312hac81daf_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + sha256: 1162e3ca039e7ca7c0e78f0a020ed1bde968096841b663e3f393c966eb82f0f0 + md5: 1a256e5581b1099e9295cb84d53db3ea + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 312892 + timestamp: 1725561779888 +- kind: conda + name: click + version: 8.1.7 + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 84437 + timestamp: 1692311973840 +- kind: conda + name: click + version: 8.1.7 + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 84437 + timestamp: 1692311973840 +- kind: conda + name: click + version: 8.1.7 + build: win_pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 + md5: 3549ecbceb6cd77b91a105511b7d0786 + depends: + - __win + - colorama + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 85051 + timestamp: 1692312207348 +- kind: conda + name: click + version: 8.1.7 + build: win_pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 + md5: 3549ecbceb6cd77b91a105511b7d0786 + depends: + - __win + - colorama + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 85051 + timestamp: 1692312207348 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + sha256: ba9e5aced2e7dc0bbc48f60bf38f514839424a01975fb2aed30e9246c2f82c7c + md5: 2abada8c216dd6e32514535a3fa245d4 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + size: 1488388 + timestamp: 1729286882127 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + sha256: ba9e5aced2e7dc0bbc48f60bf38f514839424a01975fb2aed30e9246c2f82c7c + md5: 2abada8c216dd6e32514535a3fa245d4 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1488388 + timestamp: 1729286882127 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312he723553_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + sha256: bd9cc8410bf31ac8b90d63dda92d5810af16c3841ca6dd09be9b7f9c5c7688ba + md5: bfacbf2e4560c7d6416d40f573961918 + depends: + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + size: 1480456 + timestamp: 1729287055014 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312he723553_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + sha256: bd9cc8410bf31ac8b90d63dda92d5810af16c3841ca6dd09be9b7f9c5c7688ba + md5: bfacbf2e4560c7d6416d40f573961918 + depends: + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1480456 + timestamp: 1729287055014 +- kind: conda + name: dbus + version: 1.13.6 + build: h12b9eeb_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + sha256: 5fe76bdf27a142cfb9da0fb3197c562e528d2622b573765bee5c9904cf5e6b6b + md5: f3d63805602166bac09386741e00935e + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + size: 672759 + timestamp: 1640113663539 +- kind: conda + name: dbus + version: 1.13.6 + build: h12b9eeb_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + sha256: 5fe76bdf27a142cfb9da0fb3197c562e528d2622b573765bee5c9904cf5e6b6b + md5: f3d63805602166bac09386741e00935e + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 672759 + timestamp: 1640113663539 +- kind: conda + name: dbus + version: 1.13.6 + build: h5008d03_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 + md5: ecfff944ba3960ecb334b9a2663d708d + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + size: 618596 + timestamp: 1640112124844 +- kind: conda + name: dbus + version: 1.13.6 + build: h5008d03_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 + md5: ecfff944ba3960ecb334b9a2663d708d + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 618596 + timestamp: 1640112124844 +- kind: conda + name: distlib + version: 0.3.9 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb + md5: fe521c1608280cc2803ebd26dc252212 + depends: + - python 2.7|>=3.6 + license: Apache-2.0 + license_family: APACHE + size: 276214 + timestamp: 1728557312342 +- kind: conda name: distlib version: 0.3.9 - url: https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl - sha256: 47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb + md5: fe521c1608280cc2803ebd26dc252212 + depends: + - python 2.7|>=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/distlib?source=hash-mapping + size: 276214 + timestamp: 1728557312342 +- kind: conda + name: editables + version: '0.5' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + sha256: de160a7494e7bc72360eea6a29cbddf194d0a79f45ff417a4de20e6858cf79a9 + md5: 9873878e2a069bc358b69e9a29c1ecd5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 10988 + timestamp: 1705857085102 +- kind: conda + name: editables + version: '0.5' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + sha256: de160a7494e7bc72360eea6a29cbddf194d0a79f45ff417a4de20e6858cf79a9 + md5: 9873878e2a069bc358b69e9a29c1ecd5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/editables?source=hash-mapping + size: 10988 + timestamp: 1705857085102 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: expat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + sha256: c827521e080d0f3395655924f1c364d48a1eac1ff3e193a12d0441e9c3b51e91 + md5: 901a44b341632b0c233756ed5abcd78b + depends: + - libexpat 2.6.3 h5ad3122_0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 130283 + timestamp: 1725568848182 +- kind: conda + name: expat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + sha256: c827521e080d0f3395655924f1c364d48a1eac1ff3e193a12d0441e9c3b51e91 + md5: 901a44b341632b0c233756ed5abcd78b + depends: + - libexpat 2.6.3 h5ad3122_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 130283 + timestamp: 1725568848182 - kind: conda - name: exceptiongroup - version: 1.2.2 + name: filelock + version: 3.16.1 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 - md5: d02ae936e42063ca46af6cdad2dbd1e0 + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 depends: - python >=3.7 - license: MIT and PSF-2.0 - purls: - - pkg:pypi/exceptiongroup?source=hash-mapping - size: 20418 - timestamp: 1720869435725 -- kind: pypi + license: Unlicense + size: 17357 + timestamp: 1726613593584 +- kind: conda name: filelock version: 3.16.1 - url: https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl - sha256: 2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0 - requires_dist: - - furo>=2024.8.6 ; extra == 'docs' - - sphinx-autodoc-typehints>=2.4.1 ; extra == 'docs' - - sphinx>=8.0.2 ; extra == 'docs' - - covdefaults>=2.3 ; extra == 'testing' - - coverage>=7.6.1 ; extra == 'testing' - - diff-cover>=9.2 ; extra == 'testing' - - pytest-asyncio>=0.24 ; extra == 'testing' - - pytest-cov>=5 ; extra == 'testing' - - pytest-mock>=3.14 ; extra == 'testing' - - pytest-timeout>=2.3.1 ; extra == 'testing' - - pytest>=8.3.3 ; extra == 'testing' - - virtualenv>=20.26.4 ; extra == 'testing' - - typing-extensions>=4.12.2 ; python_full_version < '3.11' and extra == 'typing' - requires_python: '>=3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + purls: + - pkg:pypi/filelock?source=hash-mapping + size: 17357 + timestamp: 1726613593584 - kind: pypi name: greenlet version: 3.0.3 @@ -1066,91 +1859,368 @@ packages: - objgraph ; extra == 'test' - psutil ; extra == 'test' requires_python: '>=3.7' -- kind: pypi +- kind: conda name: h11 version: 0.14.0 - url: https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl - sha256: e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 - requires_dist: - - typing-extensions ; python_full_version < '3.8' - requires_python: '>=3.7' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h11 + version: 0.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/h11?source=hash-mapping + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + size: 46754 + timestamp: 1634280590080 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + size: 46754 + timestamp: 1634280590080 +- kind: conda name: hatch version: 1.13.0 - url: https://files.pythonhosted.org/packages/13/8d/6d965a22bc38cec091ba82131624bb5d75471094d7fe05e829536de3de2f/hatch-1.13.0-py3-none-any.whl - sha256: bb1a18558a626279cae338b4d8a9d3ca4226d5e06d50de600608c57acd131b67 - requires_dist: - - click>=8.0.6 - - hatchling>=1.24.2 - - httpx>=0.22.0 - - hyperlink>=21.0.0 - - keyring>=23.5.0 - - packaging>=23.2 - - pexpect~=4.8 - - platformdirs>=2.5.0 - - rich>=11.2.0 - - shellingham>=1.4.0 - - tomli-w>=1.0 - - tomlkit>=0.11.1 - - userpath~=1.7 - - uv>=0.1.35 - - virtualenv>=20.26.1 - - zstandard<1 - requires_python: '>=3.8' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + sha256: 675b0304b129a4dbc39b8e6f337cea51adebef20508a656f43b6e6b43d9cf458 + md5: b8a6437f94d29aef00decdbe1174be27 + depends: + - click >=8.0.6 + - hatchling >=1.24.2 + - httpx >=0.22.0 + - hyperlink >=21.0.0 + - keyring >=23.5.0 + - packaging >=23.2 + - pexpect >=4.8,<5 + - platformdirs >=2.5.0 + - python >=3.8 + - rich >=11.2.0 + - shellingham >=1.4.0 + - tomli-w >=1.0 + - tomlkit >=0.11.1 + - userpath >=1.7,<2 + - uv >=0.1.35 + - virtualenv >=20.26.1 + - zstandard <1.0 + license: MIT + license_family: MIT + size: 177173 + timestamp: 1728879212263 +- kind: conda + name: hatch + version: 1.13.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + sha256: 675b0304b129a4dbc39b8e6f337cea51adebef20508a656f43b6e6b43d9cf458 + md5: b8a6437f94d29aef00decdbe1174be27 + depends: + - click >=8.0.6 + - hatchling >=1.24.2 + - httpx >=0.22.0 + - hyperlink >=21.0.0 + - keyring >=23.5.0 + - packaging >=23.2 + - pexpect >=4.8,<5 + - platformdirs >=2.5.0 + - python >=3.8 + - rich >=11.2.0 + - shellingham >=1.4.0 + - tomli-w >=1.0 + - tomlkit >=0.11.1 + - userpath >=1.7,<2 + - uv >=0.1.35 + - virtualenv >=20.26.1 + - zstandard <1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatch?source=hash-mapping + size: 177173 + timestamp: 1728879212263 +- kind: conda name: hatchling version: 1.25.0 - url: https://files.pythonhosted.org/packages/0c/8b/90e80904fdc24ce33f6fc6f35ebd2232fe731a8528a22008458cf197bc4d/hatchling-1.25.0-py3-none-any.whl - sha256: b47948e45d4d973034584dd4cb39c14b6a70227cf287ab7ec0ad7983408a882c - requires_dist: - - packaging>=23.2 - - pathspec>=0.10.1 - - pluggy>=1.0.0 - - tomli>=1.2.2 ; python_full_version < '3.11' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + sha256: fb8a16a913f909d8f7d2ae95c18a1aeb7be3eebfb1b7a4246500c06d54498f89 + md5: 7571d6e5561b04aef679a11904dfcebf + depends: + - editables >=0.3 + - importlib-metadata + - packaging >=21.3 + - pathspec >=0.10.1 + - pluggy >=1.0.0 + - python >=3.7 + - tomli >=1.2.2 - trove-classifiers - requires_python: '>=3.8' -- kind: pypi + license: MIT + license_family: MIT + size: 64580 + timestamp: 1719090878694 +- kind: conda + name: hatchling + version: 1.25.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + sha256: fb8a16a913f909d8f7d2ae95c18a1aeb7be3eebfb1b7a4246500c06d54498f89 + md5: 7571d6e5561b04aef679a11904dfcebf + depends: + - editables >=0.3 + - importlib-metadata + - packaging >=21.3 + - pathspec >=0.10.1 + - pluggy >=1.0.0 + - python >=3.7 + - tomli >=1.2.2 + - trove-classifiers + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatchling?source=hash-mapping + size: 64580 + timestamp: 1719090878694 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + size: 25341 + timestamp: 1598856368685 +- kind: conda name: httpcore version: 1.0.6 - url: https://files.pythonhosted.org/packages/06/89/b161908e2f51be56568184aeb4a880fd287178d176fd1c860d2217f41106/httpcore-1.0.6-py3-none-any.whl - sha256: 27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f - requires_dist: + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + sha256: 8952c3f1eb18bf4d7e813176c3b23e0af4e863e8b05087e73f74f371d73077ca + md5: b8e1901ef9a215fc41ecfb6bef7e0943 + depends: + - anyio >=3.0,<5.0 - certifi - - h11<0.15,>=0.13 - - anyio<5.0,>=4.0 ; extra == 'asyncio' - - h2<5,>=3 ; extra == 'http2' - - socksio==1.* ; extra == 'socks' - - trio<1.0,>=0.22.0 ; extra == 'trio' - requires_python: '>=3.8' -- kind: pypi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + size: 45711 + timestamp: 1727821031365 +- kind: conda + name: httpcore + version: 1.0.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + sha256: 8952c3f1eb18bf4d7e813176c3b23e0af4e863e8b05087e73f74f371d73077ca + md5: b8e1901ef9a215fc41ecfb6bef7e0943 + depends: + - anyio >=3.0,<5.0 + - certifi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + size: 45711 + timestamp: 1727821031365 +- kind: conda name: httpx version: 0.27.2 - url: https://files.pythonhosted.org/packages/56/95/9377bcb415797e44274b51d46e3249eba641711cf3348050f76ee7b15ffc/httpx-0.27.2-py3-none-any.whl - sha256: 7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0 - requires_dist: + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: - anyio - certifi - - httpcore==1.* + - httpcore 1.* - idna + - python >=3.8 - sniffio - - brotli ; platform_python_implementation == 'CPython' and extra == 'brotli' - - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'brotli' - - click==8.* ; extra == 'cli' - - pygments==2.* ; extra == 'cli' - - rich<14,>=10 ; extra == 'cli' - - h2<5,>=3 ; extra == 'http2' - - socksio==1.* ; extra == 'socks' - - zstandard>=0.18.0 ; extra == 'zstd' - requires_python: '>=3.8' -- kind: pypi + license: BSD-3-Clause + license_family: BSD + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: httpx + version: 0.27.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 14646 + timestamp: 1619110249723 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 14646 + timestamp: 1619110249723 +- kind: conda name: hyperlink version: 21.0.0 - url: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl - sha256: e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4 - requires_dist: - - idna>=2.5 - - typing ; python_full_version < '3.5' - requires_python: '>=2.6,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + sha256: 026cb82ada41be9ee2836a2ace526e85c4603e77617887c41c6e62c9bde798b3 + md5: 1303beb57b40f8f4ff6fb1bb23bf0553 + depends: + - idna >=2.6 + - python + license: MIT + license_family: MIT + size: 72732 + timestamp: 1610092261086 +- kind: conda + name: hyperlink + version: 21.0.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + sha256: 026cb82ada41be9ee2836a2ace526e85c4603e77617887c41c6e62c9bde798b3 + md5: 1303beb57b40f8f4ff6fb1bb23bf0553 + depends: + - idna >=2.6 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperlink?source=hash-mapping + size: 72732 + timestamp: 1610092261086 - kind: pypi name: hypothesis version: 6.115.3 @@ -1211,21 +2281,6 @@ packages: purls: [] size: 12129203 timestamp: 1720853576813 -- kind: conda - name: icu - version: '75.1' - build: hf9b3779_0 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda - sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 - md5: 268203e8b983fddb6412b36f2024e75c - depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: MIT - license_family: MIT - size: 12282786 - timestamp: 1720853454991 - kind: conda name: icu version: '75.1' @@ -1254,56 +2309,113 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: [] size: 11857802 timestamp: 1720853997952 - kind: conda - name: icu - version: '75.1' - build: hfee45f7_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 - md5: 5eb22c1d7b3fc4abb50d92d621583137 + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=hash-mapping + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: importlib_resources + version: 6.4.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 11857802 - timestamp: 1720853997952 -- kind: pypi - name: idna - version: '3.10' - url: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - sha256: 946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 - requires_dist: - - ruff>=0.6.2 ; extra == 'all' - - mypy>=1.11.2 ; extra == 'all' - - pytest>=8.3.2 ; extra == 'all' - - flake8>=7.1.1 ; extra == 'all' - requires_python: '>=3.6' -- kind: pypi - name: importlib-resources + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + size: 32725 + timestamp: 1725921462405 +- kind: conda + name: importlib_resources version: 6.4.5 - url: https://files.pythonhosted.org/packages/e1/6a/4604f9ae2fa62ef47b9de2fa5ad599589d28c9fd1d335f32759813dfa91e/importlib_resources-6.4.5-py3-none-any.whl - sha256: ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717 - requires_dist: - - zipp>=3.1.0 ; python_full_version < '3.10' - - pytest-checkdocs>=2.4 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - pytest-cov ; extra == 'cover' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest-enabler>=2.2 ; extra == 'enabler' - - pytest!=8.1.*,>=6 ; extra == 'test' - - zipp>=3.17 ; extra == 'test' - - jaraco-test>=5.4 ; extra == 'test' - - pytest-mypy ; extra == 'type' - requires_python: '>=3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping + size: 32725 + timestamp: 1725921462405 - kind: conda name: iniconfig version: 2.0.0 @@ -1382,27 +2494,6 @@ packages: - itkwasm>=1.0b171 requires_python: '>=3.8' editable: true -- kind: pypi - name: itkwasm-compress-stringify - version: 3.3.0 - path: python/itkwasm-compress-stringify - sha256: c02f3169d3c0706165b2a36c79f478ae91e47c922973f1fc77793c5fb555ea9b - requires_dist: - - itkwasm-compress-stringify-emscripten ; sys_platform == 'emscripten' - - itkwasm-compress-stringify-wasi ; sys_platform != 'emscripten' - - itkwasm>=1.0b171 - requires_python: '>=3.8' - editable: true -- kind: pypi - name: itkwasm-compress-stringify-wasi - version: 3.3.0 - path: python/itkwasm-compress-stringify-wasi - sha256: 49d016bd896fc324c6ef317200ca34408ee972d2dacc395194c1bd6ff1d84885 - requires_dist: - - importlib-resources - - itkwasm>=1.0b171 - requires_python: '>=3.8' - editable: true - kind: pypi name: itkwasm-compress-stringify-wasi version: 3.3.0 @@ -1470,115 +2561,379 @@ packages: - importlib-resources - itkwasm>=1.0b145 requires_python: '>=3.8' -- kind: pypi - name: jaraco-classes +- kind: conda + name: jaraco.classes version: 3.4.0 - url: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - sha256: f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 - requires_dist: + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + sha256: 538b1c6df537a36c63fd0ed83cb1c1c25b07d8d3b5e401991fdaff261a4b5b4d + md5: 7b756504d362cbad9b73a50a5455cafd + depends: - more-itertools - - sphinx>=3.5 ; extra == 'docs' - - jaraco-packaging>=9.3 ; extra == 'docs' - - rst-linker>=1.9 ; extra == 'docs' - - furo ; extra == 'docs' - - sphinx-lint ; extra == 'docs' - - jaraco-tidelift>=1.4 ; extra == 'docs' - - pytest>=6 ; extra == 'testing' - - pytest-checkdocs>=2.4 ; extra == 'testing' - - pytest-cov ; extra == 'testing' - - pytest-mypy ; extra == 'testing' - - pytest-enabler>=2.2 ; extra == 'testing' - - pytest-ruff>=0.2.1 ; extra == 'testing' - requires_python: '>=3.8' -- kind: pypi - name: jaraco-context - version: 6.0.1 - url: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl - sha256: f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4 - requires_dist: - - backports-tarfile ; python_full_version < '3.12' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest!=8.1.*,>=6 ; extra == 'test' - - pytest-checkdocs>=2.4 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-mypy ; extra == 'test' - - pytest-enabler>=2.2 ; extra == 'test' - - portend ; extra == 'test' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'test' - requires_python: '>=3.8' -- kind: pypi - name: jaraco-functools - version: 4.1.0 - url: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl - sha256: ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649 - requires_dist: + - python >=3.8 + license: MIT + license_family: MIT + size: 12223 + timestamp: 1713939433204 +- kind: conda + name: jaraco.classes + version: 3.4.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + sha256: 538b1c6df537a36c63fd0ed83cb1c1c25b07d8d3b5e401991fdaff261a4b5b4d + md5: 7b756504d362cbad9b73a50a5455cafd + depends: - more-itertools - - pytest-checkdocs>=2.4 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - pytest-cov ; extra == 'cover' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest-enabler>=2.2 ; extra == 'enabler' - - pytest!=8.1.*,>=6 ; extra == 'test' - - jaraco-classes ; extra == 'test' - - pytest-mypy ; extra == 'type' - requires_python: '>=3.8' -- kind: pypi + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-classes?source=hash-mapping + size: 12223 + timestamp: 1713939433204 +- kind: conda + name: jaraco.context + version: 5.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + sha256: 9e2aeacb1aed3ab4fc5883a357e8a874e12f687af300f8708ec12de2995e17d2 + md5: 72d7ad2dcd0f37eccb2ee35a1c8f6aaa + depends: + - backports.tarfile + - python >=3.8 + license: MIT + license_family: MIT + size: 12456 + timestamp: 1714372284922 +- kind: conda + name: jaraco.context + version: 5.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + sha256: 9e2aeacb1aed3ab4fc5883a357e8a874e12f687af300f8708ec12de2995e17d2 + md5: 72d7ad2dcd0f37eccb2ee35a1c8f6aaa + depends: + - backports.tarfile + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-context?source=hash-mapping + size: 12456 + timestamp: 1714372284922 +- kind: conda + name: jaraco.functools + version: 4.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + sha256: d2e866fd22a48eaa2f795b6a3b0bf16f066293322ce04dd65cca36267160ead6 + md5: 547670a612fd335eaa5ffbf0fa75cb64 + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + size: 15192 + timestamp: 1701695329516 +- kind: conda + name: jaraco.functools + version: 4.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + sha256: d2e866fd22a48eaa2f795b6a3b0bf16f066293322ce04dd65cca36267160ead6 + md5: 547670a612fd335eaa5ffbf0fa75cb64 + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-functools?source=hash-mapping + size: 15192 + timestamp: 1701695329516 +- kind: conda name: jeepney version: 0.8.0 - url: https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl - sha256: c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755 - requires_dist: - - pytest ; extra == 'test' - - pytest-trio ; extra == 'test' - - pytest-asyncio>=0.17 ; extra == 'test' - - testpath ; extra == 'test' - - trio ; extra == 'test' - - async-timeout ; extra == 'test' - - trio ; extra == 'trio' - - async-generator ; python_full_version == '3.6.*' and extra == 'trio' - requires_python: '>=3.7' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + sha256: 16639759b811866d63315fe1391f6fb45f5478b823972f4d3d9f0392b7dd80b8 + md5: 9800ad1699b42612478755a2d26c722d + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 36895 + timestamp: 1649085298891 +- kind: conda + name: jeepney + version: 0.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + sha256: 16639759b811866d63315fe1391f6fb45f5478b823972f4d3d9f0392b7dd80b8 + md5: 9800ad1699b42612478755a2d26c722d + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jeepney?source=hash-mapping + size: 36895 + timestamp: 1649085298891 +- kind: conda + name: jq + version: 1.7.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + sha256: 53437ca79e28003faac8058f6c025c83a819e122d3a0fb70624e6da0f77ab126 + md5: 397702b2c1e53f0f0312d2b170d2e699 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + size: 334346 + timestamp: 1702502754422 +- kind: conda + name: jq + version: 1.7.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + sha256: 53437ca79e28003faac8058f6c025c83a819e122d3a0fb70624e6da0f77ab126 + md5: 397702b2c1e53f0f0312d2b170d2e699 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 334346 + timestamp: 1702502754422 +- kind: conda + name: jq + version: 1.7.1 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + sha256: e530cf5800e937bce7847a023a998db504e333a928b469c45a1752535593e762 + md5: dbf665694fb28d86d77cca18e5dd530c + depends: + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + size: 317604 + timestamp: 1702501287237 +- kind: conda + name: jq + version: 1.7.1 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + sha256: e530cf5800e937bce7847a023a998db504e333a928b469c45a1752535593e762 + md5: dbf665694fb28d86d77cca18e5dd530c + depends: + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 317604 + timestamp: 1702501287237 +- kind: conda + name: jq + version: 1.7.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d + md5: 80814f94713e35df60aad6c4b235de87 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + size: 318956 + timestamp: 1702500793203 +- kind: conda + name: jq + version: 1.7.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d + md5: 80814f94713e35df60aad6c4b235de87 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 318956 + timestamp: 1702500793203 +- kind: conda name: keyring version: 25.4.1 - url: https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl - sha256: 5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf - requires_dist: - - jaraco-classes - - jaraco-functools - - jaraco-context - - importlib-metadata>=4.11.4 ; python_full_version < '3.12' - - importlib-resources ; python_full_version < '3.9' - - secretstorage>=3.2 ; sys_platform == 'linux' - - jeepney>=0.4.2 ; sys_platform == 'linux' - - pywin32-ctypes>=0.2.0 ; sys_platform == 'win32' - - pytest-checkdocs>=2.4 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - shtab>=1.1.0 ; extra == 'completion' - - pytest-cov ; extra == 'cover' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest-enabler>=2.2 ; extra == 'enabler' - - pytest!=8.1.*,>=6 ; extra == 'test' - - pyfakefs ; extra == 'test' - - pytest-mypy ; extra == 'type' - - pygobject-stubs ; extra == 'type' - - shtab ; extra == 'type' - - types-pywin32 ; extra == 'type' - requires_python: '>=3.8' + build: pyh534df25_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + sha256: 8d8fc7d67e9bd387403720447abb1b5539a6f6ca8e3aba8406e0987213bfa0ce + md5: 2099f34ea2f3534f7adc5c21cc199e1b + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + license: MIT + license_family: MIT + size: 37045 + timestamp: 1726971145252 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh534df25_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + sha256: 8d8fc7d67e9bd387403720447abb1b5539a6f6ca8e3aba8406e0987213bfa0ce + md5: 2099f34ea2f3534f7adc5c21cc199e1b + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37045 + timestamp: 1726971145252 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + sha256: 69626899dfac975090032f7af782c143b569f7706e808a4eca67a9a5aa134a15 + md5: 1c74a03431815d5e091585bb04e86f12 + depends: + - __win + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + - pywin32-ctypes >=0.2.0 + license: MIT + license_family: MIT + size: 37407 + timestamp: 1726971355676 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + sha256: 69626899dfac975090032f7af782c143b569f7706e808a4eca67a9a5aa134a15 + md5: 1c74a03431815d5e091585bb04e86f12 + depends: + - __win + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + - pywin32-ctypes >=0.2.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37407 + timestamp: 1726971355676 +- kind: conda + name: keyring + version: 25.4.1 + build: pyha804496_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + sha256: 6deeb4fa0f01447a5e8bd7261044c45d139e27d36df769e5a3a16ce55607da14 + md5: ef6f2de3c8eef0ee9fd31f2267c27bf2 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.8 + - secretstorage >=3.2 + license: MIT + license_family: MIT + size: 36717 + timestamp: 1726971094601 +- kind: conda + name: keyring + version: 25.4.1 + build: pyha804496_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + sha256: 6deeb4fa0f01447a5e8bd7261044c45d139e27d36df769e5a3a16ce55607da14 + md5: ef6f2de3c8eef0ee9fd31f2267c27bf2 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.8 + - secretstorage >=3.2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 36717 + timestamp: 1726971094601 - kind: conda name: ld_impl_linux-64 version: '2.43' @@ -1597,21 +2952,6 @@ packages: purls: [] size: 669616 timestamp: 1727304687962 -- kind: conda - name: ld_impl_linux-aarch64 - version: '2.43' - build: h80caac9_1 - build_number: 1 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_1.conda - sha256: cc4ad280a52e6815c0b26d785f6c2e205646c72fb01f418883f8df266d3c12f1 - md5: 5019b8e4dd2433395270cc0838ad4065 - constrains: - - binutils_impl_linux-aarch64 2.43 - license: GPL-3.0-only - license_family: GPL - size: 698534 - timestamp: 1727304686383 - kind: conda name: ld_impl_linux-aarch64 version: '2.43' @@ -1628,20 +2968,6 @@ packages: purls: [] size: 698534 timestamp: 1727304686383 -- kind: conda - name: libcxx - version: 19.1.2 - build: ha82da77_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda - sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 - md5: ba89ad7c5477e6a9d020020fcdadd37d - depends: - - __osx >=11.0 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - size: 521199 - timestamp: 1729038190391 - kind: conda name: libcxx version: 19.1.2 @@ -1675,22 +3001,6 @@ packages: purls: [] size: 73616 timestamp: 1725568742634 -- kind: conda - name: libexpat - version: 2.6.3 - build: h5ad3122_0 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda - sha256: 02341c9c35128055fd404dfe675832b80f2bf9dbb99539457652c11c06e52757 - md5: 1d2b842bb76e268625e8ee8d0a9fe8c3 - depends: - - libgcc >=13 - constrains: - - expat 2.6.3.* - license: MIT - license_family: MIT - size: 72342 - timestamp: 1725568840022 - kind: conda name: libexpat version: 2.6.3 @@ -1708,24 +3018,6 @@ packages: purls: [] size: 72342 timestamp: 1725568840022 -- kind: conda - name: libexpat - version: 2.6.3 - build: he0c23c2_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda - sha256: 9543965d155b8da96fc67dd81705fe5c2571c7c00becc8de5534c850393d4e3c - md5: 21415fbf4d0de6767a621160b43e5dea - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - expat 2.6.3.* - license: MIT - license_family: MIT - size: 138992 - timestamp: 1725569106114 - kind: conda name: libexpat version: 2.6.3 @@ -1745,22 +3037,6 @@ packages: purls: [] size: 138992 timestamp: 1725569106114 -- kind: conda - name: libexpat - version: 2.6.3 - build: hf9b8971_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda - sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a - md5: 5f22f07c2ab2dea8c66fe9585a062c96 - depends: - - __osx >=11.0 - constrains: - - expat 2.6.3.* - license: MIT - license_family: MIT - size: 63895 - timestamp: 1725568783033 - kind: conda name: libexpat version: 2.6.3 @@ -1778,19 +3054,6 @@ packages: purls: [] size: 63895 timestamp: 1725568783033 -- kind: conda - name: libffi - version: 3.4.2 - build: h3422bc3_5 - build_number: 5 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca - md5: 086914b672be056eb70fd4285b6783b6 - license: MIT - license_family: MIT - size: 39020 - timestamp: 1636488587153 - kind: conda name: libffi version: 3.4.2 @@ -1805,21 +3068,6 @@ packages: purls: [] size: 39020 timestamp: 1636488587153 -- kind: conda - name: libffi - version: 3.4.2 - build: h3557bc0_5 - build_number: 5 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 - sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c - md5: dddd85f4d52121fab0a8b099c5e06501 - depends: - - libgcc-ng >=9.4.0 - license: MIT - license_family: MIT - size: 59450 - timestamp: 1636488255090 - kind: conda name: libffi version: 3.4.2 @@ -1852,22 +3100,6 @@ packages: purls: [] size: 58292 timestamp: 1636488182923 -- kind: conda - name: libffi - version: 3.4.2 - build: h8ffe710_5 - build_number: 5 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 - md5: 2c96d1b6915b408893f9472569dee135 - depends: - - vc >=14.1,<15.0a0 - - vs2015_runtime >=14.16.27012 - license: MIT - license_family: MIT - size: 42063 - timestamp: 1636489106777 - kind: conda name: libffi version: 3.4.2 @@ -1905,24 +3137,6 @@ packages: purls: [] size: 848745 timestamp: 1729027721139 -- kind: conda - name: libgcc - version: 14.2.0 - build: he277a41_1 - build_number: 1 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda - sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 - md5: 511b511c5445e324066c3377481bcab8 - depends: - - _openmp_mutex >=4.5 - constrains: - - libgcc-ng ==14.2.0=*_1 - - libgomp 14.2.0 he277a41_1 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 535243 - timestamp: 1729089435134 - kind: conda name: libgcc version: 14.2.0 @@ -1971,24 +3185,89 @@ packages: - libgcc 14.2.0 he277a41_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 54104 timestamp: 1729089444587 - kind: conda - name: libgcc-ng - version: 14.2.0 - build: he9431aa_1 - build_number: 1 + name: libglib + version: 2.82.2 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + size: 3931898 + timestamp: 1729191404130 +- kind: conda + name: libglib + version: 2.82.2 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 3931898 + timestamp: 1729191404130 +- kind: conda + name: libglib + version: 2.82.2 + build: hc486b8e_0 subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda - sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 - md5: 0694c249c61469f2c0f7e2990782af21 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + sha256: 6797d24de7acd298f81a86078c64e4f3fea6d551a3e8892205c9e72a37a7cc3c + md5: 47f6d85fe47b865e56c539f2ba5f4dad depends: - - libgcc 14.2.0 he277a41_1 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + size: 4020802 + timestamp: 1729191545578 +- kind: conda + name: libglib + version: 2.82.2 + build: hc486b8e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + sha256: 6797d24de7acd298f81a86078c64e4f3fea6d551a3e8892205c9e72a37a7cc3c + md5: 47f6d85fe47b865e56c539f2ba5f4dad + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later purls: [] - size: 54104 - timestamp: 1729089444587 + size: 4020802 + timestamp: 1729191545578 - kind: conda name: libgomp version: 14.2.0 @@ -2016,36 +3295,67 @@ packages: md5: 376f0e73abbda6d23c0cb749adc195ef license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 463521 timestamp: 1729089357313 - kind: conda - name: libgomp - version: 14.2.0 - build: he277a41_1 - build_number: 1 + name: libiconv + version: '1.17' + build: h31becfc_2 + build_number: 2 subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda - sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf - md5: 376f0e73abbda6d23c0cb749adc195ef - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 463521 - timestamp: 1729089357313 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + size: 705787 + timestamp: 1702684557134 - kind: conda - name: libnsl - version: 2.0.1 - build: h31becfc_0 + name: libiconv + version: '1.17' + build: h31becfc_2 + build_number: 2 subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda - sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 - md5: c14f32510f694e3185704d89967ec422 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 depends: - libgcc-ng >=12 license: LGPL-2.1-only - license_family: GPL - size: 34501 - timestamp: 1697358973269 + purls: [] + size: 705787 + timestamp: 1702684557134 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + size: 705775 + timestamp: 1702682170569 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705775 + timestamp: 1702682170569 - kind: conda name: libnsl version: 2.0.1 @@ -2092,21 +3402,6 @@ packages: purls: [] size: 865214 timestamp: 1725353659783 -- kind: conda - name: libsqlite - version: 3.47.0 - build: h2466b09_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda - sha256: 4f3cd0477c831eab48fb7fa3ed91d918aeb644fad9b4014726d445339750cdcc - md5: 964bef59135d876c596ae67b3315e812 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Unlicense - size: 884970 - timestamp: 1729592254351 - kind: conda name: libsqlite version: 3.47.0 @@ -2135,37 +3430,9 @@ packages: - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 license: Unlicense - size: 837789 - timestamp: 1729592072314 -- kind: conda - name: libsqlite - version: 3.47.0 - build: hbaaea75_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda - sha256: 76aa4bbbaa2334689b16048f04ac4c7406e9bfb1f225ac7107fd2a73f85329cf - md5: 5bbe4802d5460b80620411fe1da8fec3 - depends: - - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 - license: Unlicense - purls: [] - size: 837789 - timestamp: 1729592072314 -- kind: conda - name: libsqlite - version: 3.47.0 - build: hc4a20ef_0 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda - sha256: 469ed05e9a1622b0204a2b6cf620c9054bf6904e2ed818a1f91ee96a7bc64517 - md5: ccbe261fb8c1f1cd1a3122592247d3c4 - depends: - - libgcc >=13 - - libzlib >=1.3.1,<2.0a0 - license: Unlicense - size: 1042108 - timestamp: 1729592001716 + purls: [] + size: 837789 + timestamp: 1729592072314 - kind: conda name: libsqlite version: 3.47.0 @@ -2181,21 +3448,6 @@ packages: purls: [] size: 1042108 timestamp: 1729592001716 -- kind: conda - name: libstdcxx - version: 14.2.0 - build: h3f4de04_1 - build_number: 1 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda - sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 - md5: 37f489acd39e22b623d2d1e5ac6d195c - depends: - - libgcc 14.2.0 he277a41_1 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 3816794 - timestamp: 1729089463404 - kind: conda name: libstdcxx version: 14.2.0 @@ -2244,21 +3496,6 @@ packages: purls: [] size: 54105 timestamp: 1729027780628 -- kind: conda - name: libstdcxx-ng - version: 14.2.0 - build: hf1166c9_1 - build_number: 1 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda - sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd - md5: 0e75771b8a03afae5a2c6ce71bc733f5 - depends: - - libstdcxx 14.2.0 h3f4de04_1 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 54133 - timestamp: 1729089498541 - kind: conda name: libstdcxx-ng version: 14.2.0 @@ -2290,20 +3527,6 @@ packages: purls: [] size: 33601 timestamp: 1680112270483 -- kind: conda - name: libuuid - version: 2.38.1 - build: hb4cce97_0 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda - sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f - md5: 000e30b09db0b7c775b21695dff30969 - depends: - - libgcc-ng >=12 - license: BSD-3-Clause - license_family: BSD - size: 35720 - timestamp: 1680113474501 - kind: conda name: libuuid version: 2.38.1 @@ -2319,20 +3542,6 @@ packages: purls: [] size: 35720 timestamp: 1680113474501 -- kind: conda - name: libuv - version: 1.49.2 - build: h7ab814d_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 - md5: 4bc348e3a1a74d20a3f9beb866d75e0a - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - size: 410500 - timestamp: 1729322654121 - kind: conda name: libuv version: 1.49.2 @@ -2348,20 +3557,6 @@ packages: purls: [] size: 410500 timestamp: 1729322654121 -- kind: conda - name: libuv - version: 1.49.2 - build: h86ecc28_0 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda - sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 - md5: 1899e1ec2be63386c41c4db31d3056af - depends: - - libgcc >=13 - license: MIT - license_family: MIT - size: 627484 - timestamp: 1729322575379 - kind: conda name: libuv version: 1.49.2 @@ -2393,20 +3588,6 @@ packages: purls: [] size: 884647 timestamp: 1729322566955 -- kind: conda - name: libxcrypt - version: 4.4.36 - build: h31becfc_1 - build_number: 1 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f - md5: b4df5d7d4b63579d081fd3a4cf99740e - depends: - - libgcc-ng >=12 - license: LGPL-2.1-or-later - size: 114269 - timestamp: 1702724369203 - kind: conda name: libxcrypt version: 4.4.36 @@ -2437,25 +3618,6 @@ packages: purls: [] size: 100393 timestamp: 1702724383534 -- kind: conda - name: libzlib - version: 1.3.1 - build: h2466b09_2 - build_number: 2 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 - md5: 41fbfac52c601159df6c01f875de31b9 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - size: 55476 - timestamp: 1727963768015 - kind: conda name: libzlib version: 1.3.1 @@ -2476,23 +3638,6 @@ packages: purls: [] size: 55476 timestamp: 1727963768015 -- kind: conda - name: libzlib - version: 1.3.1 - build: h8359307_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b - md5: 369964e85dc26bfe78f41399b366c435 - depends: - - __osx >=11.0 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - size: 46438 - timestamp: 1727963202283 - kind: conda name: libzlib version: 1.3.1 @@ -2511,23 +3656,6 @@ packages: purls: [] size: 46438 timestamp: 1727963202283 -- kind: conda - name: libzlib - version: 1.3.1 - build: h86ecc28_2 - build_number: 2 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 - md5: 08aad7cbe9f5a6b460d0976076b6ae64 - depends: - - libgcc >=13 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - size: 66657 - timestamp: 1727963199518 - kind: conda name: libzlib version: 1.3.1 @@ -2565,64 +3693,346 @@ packages: purls: [] size: 60963 timestamp: 1727963148474 -- kind: pypi +- kind: conda + name: m2w64-gcc-libgfortran + version: 5.3.0 + build: '6' + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 + md5: 066552ac6b907ec6d72c0ddab29050dc + depends: + - m2w64-gcc-libs-core + - msys2-conda-epoch ==20160418 + license: GPL, LGPL, FDL, custom + size: 350687 + timestamp: 1608163451316 +- kind: conda + name: m2w64-gcc-libgfortran + version: 5.3.0 + build: '6' + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 + md5: 066552ac6b907ec6d72c0ddab29050dc + depends: + - m2w64-gcc-libs-core + - msys2-conda-epoch ==20160418 + license: GPL, LGPL, FDL, custom + purls: [] + size: 350687 + timestamp: 1608163451316 +- kind: conda + name: m2w64-gcc-libs + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa + md5: fe759119b8b3bfa720b8762c6fdc35de + depends: + - m2w64-gcc-libgfortran + - m2w64-gcc-libs-core + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + size: 532390 + timestamp: 1608163512830 +- kind: conda + name: m2w64-gcc-libs + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa + md5: fe759119b8b3bfa720b8762c6fdc35de + depends: + - m2w64-gcc-libgfortran + - m2w64-gcc-libs-core + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 532390 + timestamp: 1608163512830 +- kind: conda + name: m2w64-gcc-libs-core + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 + md5: 4289d80fb4d272f1f3b56cfe87ac90bd + depends: + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + size: 219240 + timestamp: 1608163481341 +- kind: conda + name: m2w64-gcc-libs-core + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 + md5: 4289d80fb4d272f1f3b56cfe87ac90bd + depends: + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 219240 + timestamp: 1608163481341 +- kind: conda + name: m2w64-gmp + version: 6.1.0 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 + md5: 53a1c73e1e3d185516d7e3af177596d9 + depends: + - msys2-conda-epoch ==20160418 + license: LGPL3 + size: 743501 + timestamp: 1608163782057 +- kind: conda + name: m2w64-gmp + version: 6.1.0 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 + md5: 53a1c73e1e3d185516d7e3af177596d9 + depends: + - msys2-conda-epoch ==20160418 + license: LGPL3 + purls: [] + size: 743501 + timestamp: 1608163782057 +- kind: conda + name: m2w64-jq + version: '1.6' + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + sha256: d722a8c06f44dfb5f357608e6e1d40d1f1c926316bbee5d1e71d93823554646b + md5: 209cbf1b222dc774cb29ce57796500b3 + depends: + - m2w64-gcc-libs + - m2w64-oniguruma + license: MIT + license_family: MIT + size: 424702 + timestamp: 1591860215369 +- kind: conda + name: m2w64-jq + version: '1.6' + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + sha256: d722a8c06f44dfb5f357608e6e1d40d1f1c926316bbee5d1e71d93823554646b + md5: 209cbf1b222dc774cb29ce57796500b3 + depends: + - m2w64-gcc-libs + - m2w64-oniguruma + license: MIT + license_family: MIT + purls: [] + size: 424702 + timestamp: 1591860215369 +- kind: conda + name: m2w64-libwinpthread-git + version: 5.0.0.4634.697f757 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 + md5: 774130a326dee16f1ceb05cc687ee4f0 + depends: + - msys2-conda-epoch ==20160418 + license: MIT, BSD + size: 31928 + timestamp: 1608166099896 +- kind: conda + name: m2w64-libwinpthread-git + version: 5.0.0.4634.697f757 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 + md5: 774130a326dee16f1ceb05cc687ee4f0 + depends: + - msys2-conda-epoch ==20160418 + license: MIT, BSD + purls: [] + size: 31928 + timestamp: 1608166099896 +- kind: conda + name: m2w64-oniguruma + version: 6.9.5 + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + sha256: 523edeac9788aa61243bd2ceb7b8bdb1a86b68c9f7f1aeb933085893d2886cc3 + md5: 61c9b808f92724106a63dd7b50979d6b + depends: + - m2w64-gcc-libs + license: BSD-2-Clause + license_family: BSD + size: 426599 + timestamp: 1591828659130 +- kind: conda + name: m2w64-oniguruma + version: 6.9.5 + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + sha256: 523edeac9788aa61243bd2ceb7b8bdb1a86b68c9f7f1aeb933085893d2886cc3 + md5: 61c9b808f92724106a63dd7b50979d6b + depends: + - m2w64-gcc-libs + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 426599 + timestamp: 1591828659130 +- kind: conda name: markdown-it-py version: 3.0.0 - url: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl - sha256: 355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 - requires_dist: - - mdurl~=0.1 - - psutil ; extra == 'benchmarking' - - pytest ; extra == 'benchmarking' - - pytest-benchmark ; extra == 'benchmarking' - - pre-commit~=3.0 ; extra == 'code-style' - - commonmark~=0.9 ; extra == 'compare' - - markdown~=3.4 ; extra == 'compare' - - mistletoe~=1.0 ; extra == 'compare' - - mistune~=2.0 ; extra == 'compare' - - panflute~=2.3 ; extra == 'compare' - - linkify-it-py>=1,<3 ; extra == 'linkify' - - mdit-py-plugins ; extra == 'plugins' - - gprof2dot ; extra == 'profiling' - - mdit-py-plugins ; extra == 'rtd' - - myst-parser ; extra == 'rtd' - - pyyaml ; extra == 'rtd' - - sphinx ; extra == 'rtd' - - sphinx-copybutton ; extra == 'rtd' - - sphinx-design ; extra == 'rtd' - - sphinx-book-theme ; extra == 'rtd' - - jupyter-sphinx ; extra == 'rtd' - - coverage ; extra == 'testing' - - pytest ; extra == 'testing' - - pytest-cov ; extra == 'testing' - - pytest-regressions ; extra == 'testing' - requires_python: '>=3.8' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + size: 64356 + timestamp: 1686175179621 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + size: 64356 + timestamp: 1686175179621 +- kind: conda name: mdurl version: 0.1.2 - url: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 - requires_python: '>=3.7' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 14680 + timestamp: 1704317789138 +- kind: conda + name: mdurl + version: 0.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping + size: 14680 + timestamp: 1704317789138 +- kind: conda name: more-itertools version: 10.5.0 - url: https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl - sha256: 037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef - requires_python: '>=3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + sha256: 2315b7dba237e16b0e1b601725a8e03e062421e0be28d8a25dc35dd9bd93a342 + md5: 3364591bebd600979606791e1dff7cb6 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 57345 + timestamp: 1725630183289 +- kind: conda + name: more-itertools + version: 10.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + sha256: 2315b7dba237e16b0e1b601725a8e03e062421e0be28d8a25dc35dd9bd93a342 + md5: 3364591bebd600979606791e1dff7cb6 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/more-itertools?source=hash-mapping + size: 57345 + timestamp: 1725630183289 - kind: conda - name: ncurses - version: '6.5' - build: h7bae524_1 + name: msys2-conda-epoch + version: '20160418' + build: '1' build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc - md5: cb2b0ea909b97b3d70cd3921d1445e1a - depends: - - __osx >=11.0 - license: X11 AND BSD-3-Clause - size: 802321 - timestamp: 1724658775723 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 + md5: b0309b72560df66f71a9d5e34a5efdfa + size: 3227 + timestamp: 1608166968312 +- kind: conda + name: msys2-conda-epoch + version: '20160418' + build: '1' + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 + md5: b0309b72560df66f71a9d5e34a5efdfa + purls: [] + size: 3227 + timestamp: 1608166968312 - kind: conda name: ncurses version: '6.5' @@ -2638,20 +4048,6 @@ packages: purls: [] size: 802321 timestamp: 1724658775723 -- kind: conda - name: ncurses - version: '6.5' - build: hcccb83c_1 - build_number: 1 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda - sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 - md5: 91d49c85cacd92caa40cf375ef72a25d - depends: - - libgcc-ng >=12 - license: X11 AND BSD-3-Clause - size: 924472 - timestamp: 1724658573518 - kind: conda name: ncurses version: '6.5' @@ -2683,26 +4079,6 @@ packages: purls: [] size: 889086 timestamp: 1724658547447 -- kind: conda - name: nodejs - version: 22.9.0 - build: h08fde81_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda - sha256: 736a4738aba32a03401aa25c8f740e4afe4aea02bc06651b59b06f0fdc024fdf - md5: 3771a3a6abe5a8db8910d5ebf144811b - depends: - - __osx >=11.0 - - icu >=75.1,<76.0a0 - - libcxx >=17 - - libuv >=1.48.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - - zlib - license: MIT - license_family: MIT - size: 14859715 - timestamp: 1726671037225 - kind: conda name: nodejs version: 22.9.0 @@ -2724,18 +4100,6 @@ packages: purls: [] size: 14859715 timestamp: 1726671037225 -- kind: conda - name: nodejs - version: 22.9.0 - build: h57928b3_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda - sha256: 6d74f0dbb91eb2049199ba801a3db67965f990aef44084f9ae51a1f70c2996f6 - md5: 6aa54ed90a643a11a005491ff316b1c4 - license: MIT - license_family: MIT - size: 25378221 - timestamp: 1726657153171 - kind: conda name: nodejs version: 22.9.0 @@ -2749,27 +4113,6 @@ packages: purls: [] size: 25378221 timestamp: 1726657153171 -- kind: conda - name: nodejs - version: 22.9.0 - build: h8374285_0 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda - sha256: ff2186a51d389c18423109af3abf6377d4ef5b1370a81ee5f8fb2e036d79cf4f - md5: 6a9739c1ce3f9714b705a655872b5a4d - depends: - - __glibc >=2.28,<3.0.a0 - - icu >=75.1,<76.0a0 - - libgcc >=13 - - libstdcxx >=13 - - libuv >=1.48.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - - zlib - license: MIT - license_family: MIT - size: 21653106 - timestamp: 1726665120657 - kind: conda name: nodejs version: 22.9.0 @@ -2839,22 +4182,88 @@ packages: sha256: 1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0 requires_python: '>=3.10' - kind: conda - name: openssl - version: 3.3.2 - build: h2466b09_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda - sha256: a45c42f3577294e22ac39ddb6ef5a64fd5322e8a6725afefbf4f2b4109340bf9 - md5: 1dc86753693df5e3326bb8a85b74c589 + name: oniguruma + version: 6.9.9 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + sha256: e21b1822736959ba434ebce452ee86844a11d918c8b1c48c71f15e9a932fd571 + md5: 475018b8e0b8720c985a185427f5bf13 depends: - - ca-certificates - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 8396053 - timestamp: 1725412961673 + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 250005 + timestamp: 1697487236819 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + sha256: e21b1822736959ba434ebce452ee86844a11d918c8b1c48c71f15e9a932fd571 + md5: 475018b8e0b8720c985a185427f5bf13 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 250005 + timestamp: 1697487236819 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + sha256: 66632aeef5b74e15746161db8fa8b5150a191ab05823d7d2f1587bdf96674c7b + md5: 770c654e0d5bfa3aa1e6ac5440815cda + license: BSD-2-Clause + license_family: BSD + size: 223231 + timestamp: 1697485732214 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + sha256: 66632aeef5b74e15746161db8fa8b5150a191ab05823d7d2f1587bdf96674c7b + md5: 770c654e0d5bfa3aa1e6ac5440815cda + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 223231 + timestamp: 1697485732214 +- kind: conda + name: oniguruma + version: 6.9.9 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed + md5: 77dab674d16c1525ebe65e67de30de0d + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 246869 + timestamp: 1697485543293 +- kind: conda + name: oniguruma + version: 6.9.9 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed + md5: 77dab674d16c1525ebe65e67de30de0d + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 246869 + timestamp: 1697485543293 - kind: conda name: openssl version: 3.3.2 @@ -2873,21 +4282,6 @@ packages: purls: [] size: 8396053 timestamp: 1725412961673 -- kind: conda - name: openssl - version: 3.3.2 - build: h8359307_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda - sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 - md5: 1773ebccdc13ec603356e8ff1db9e958 - depends: - - __osx >=11.0 - - ca-certificates - license: Apache-2.0 - license_family: Apache - size: 2882450 - timestamp: 1725410638874 - kind: conda name: openssl version: 3.3.2 @@ -2904,21 +4298,6 @@ packages: purls: [] size: 2882450 timestamp: 1725410638874 -- kind: conda - name: openssl - version: 3.3.2 - build: h86ecc28_0 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda - sha256: 4669d26dbf81e4d72093d8260f55d19d57204d82b1d9440be83d11d313b5990c - md5: 9e1e477b3f8ee3789297883faffa708b - depends: - - ca-certificates - - libgcc >=13 - license: Apache-2.0 - license_family: Apache - size: 3428083 - timestamp: 1725412266679 - kind: conda name: openssl version: 3.3.2 @@ -2960,6 +4339,21 @@ packages: requires_dist: - attrs>=19.2.0 requires_python: '>=3.7' +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + size: 50290 + timestamp: 1718189540074 - kind: conda name: packaging version: '24.1' @@ -2977,19 +4371,160 @@ packages: - pkg:pypi/packaging?source=hash-mapping size: 50290 timestamp: 1718189540074 -- kind: pypi +- kind: conda name: pathspec version: 0.12.1 - url: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - sha256: a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 - requires_python: '>=3.8' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d + md5: 17064acba08d3686f1135b5ec1b32b12 + depends: + - python >=3.7 + license: MPL-2.0 + license_family: MOZILLA + size: 41173 + timestamp: 1702250135032 +- kind: conda + name: pathspec + version: 0.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d + md5: 17064acba08d3686f1135b5ec1b32b12 + depends: + - python >=3.7 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/pathspec?source=hash-mapping + size: 41173 + timestamp: 1702250135032 +- kind: conda + name: pcre2 + version: '10.44' + build: h070dd5b_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + sha256: e9f4b912e48514771d477f2ee955f59d4ff4ef799c3d4d16e4d0f335ce91df67 + md5: 94022de9682cb1a0bb18a99cbc3541b3 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 884590 + timestamp: 1723488793100 +- kind: conda + name: pcre2 + version: '10.44' + build: h070dd5b_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + sha256: e9f4b912e48514771d477f2ee955f59d4ff4ef799c3d4d16e4d0f335ce91df67 + md5: 94022de9682cb1a0bb18a99cbc3541b3 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 884590 + timestamp: 1723488793100 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 952308 + timestamp: 1723488734144 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 952308 + timestamp: 1723488734144 +- kind: conda name: pexpect version: 4.9.0 - url: https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl - sha256: 7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 - requires_dist: - - ptyprocess>=0.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pexpect + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pip + version: '24.2' + build: pyh8b19718_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + sha256: d820e5358bcb117fa6286e55d4550c60b0332443df62121df839eab2d11c890b + md5: 6c78fbb8ddfd64bcb55b5cbafd2d2c43 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + size: 1237976 + timestamp: 1724954490262 - kind: conda name: pip version: '24.2' @@ -3010,23 +4545,38 @@ packages: - pkg:pypi/pip?source=hash-mapping size: 1237976 timestamp: 1724954490262 -- kind: pypi +- kind: conda name: platformdirs version: 4.3.6 - url: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - sha256: 73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb - requires_dist: - - furo>=2024.8.6 ; extra == 'docs' - - proselint>=0.14 ; extra == 'docs' - - sphinx-autodoc-typehints>=2.4 ; extra == 'docs' - - sphinx>=8.0.2 ; extra == 'docs' - - appdirs==1.4.4 ; extra == 'test' - - covdefaults>=2.3 ; extra == 'test' - - pytest-cov>=5 ; extra == 'test' - - pytest-mock>=3.14 ; extra == 'test' - - pytest>=8.3.2 ; extra == 'test' - - mypy>=1.11.2 ; extra == 'type' - requires_python: '>=3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 20625 + timestamp: 1726613611845 +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 20625 + timestamp: 1726613611845 - kind: pypi name: playwright version: 1.47.0 @@ -3063,6 +4613,21 @@ packages: - greenlet==3.1.1 - pyee==12.0.0 requires_python: '>=3.8' +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 23815 + timestamp: 1713667175451 - kind: conda name: pluggy version: 1.5.0 @@ -3098,22 +4663,6 @@ packages: purls: [] size: 3432886 timestamp: 1728326068924 -- kind: conda - name: pnpm - version: 9.12.1 - build: h8d36dbc_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.1-h8d36dbc_0.conda - sha256: 5cbfc3d27b7f92ec6c7960479098f13c02c8f230a6d70ca5f66ccd1b978dd89e - md5: 3e247ba4cb9ae7f577d1be40042c5b55 - depends: - - __osx >=11.0 - - libcxx >=17 - - nodejs >=22.9.0,<23.0a0 - license: MIT - license_family: MIT - size: 3321987 - timestamp: 1728326054468 - kind: conda name: pnpm version: 9.12.1 @@ -3131,23 +4680,6 @@ packages: purls: [] size: 3321987 timestamp: 1728326054468 -- kind: conda - name: pnpm - version: 9.12.1 - build: haa868a1_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.1-haa868a1_0.conda - sha256: d7cc645fbf4d1e75fdff4c85bfe36893743eb6fc5c22fd7563c74e0ca60cccce - md5: 72a3f1a9aa75bcc47f507ba62afb1bcb - depends: - - nodejs >=22.9.0,<23.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT - size: 3326527 - timestamp: 1728327035713 - kind: conda name: pnpm version: 9.12.1 @@ -3180,36 +4712,71 @@ packages: - nodejs >=22.6.0,<23.0a0 license: MIT license_family: MIT + purls: [] size: 3328424 timestamp: 1728326042036 - kind: conda - name: pnpm - version: 9.12.1 - build: hbf5023e_0 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.1-hbf5023e_0.conda - sha256: 8048fafd519613546fcfcec1c17e7fbca344d73bac63dc81d4a905e987a72e54 - md5: d3c54e8a7d748d7054f80c632a0c86c1 + name: ptyprocess + version: 0.7.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 depends: - - libgcc >=13 - - libstdcxx >=13 - - nodejs >=22.6.0,<23.0a0 - license: MIT - license_family: MIT - purls: [] - size: 3328424 - timestamp: 1728326042036 -- kind: pypi + - python + license: ISC + size: 16546 + timestamp: 1609419417991 +- kind: conda name: ptyprocess version: 0.7.0 - url: https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl - sha256: 4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 -- kind: pypi + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 16546 + timestamp: 1609419417991 +- kind: conda name: pycparser version: '2.22' - url: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl - sha256: c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc - requires_python: '>=3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 105098 + timestamp: 1711811634025 +- kind: conda + name: pycparser + version: '2.22' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=hash-mapping + size: 105098 + timestamp: 1711811634025 - kind: pypi name: pyee version: 12.0.0 @@ -3239,14 +4806,38 @@ packages: - pytest-asyncio ; python_full_version >= '3.4' and extra == 'dev' - pytest-trio ; python_full_version >= '3.7' and extra == 'dev' requires_python: '>=3.8' -- kind: pypi +- kind: conda name: pygments version: 2.18.0 - url: https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl - sha256: b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a - requires_dist: - - colorama>=0.4.6 ; extra == 'windows-terminal' - requires_python: '>=3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + size: 879295 + timestamp: 1714846885370 +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 879295 + timestamp: 1714846885370 - kind: pypi name: pyodide-py version: 0.26.3 @@ -3313,36 +4904,6 @@ packages: - pytest-cov ; extra == 'test' - requests ; extra == 'test' requires_python: '>=3.10' -- kind: conda - name: python - version: 3.12.7 - build: h5d932e8_0_cpython - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda - sha256: 25570873d92d4d9490c6db780cc85e6c28bd3ff61dc1ece79f602cf82bc73bc1 - md5: e6cab21bb5787270388939cf41cc5f43 - depends: - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-aarch64 >=2.36.1 - - libexpat >=2.6.3,<3.0a0 - - libffi >=3.4,<4.0a0 - - libgcc >=13 - - libnsl >=2.0.1,<2.1.0a0 - - libsqlite >=3.46.1,<4.0a0 - - libuuid >=2.38.1,<3.0a0 - - libxcrypt >=4.4.36 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.3.2,<4.0a0 - - readline >=8.2,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - xz >=5.2.6,<6.0a0 - constrains: - - python_abi 3.12.* *_cp312 - license: Python-2.0 - size: 13762126 - timestamp: 1728057461028 - kind: conda name: python version: 3.12.7 @@ -3374,32 +4935,6 @@ packages: purls: [] size: 13762126 timestamp: 1728057461028 -- kind: conda - name: python - version: 3.12.7 - build: h739c21a_0_cpython - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda - sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef - md5: e0d82e57ebb456077565e6d82cd4a323 - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.6.3,<3.0a0 - - libffi >=3.4,<4.0a0 - - libsqlite >=3.46.1,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.3.2,<4.0a0 - - readline >=8.2,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - xz >=5.2.6,<6.0a0 - constrains: - - python_abi 3.12.* *_cp312 - license: Python-2.0 - size: 12975439 - timestamp: 1728057819519 - kind: conda name: python version: 3.12.7 @@ -3481,43 +5016,169 @@ packages: - vc14_runtime >=14.29.30139 - xz >=5.2.6,<6.0a0 constrains: - - python_abi 3.12.* *_cp312 - license: Python-2.0 - size: 15987537 - timestamp: 1728057382072 + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 15987537 + timestamp: 1728057382072 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + sha256: 5ccdad9981753cc4a2d126e356673a21c0cd5b34e209cb8d476a3947d4ad9b39 + md5: 62b20f305498284a07dc6c45fd0e5c87 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6329 + timestamp: 1723823366253 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + sha256: 5ccdad9981753cc4a2d126e356673a21c0cd5b34e209cb8d476a3947d4ad9b39 + md5: 62b20f305498284a07dc6c45fd0e5c87 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6329 + timestamp: 1723823366253 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6278 + timestamp: 1723823099686 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6278 + timestamp: 1723823099686 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + sha256: 9486662af81a219e96d343449eff242f38d7c5128ced5ce5acf85857265058d6 + md5: e8681f534453af7afab4cd2bc1423eec + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6730 + timestamp: 1723823139725 - kind: conda - name: python - version: 3.12.7 - build: hce54a09_0_cpython + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda - sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 - md5: 21f1f7c6ccf6b747c5086d2422c230e1 - depends: - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.6.3,<3.0a0 - - libffi >=3.4,<4.0a0 - - libsqlite >=3.46.1,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - - xz >=5.2.6,<6.0a0 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + sha256: 9486662af81a219e96d343449eff242f38d7c5128ced5ce5acf85857265058d6 + md5: e8681f534453af7afab4cd2bc1423eec constrains: - - python_abi 3.12.* *_cp312 - license: Python-2.0 + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD purls: [] - size: 15987537 - timestamp: 1728057382072 -- kind: pypi + size: 6730 + timestamp: 1723823139725 +- kind: conda + name: pywin32-ctypes + version: 0.2.3 + build: py312h2e8e312_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + sha256: 3e3b97740b4ec2f54debf7bfdbaa9a81a7aabd4549051b926de91d05304c4948 + md5: c5f1cb65c56ec74687801960f8a31eb5 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 57449 + timestamp: 1727282288065 +- kind: conda name: pywin32-ctypes version: 0.2.3 - url: https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl - sha256: 8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 - requires_python: '>=3.6' + build: py312h2e8e312_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + sha256: 3e3b97740b4ec2f54debf7bfdbaa9a81a7aabd4549051b926de91d05304c4948 + md5: c5f1cb65c56ec74687801960f8a31eb5 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pywin32-ctypes?source=hash-mapping + size: 57449 + timestamp: 1727282288065 - kind: conda name: readline version: '8.2' @@ -3535,22 +5196,6 @@ packages: purls: [] size: 281456 timestamp: 1679532220005 -- kind: conda - name: readline - version: '8.2' - build: h8fc344f_1 - build_number: 1 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda - sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd - md5: 105eb1e16bf83bfb2eb380a48032b655 - depends: - - libgcc-ng >=12 - - ncurses >=6.3,<7.0a0 - license: GPL-3.0-only - license_family: GPL - size: 294092 - timestamp: 1679532238805 - kind: conda name: readline version: '8.2' @@ -3568,21 +5213,6 @@ packages: purls: [] size: 294092 timestamp: 1679532238805 -- kind: conda - name: readline - version: '8.2' - build: h92ec313_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 - md5: 8cbb776a2f641b943d413b3e19df71f4 - depends: - - ncurses >=6.3,<7.0a0 - license: GPL-3.0-only - license_family: GPL - size: 250351 - timestamp: 1679532511311 - kind: conda name: readline version: '8.2' @@ -3599,37 +5229,124 @@ packages: purls: [] size: 250351 timestamp: 1679532511311 -- kind: pypi +- kind: conda name: rich - version: 13.9.2 - url: https://files.pythonhosted.org/packages/67/91/5474b84e505a6ccc295b2d322d90ff6aa0746745717839ee0c5fb4fdcceb/rich-13.9.2-py3-none-any.whl - sha256: 8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1 - requires_dist: - - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' - - markdown-it-py>=2.2.0 - - pygments>=2.13.0,<3.0.0 - - typing-extensions>=4.0.0,<5.0 ; python_full_version < '3.11' - requires_python: '>=3.8.0' -- kind: pypi + version: 13.9.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + sha256: ec2a69babe41085a5bcec4ef80b2d5bade2ca399d971f57894dfb96cf59a18d1 + md5: 50dd5529812447e2b4e2a5dd6a6f1655 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + size: 185320 + timestamp: 1729623039134 +- kind: conda name: rich version: 13.9.3 - url: https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl - sha256: 9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283 - requires_dist: - - ipywidgets>=7.5.1,<9 ; extra == 'jupyter' - - markdown-it-py>=2.2.0 - - pygments>=2.13.0,<3.0.0 - - typing-extensions>=4.0.0,<5.0 ; python_full_version < '3.11' - requires_python: '>=3.8.0' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + sha256: ec2a69babe41085a5bcec4ef80b2d5bade2ca399d971f57894dfb96cf59a18d1 + md5: 50dd5529812447e2b4e2a5dd6a6f1655 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rich?source=hash-mapping + size: 185320 + timestamp: 1729623039134 +- kind: conda name: secretstorage version: 3.3.3 - url: https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl - sha256: f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99 - requires_dist: - - cryptography>=2.0 - - jeepney>=0.6 - requires_python: '>=3.6' + build: py312h7900ff3_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + sha256: c6d5d0bc7fb6cbfa3b8be8f2399a3c1308b3392a4e20bd1a0f29a828fda5ab20 + md5: 4840da9db2808db946a0d979603c6de4 + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 31601 + timestamp: 1725915741329 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h7900ff3_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + sha256: c6d5d0bc7fb6cbfa3b8be8f2399a3c1308b3392a4e20bd1a0f29a828fda5ab20 + md5: 4840da9db2808db946a0d979603c6de4 + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31601 + timestamp: 1725915741329 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h8025657_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + sha256: fd6bc45ba0c6bb097ad98037ad8d2ddf2449f28c2eedf57dfff54eeceefe90c6 + md5: 4ae02e3717828f5e92dfae068845afdd + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 31394 + timestamp: 1725917363210 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h8025657_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + sha256: fd6bc45ba0c6bb097ad98037ad8d2ddf2449f28c2eedf57dfff54eeceefe90c6 + md5: 4ae02e3717828f5e92dfae068845afdd + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31394 + timestamp: 1725917363210 - kind: pypi name: selenium version: 4.25.0 @@ -3643,6 +5360,21 @@ packages: - typing-extensions~=4.9 - websocket-client~=1.8 requires_python: '>=3.8' +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 777462 + timestamp: 1727249510532 - kind: conda name: setuptools version: 75.1.0 @@ -3660,18 +5392,70 @@ packages: - pkg:pypi/setuptools?source=hash-mapping size: 777462 timestamp: 1727249510532 -- kind: pypi +- kind: conda name: shellingham version: 1.5.4 - url: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - sha256: 7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 - requires_python: '>=3.7' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 14568 + timestamp: 1698144516278 +- kind: conda + name: shellingham + version: 1.5.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/shellingham?source=hash-mapping + size: 14568 + timestamp: 1698144516278 +- kind: conda name: sniffio version: 1.3.1 - url: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - sha256: 2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 - requires_python: '>=3.7' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + size: 15064 + timestamp: 1708953086199 +- kind: conda + name: sniffio + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping + size: 15064 + timestamp: 1708953086199 - kind: pypi name: sortedcontainers version: 2.4.0 @@ -3683,21 +5467,6 @@ packages: url: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl sha256: 80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129 requires_python: '>=3.8' -- kind: conda - name: tk - version: 8.6.13 - build: h194ca79_0 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda - sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 - md5: f75105e0585851f818e0009dd1dde4dc - depends: - - libgcc-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - license: TCL - license_family: BSD - size: 3351802 - timestamp: 1695506242997 - kind: conda name: tk version: 8.6.13 @@ -3714,21 +5483,6 @@ packages: purls: [] size: 3351802 timestamp: 1695506242997 -- kind: conda - name: tk - version: 8.6.13 - build: h5083fa2_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 - md5: b50a57ba89c32b62428b71a875291c9b - depends: - - libzlib >=1.2.13,<2.0.0a0 - license: TCL - license_family: BSD - size: 3145523 - timestamp: 1699202432999 - kind: conda name: tk version: 8.6.13 @@ -3745,23 +5499,6 @@ packages: purls: [] size: 3145523 timestamp: 1699202432999 -- kind: conda - name: tk - version: 8.6.13 - build: h5226925_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 - md5: fc048363eb8f03cd1737600a5d08aafe - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: TCL - license_family: BSD - size: 3503410 - timestamp: 1699202577803 - kind: conda name: tk version: 8.6.13 @@ -3790,13 +5527,28 @@ packages: sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e md5: d453b98d9c83e71da0741bb0ff4d76bc depends: - - libgcc-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - license: TCL - license_family: BSD - purls: [] - size: 3318875 - timestamp: 1699202167581 + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tomli + version: 2.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 18203 + timestamp: 1727974767524 - kind: conda name: tomli version: 2.0.2 @@ -3814,18 +5566,70 @@ packages: - pkg:pypi/tomli?source=hash-mapping size: 18203 timestamp: 1727974767524 -- kind: pypi +- kind: conda name: tomli-w version: 1.1.0 - url: https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl - sha256: 1403179c78193e3184bfaade390ddbd071cba48a32a2e62ba11aae47490c63f7 - requires_python: '>=3.9' -- kind: pypi + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + sha256: 25b88bb2c4e79be642d8e5b5738781404055cd596403a20511e6fa30f0c71585 + md5: 2c5eb5b3a0fd2c4787d8162f57da2a20 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 12323 + timestamp: 1728405537678 +- kind: conda + name: tomli-w + version: 1.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + sha256: 25b88bb2c4e79be642d8e5b5738781404055cd596403a20511e6fa30f0c71585 + md5: 2c5eb5b3a0fd2c4787d8162f57da2a20 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli-w?source=hash-mapping + size: 12323 + timestamp: 1728405537678 +- kind: conda name: tomlkit version: 0.13.2 - url: https://files.pythonhosted.org/packages/f9/b6/a447b5e4ec71e13871be01ba81f5dfc9d0af7e473da256ff46bc0e24026f/tomlkit-0.13.2-py3-none-any.whl - sha256: 7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde - requires_python: '>=3.8' + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + sha256: 2ccfe8dafdc1f1af944bca6bdf28fa97b5fa6125d84b8895a4e918a020853c12 + md5: 0062a5f3347733f67b0f33ca48cc21dd + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 37279 + timestamp: 1723631592742 +- kind: conda + name: tomlkit + version: 0.13.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + sha256: 2ccfe8dafdc1f1af944bca6bdf28fa97b5fa6125d84b8895a4e918a020853c12 + md5: 0062a5f3347733f67b0f33ca48cc21dd + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomlkit?source=hash-mapping + size: 37279 + timestamp: 1723631592742 - kind: pypi name: trio version: 0.27.0 @@ -3850,22 +5654,70 @@ packages: - wsproto>=0.14 - exceptiongroup ; python_full_version < '3.11' requires_python: '>=3.7' -- kind: pypi +- kind: conda name: trove-classifiers - version: 2024.10.16 - url: https://files.pythonhosted.org/packages/75/a0/dd773135ca0f7227e8257555fd2f7a0c88672bfd111a400361f10c09face/trove_classifiers-2024.10.16-py3-none-any.whl - sha256: 9b02a4cb49bd2e85c13e728ee461f4f332d6334736b18d61254c964643687144 -- kind: pypi + version: 2024.10.21.16 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + sha256: 591e4ffdc95660b9e596c15b65cad35a70b36235f02dbd089ccc198dd5af0e71 + md5: 501f6d3288160a31d99a2f1321e77393 + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + size: 18429 + timestamp: 1729552033760 +- kind: conda name: trove-classifiers version: 2024.10.21.16 - url: https://files.pythonhosted.org/packages/35/35/5055ab8d215af853d07bbff1a74edf48f91ed308f037380a5ca52dd73348/trove_classifiers-2024.10.21.16-py3-none-any.whl - sha256: 0fb11f1e995a757807a8ef1c03829fbd4998d817319abcef1f33165750f103be -- kind: pypi - name: typing-extensions + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + sha256: 591e4ffdc95660b9e596c15b65cad35a70b36235f02dbd089ccc198dd5af0e71 + md5: 501f6d3288160a31d99a2f1321e77393 + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/trove-classifiers?source=hash-mapping + size: 18429 + timestamp: 1729552033760 +- kind: conda + name: typing_extensions version: 4.12.2 - url: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl - sha256: 04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d - requires_python: '>=3.8' + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 39888 + timestamp: 1717802653893 - kind: conda name: tzdata version: 2024b @@ -3876,7 +5728,6 @@ packages: sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf md5: 8ac3367aafb1cc0a068483c580af8015 license: LicenseRef-Public-Domain - purls: [] size: 122354 timestamp: 1728047496079 - kind: conda @@ -3889,22 +5740,9 @@ packages: sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf md5: 8ac3367aafb1cc0a068483c580af8015 license: LicenseRef-Public-Domain + purls: [] size: 122354 timestamp: 1728047496079 -- kind: conda - name: ucrt - version: 10.0.22621.0 - build: h57928b3_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda - sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 - md5: 6797b005cd0f439c4c5c9ac565783700 - constrains: - - vs2015_runtime >=14.29.30037 - license: LicenseRef-MicrosoftWindowsSDK10 - size: 559710 - timestamp: 1728377334097 - kind: conda name: ucrt version: 10.0.22621.0 @@ -3932,55 +5770,172 @@ packages: - pysocks!=1.5.7,<2.0,>=1.5.6 ; extra == 'socks' - zstandard>=0.18.0 ; extra == 'zstd' requires_python: '>=3.8' -- kind: pypi +- kind: conda name: userpath - version: 1.9.2 - url: https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl - sha256: 2cbf01a23d655a1ff8fc166dfb78da1b641d1ceabf0fe5f970767d380b14e89d - requires_dist: + version: 1.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + sha256: c8cbddd625340e1b00b53bafabc764526ee85f7ddb91018424bab0eea057796d + md5: 5bf074c9253a3bf914becfc50757406f + depends: - click - requires_python: '>=3.7' -- kind: pypi + - python >=3.6 + license: MIT + license_family: MIT + size: 17423 + timestamp: 1632758637093 +- kind: conda + name: userpath + version: 1.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + sha256: c8cbddd625340e1b00b53bafabc764526ee85f7ddb91018424bab0eea057796d + md5: 5bf074c9253a3bf914becfc50757406f + depends: + - click + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/userpath?source=hash-mapping + size: 17423 + timestamp: 1632758637093 +- kind: conda name: uv - version: 0.4.24 - url: https://files.pythonhosted.org/packages/af/2d/cab3cc5529bb05ea7f4e54e308fa889ab626df45c0e2da5ab546e17ad876/uv-0.4.24-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - sha256: 2a3ea6780e3451c81ce1635656abcd8a47e43f1b0f02542c433b4b6dd459df8e - requires_python: '>=3.8' -- kind: pypi + version: 0.4.25 + build: h0f3a69f_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + sha256: 66ec8fc80cebbabef8a43a8a420f6540399200dcc0c9195db0bdda2836eee7be + md5: f820dec118406e896be62db8c53151ad + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + size: 9403871 + timestamp: 1729526779016 +- kind: conda name: uv version: 0.4.25 - url: https://files.pythonhosted.org/packages/04/e9/c00d2bb4a286b13fad0f06488ea9cbe9e76d0efcd81e7a907f72195d5b83/uv-0.4.25-py3-none-win_amd64.whl - sha256: be2a4fc4fcade9ea5e67e51738c95644360d6e59b6394b74fc579fb617f902f7 - requires_python: '>=3.8' -- kind: pypi + build: h0f3a69f_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + sha256: 66ec8fc80cebbabef8a43a8a420f6540399200dcc0c9195db0bdda2836eee7be + md5: f820dec118406e896be62db8c53151ad + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 9403871 + timestamp: 1729526779016 +- kind: conda name: uv version: 0.4.25 - url: https://files.pythonhosted.org/packages/0d/05/b97fb8c828a070e8291826922b2712d1146b11563b4860bc9ba80f5635d1/uv-0.4.25-py3-none-manylinux_2_28_aarch64.whl - sha256: e02afb0f6d4b58718347f7d7cfa5a801e985ce42181ba971ed85ef149f6658ca - requires_python: '>=3.8' -- kind: pypi + build: h2016286_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + sha256: e871051605de94afdec425d66bd06c047e5425ebb5e264c731b032e13f08f971 + md5: 8c51a22c12f76e66a96371e066952ba7 + depends: + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + size: 8821575 + timestamp: 1729527016183 +- kind: conda name: uv version: 0.4.25 - url: https://files.pythonhosted.org/packages/e8/c9/2f924bb29bd53c51b839c1c6126bd2cf4c451d4a7d8f34be078f9e31c57e/uv-0.4.25-py3-none-macosx_11_0_arm64.whl - sha256: 18100f0f36419a154306ed6211e3490bf18384cdf3f1a0950848bf64b62fa251 - requires_python: '>=3.8' + build: h2016286_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + sha256: e871051605de94afdec425d66bd06c047e5425ebb5e264c731b032e13f08f971 + md5: 8c51a22c12f76e66a96371e066952ba7 + depends: + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 8821575 + timestamp: 1729527016183 - kind: conda - name: vc - version: '14.3' - build: ha32ba9b_22 - build_number: 22 + name: uv + version: 0.4.25 + build: h41fe3af_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + sha256: 365063aa057bdb0f755449bb1f9490462c191109071a4ebb6b9648587558109e + md5: f736f9177b89edfccfe67650cbd05839 + depends: + - __osx >=11.0 + - libcxx >=17 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR MIT + size: 8475727 + timestamp: 1729527780770 +- kind: conda + name: uv + version: 0.4.25 + build: h41fe3af_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + sha256: 365063aa057bdb0f755449bb1f9490462c191109071a4ebb6b9648587558109e + md5: f736f9177b89edfccfe67650cbd05839 + depends: + - __osx >=11.0 + - libcxx >=17 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR MIT + purls: [] + size: 8475727 + timestamp: 1729527780770 +- kind: conda + name: uv + version: 0.4.25 + build: ha08ef0e_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda - sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd - md5: 311c9ba1dfdd2895a8cb08346ff26259 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda + sha256: 74ae665e93b8ed325ea30864c2d341ee57c1c4878dba3bf2781828b1be58031d + md5: 2162d0190d22bbf556365c076f60739c depends: - - vc14_runtime >=14.38.33135 - track_features: - - vc14 - license: BSD-3-Clause - license_family: BSD - size: 17447 - timestamp: 1728400826998 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 OR MIT + size: 10356663 + timestamp: 1729527565706 +- kind: conda + name: uv + version: 0.4.25 + build: ha08ef0e_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda + sha256: 74ae665e93b8ed325ea30864c2d341ee57c1c4878dba3bf2781828b1be58031d + md5: 2162d0190d22bbf556365c076f60739c + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 OR MIT + purls: [] + size: 10356663 + timestamp: 1729527565706 - kind: conda name: vc version: '14.3' @@ -3999,23 +5954,6 @@ packages: purls: [] size: 17447 timestamp: 1728400826998 -- kind: conda - name: vc14_runtime - version: 14.40.33810 - build: hcc2c482_22 - build_number: 22 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda - sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 - md5: ce23a4b980ee0556a118ed96550ff3f3 - depends: - - ucrt >=10.0.20348.0 - constrains: - - vs2015_runtime 14.40.33810.* *_22 - license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime - license_family: Proprietary - size: 750719 - timestamp: 1728401055788 - kind: conda name: vc14_runtime version: 14.40.33810 @@ -4034,51 +5972,44 @@ packages: purls: [] size: 750719 timestamp: 1728401055788 -- kind: pypi +- kind: conda name: virtualenv version: 20.27.0 - url: https://files.pythonhosted.org/packages/c8/15/828ec11907aee2349a9342fa71fba4ba7f3af938162a382dd7da339dea16/virtualenv-20.27.0-py3-none-any.whl - sha256: 44a72c29cceb0ee08f300b314848c86e57bf8d1f13107a5e671fb9274138d655 - requires_dist: - - distlib<1,>=0.3.7 - - filelock<4,>=3.12.2 - - importlib-metadata>=6.6 ; python_full_version < '3.8' - - platformdirs<5,>=3.9.1 - - furo>=2023.7.26 ; extra == 'docs' - - proselint>=0.13 ; extra == 'docs' - - sphinx!=7.3,>=7.1.2 ; extra == 'docs' - - sphinx-argparse>=0.4 ; extra == 'docs' - - sphinxcontrib-towncrier>=0.2.1a0 ; extra == 'docs' - - towncrier>=23.6 ; extra == 'docs' - - covdefaults>=2.3 ; extra == 'test' - - coverage-enable-subprocess>=1 ; extra == 'test' - - coverage>=7.2.7 ; extra == 'test' - - flaky>=3.7 ; extra == 'test' - - packaging>=23.1 ; extra == 'test' - - pytest-env>=0.8.2 ; extra == 'test' - - pytest-freezer>=0.4.8 ; (python_full_version >= '3.13' and platform_python_implementation == 'CPython' and sys_platform == 'win32' and extra == 'test') or (platform_python_implementation == 'PyPy' and extra == 'test') - - pytest-mock>=3.11.1 ; extra == 'test' - - pytest-randomly>=3.12 ; extra == 'test' - - pytest-timeout>=2.1 ; extra == 'test' - - pytest>=7.4 ; extra == 'test' - - setuptools>=68 ; extra == 'test' - - time-machine>=2.10 ; platform_python_implementation == 'CPython' and extra == 'test' - requires_python: '>=3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + sha256: 18bae5ff9f02793ca56d295f0a5f1d4443623ee3be09a6805eb7d4b18245968c + md5: a6ed1227ba6ec37cfc2b25e6512f729f + depends: + - distlib <1,>=0.3.7 + - filelock <4,>=3.12.2 + - platformdirs <5,>=3.9.1 + - python >=3.8 + license: MIT + license_family: MIT + size: 2952166 + timestamp: 1729243861344 - kind: conda - name: vs2015_runtime - version: 14.40.33810 - build: h3bf8584_22 - build_number: 22 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda - sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff - md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 + name: virtualenv + version: 20.27.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + sha256: 18bae5ff9f02793ca56d295f0a5f1d4443623ee3be09a6805eb7d4b18245968c + md5: a6ed1227ba6ec37cfc2b25e6512f729f depends: - - vc14_runtime >=14.40.33810 - license: BSD-3-Clause - license_family: BSD - size: 17453 - timestamp: 1728400827536 + - distlib <1,>=0.3.7 + - filelock <4,>=3.12.2 + - platformdirs <5,>=3.9.1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/virtualenv?source=hash-mapping + size: 2952166 + timestamp: 1729243861344 - kind: conda name: vs2015_runtime version: 14.40.33810 @@ -4160,6 +6091,21 @@ packages: - wsaccel ; extra == 'optional' - websockets ; extra == 'test' requires_python: '>=3.8' +- kind: conda + name: wheel + version: 0.44.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 58585 + timestamp: 1722797131787 - kind: conda name: wheel version: 0.44.0 @@ -4199,17 +6145,6 @@ packages: purls: [] size: 418368 timestamp: 1660346797927 -- kind: conda - name: xz - version: 5.2.6 - build: h57fd34a_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 - sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec - md5: 39c6b54e94014701dd157f4f576ed211 - license: LGPL-2.1 and GPL-2.0 - size: 235693 - timestamp: 1660346961024 - kind: conda name: xz version: 5.2.6 @@ -4222,20 +6157,6 @@ packages: purls: [] size: 235693 timestamp: 1660346961024 -- kind: conda - name: xz - version: 5.2.6 - build: h8d14728_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 - sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 - md5: 515d77642eaa3639413c6b1bc3f94219 - depends: - - vc >=14.1,<15 - - vs2015_runtime >=14.16.27033 - license: LGPL-2.1 and GPL-2.0 - size: 217804 - timestamp: 1660346976440 - kind: conda name: xz version: 5.2.6 @@ -4262,38 +6183,41 @@ packages: depends: - libgcc-ng >=12 license: LGPL-2.1 and GPL-2.0 + purls: [] size: 440555 timestamp: 1660348056328 - kind: conda - name: xz - version: 5.2.6 - build: h9cdd2b7_0 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 - sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 - md5: 83baad393a31d59c20b63ba4da6592df + name: zipp + version: 3.20.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 depends: - - libgcc-ng >=12 - license: LGPL-2.1 and GPL-2.0 - purls: [] - size: 440555 - timestamp: 1660348056328 + - python >=3.8 + license: MIT + license_family: MIT + size: 21409 + timestamp: 1726248679175 - kind: conda - name: zlib - version: 1.3.1 - build: h8359307_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 - md5: e3170d898ca6cb48f1bb567afb92f775 + name: zipp + version: 3.20.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 depends: - - __osx >=11.0 - - libzlib 1.3.1 h8359307_2 - license: Zlib - license_family: Other - size: 77606 - timestamp: 1727963209370 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 21409 + timestamp: 1726248679175 - kind: conda name: zlib version: 1.3.1 @@ -4311,22 +6235,6 @@ packages: purls: [] size: 77606 timestamp: 1727963209370 -- kind: conda - name: zlib - version: 1.3.1 - build: h86ecc28_2 - build_number: 2 - subdir: linux-aarch64 - url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda - sha256: b4f649aa3ecdae384d5dad7074e198bff120edd3dfb816588e31738fc6d627b1 - md5: bc230abb5d21b63ff4799b0e75204783 - depends: - - libgcc >=13 - - libzlib 1.3.1 h86ecc28_2 - license: Zlib - license_family: Other - size: 95582 - timestamp: 1727963203597 - kind: conda name: zlib version: 1.3.1 @@ -4362,39 +6270,313 @@ packages: purls: [] size: 92286 timestamp: 1727963153079 -- kind: pypi +- kind: conda name: zstandard version: 0.23.0 - url: https://files.pythonhosted.org/packages/26/af/36d89aae0c1f95a0a98e50711bc5d92c144939efc1f81a2fcd3e78d7f4c1/zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - sha256: b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1 - requires_dist: - - cffi>=1.11 ; platform_python_implementation == 'PyPy' - - cffi>=1.11 ; extra == 'cffi' - requires_python: '>=3.8' -- kind: pypi + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 330788 + timestamp: 1725305806565 +- kind: conda name: zstandard version: 0.23.0 - url: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: 1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8 - requires_dist: - - cffi>=1.11 ; platform_python_implementation == 'PyPy' - - cffi>=1.11 ; extra == 'cffi' - requires_python: '>=3.8' -- kind: pypi + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 330788 + timestamp: 1725305806565 +- kind: conda name: zstandard version: 0.23.0 - url: https://files.pythonhosted.org/packages/75/37/872d74bd7739639c4553bf94c84af7d54d8211b626b352bc57f0fd8d1e3f/zstandard-0.23.0-cp312-cp312-win_amd64.whl - sha256: 64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b - requires_dist: - - cffi>=1.11 ; platform_python_implementation == 'PyPy' - - cffi>=1.11 ; extra == 'cffi' - requires_python: '>=3.8' -- kind: pypi + build: py312h7606c53_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + sha256: 3e0c718aa18dcac7f080844dbe0aea41a9cea75083019ce02e8a784926239826 + md5: a92cc3435b2fd6f51463f5a4db5c50b1 + depends: + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 320624 + timestamp: 1725305934189 +- kind: conda name: zstandard version: 0.23.0 - url: https://files.pythonhosted.org/packages/fc/79/edeb217c57fe1bf16d890aa91a1c2c96b28c07b46afed54a5dcf310c3f6f/zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - sha256: 72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373 - requires_dist: - - cffi>=1.11 ; platform_python_implementation == 'PyPy' - - cffi>=1.11 ; extra == 'cffi' - requires_python: '>=3.8' + build: py312h7606c53_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + sha256: 3e0c718aa18dcac7f080844dbe0aea41a9cea75083019ce02e8a784926239826 + md5: a92cc3435b2fd6f51463f5a4db5c50b1 + depends: + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 320624 + timestamp: 1725305934189 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hb698573_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + sha256: 2681c2a249752bdc7978e59ee2f34fcdfcbfda80029b84b8e5fec8dbc9e3af25 + md5: ffcb8e97e62af42075e0e5f46bb9856e + depends: + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 392496 + timestamp: 1725305808244 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hb698573_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + sha256: 2681c2a249752bdc7978e59ee2f34fcdfcbfda80029b84b8e5fec8dbc9e3af25 + md5: ffcb8e97e62af42075e0e5f46bb9856e + depends: + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 392496 + timestamp: 1725305808244 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hef9b889_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b + md5: 8b7069e9792ee4e5b4919a7a306d2e67 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 419552 + timestamp: 1725305670210 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hef9b889_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b + md5: 8b7069e9792ee4e5b4919a7a306d2e67 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 419552 + timestamp: 1725305670210 +- kind: conda + name: zstd + version: 1.5.6 + build: h02f22dd_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + sha256: 484f9d0722c77685ae379fbff3ccd662af9ead7e59eb39cd6d0c677cdf25ff6c + md5: be8d5f8cf21aed237b8b182ea86b3dd6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 539937 + timestamp: 1714723130243 +- kind: conda + name: zstd + version: 1.5.6 + build: h02f22dd_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + sha256: 484f9d0722c77685ae379fbff3ccd662af9ead7e59eb39cd6d0c677cdf25ff6c + md5: be8d5f8cf21aed237b8b182ea86b3dd6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 539937 + timestamp: 1714723130243 +- kind: conda + name: zstd + version: 1.5.6 + build: h0ea2cb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + md5: 9a17230f95733c04dc40a2b1e5491d74 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + size: 349143 + timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: h0ea2cb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + md5: 9a17230f95733c04dc40a2b1e5491d74 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 349143 + timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 554846 + timestamp: 1714722996770 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 554846 + timestamp: 1714722996770 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 405089 + timestamp: 1714723101397 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 405089 + timestamp: 1714723101397 diff --git a/packages/compress-stringify/pixi.toml b/packages/compress-stringify/pixi.toml index 5c3ccda79..94f86724f 100644 --- a/packages/compress-stringify/pixi.toml +++ b/packages/compress-stringify/pixi.toml @@ -11,10 +11,67 @@ version = "0.1.0" [dependencies] python = "3.12.*" pnpm = ">=9.12.1,<10" +hatch = ">=1.13.0,<2" +pip = ">=24.2,<25" + +[target.win-64.dependencies] +m2w64-jq = ">=1.6.0,<2" + +[target.unix.dependencies] +jq = ">=1.7.1,<2" + +[tasks.version-sync-typescript] +cmd = '''version=$(cat package.json | jq .version) && + jq ".version = $version" typescript/package.json > typescript/package.json.tmp && + mv typescript/package.json.tmp typescript/package.json''' + +[tasks.version-sync-python-wasi] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + echo "version is $version" && + hatch version $version''' +cwd = "python/itkwasm-compress-stringify-wasi" + +[tasks.version-sync-python-emscripten] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-compress-stringify-emscripten" + +[tasks.version-sync-python-dispatch] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-compress-stringify" + +[tasks.version-sync] +depends-on = ["version-sync-typescript", "version-sync-python-wasi", "version-sync-python-emscripten", "version-sync-python-dispatch"] +description = "Synchronize package versions" + +[tasks.publish-typescript] +cmd = "pnpm publish --filter \"{typescript}\"" + +[tasks.publish-python-user-check] +cmd = "if [ -n \"$HATCH_INDEX_USER\"]; then echo \"HATCH_INDEX_USER is set\"; else echo \"HATCH_INDEX_USER is not set\"; exit 1; fi" + +[tasks.publish-python-wasi] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-compress-stringify-wasi" + +[tasks.publish-python-emscripten] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-compress-stringify-emscripten" + +[tasks.publish-python-dispatch] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-compress-stringify" + +[tasks.publish] +depends-on = ["publish-typescript", "publish-python-wasi", "publish-python-emscripten", "publish-python-dispatch"] +description = "Synchronize package versions" [feature.python.dependencies] pytest = ">=8.3.3,<9" -pip = ">=24.2,<25" [feature.python.pypi-dependencies] hatch = ">=1.13.0, <2" @@ -34,30 +91,47 @@ cwd = "python/itkwasm-compress-stringify-wasi" description = "Run tests for itkwasm-compress-stringify-wasi" [feature.python.tasks.download-pyodide] -cmd = "curl -L https://github.com/pyodide/pyodide/releases/download/0.26.3/pyodide-0.26.3.tar.bz2 -o pyodide.tar.bz2 && tar xjf pyodide.tar.bz2 && rm pyodide.tar.bz2" +cmd = '''curl -L https://github.com/pyodide/pyodide/releases/download/0.26.3/pyodide-0.26.3.tar.bz2 -o pyodide.tar.bz2 && + tar xjf pyodide.tar.bz2 && + rm pyodide.tar.bz2''' outputs = ["pyodide"] description = "Download Pyodide" [feature.python.tasks.test-emscripten] -cmd = "mkdir -p dist/pyodide && cp -r ../../pyodide dist/ && hatch build -t wheel ./dist/pyodide/ && pytest --dist-dir=./dist/pyodide --rt=chrome" +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' cwd = "python/itkwasm-compress-stringify-emscripten" depends-on = ["download-pyodide"] description = "Run tests for itkwasm-compress-stringify-emscripten" [feature.python.tasks.serve-emscripten] -cmd = "mkdir -p dist/pyodide && cp -r ../../pyodide dist/ && hatch build -t wheel ./dist/pyodide/ && echo \"\nVisit http://localhost:8877/console.html\n\" && python -m http.server --directory=./dist/pyodide 8877" +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' cwd = "python/itkwasm-compress-stringify-emscripten" depends-on = ["download-pyodide"] description = "Serve itkwasm-compress-stringify-emscripten for development" [feature.python.tasks.test-dispatch] -cmd = "mkdir -p dist/pyodide && cp -r ../../pyodide dist/ && hatch build -t wheel ./dist/pyodide/ && pytest --dist-dir=./dist/pyodide --rt=chrome" +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + cp ../itkwasm-compress-stringify-emscripten/dist/pyodide/itkwasm_compress_stringify_emscripten*.whl ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' cwd = "python/itkwasm-compress-stringify" depends-on = ["download-pyodide"] description = "Run tests for itkwasm-compress-stringify" [feature.python.tasks.serve-dispatch] -cmd = "mkdir -p dist/pyodide && cp -r ../../pyodide dist/ && hatch build -t wheel ./dist/pyodide/ && echo \"\nVisit http://localhost:8877/console.html\n\" && python -m http.server --directory=./dist/pyodide 8877" +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' cwd = "python/itkwasm-compress-stringify" depends-on = ["download-pyodide"] description = "Serve itkwasm-compress-stringify for development" diff --git a/packages/compress-stringify/typescript/package.json b/packages/compress-stringify/typescript/package.json index 6328d0b51..d2c27cf56 100644 --- a/packages/compress-stringify/typescript/package.json +++ b/packages/compress-stringify/typescript/package.json @@ -1,7 +1,6 @@ { "name": "@itk-wasm/compress-stringify", "version": "3.3.0", - "packageManager": "pnpm@9.6.0", "description": "Zstandard compression and decompression and base64 encoding and decoding in WebAssembly.", "type": "module", "module": "./dist/index.js", From cc26adb780f2308181805fd3844bafe4aa335885 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 22:02:58 -0400 Subject: [PATCH 19/39] chore(compress-stringify): bump version to 3.3.1 --- .../itkwasm_compress_stringify_emscripten/_version.py | 2 +- .../itkwasm_compress_stringify_emscripten/js_package.py | 2 +- .../itkwasm_compress_stringify_wasi/_version.py | 2 +- .../itkwasm_compress_stringify/_version.py | 2 +- packages/compress-stringify/typescript/package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/_version.py b/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/_version.py index 88c513ea3..ff0416876 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/_version.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/_version.py @@ -1 +1 @@ -__version__ = "3.3.0" +__version__ = "3.3.1" diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/js_package.py b/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/js_package.py index 610eca998..2c6957e5a 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/js_package.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIFV0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgTnQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlVdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIFR0PSIzLjMuMCIsTkE9VHQ7dmFyIEd0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0seT1HdDt2YXIgUHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGs9UHQ7ZnVuY3Rpb24gTHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIHkuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSB5LkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIHkuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIHkuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSB5LlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSB5LkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgeS5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSB5LkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIGsuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2Ugay5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIHc9THQ7dmFyIHh0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sRz14dDt2YXIgVEE9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHQ9eS5VSW50OCxyPUcuU2NhbGFyLG89MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9dCx0aGlzLnBpeGVsVHlwZT1yLHRoaXMuY29tcG9uZW50cz1vfX0sdWU9VEE7ZnVuY3Rpb24gT3QoQSxlLHQscixvKXtBW3IrdCplXT1vfXZhciBmZT1PdDt2YXIgR0E9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IHVlKXt0aGlzLmltYWdlVHlwZT1lO2xldCB0PWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheSh0KSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkodCksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheSh0KnQpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCByPTA7cjx0O3IrKylmZSh0aGlzLmRpcmVjdGlvbix0LHIsciwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHQpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LFBBPUdBO3ZhciBMQT1jbGFzc3tkaW1lbnNpb247cG9pbnRDb21wb25lbnRUeXBlO3BvaW50UGl4ZWxDb21wb25lbnRUeXBlO3BvaW50UGl4ZWxUeXBlO3BvaW50UGl4ZWxDb21wb25lbnRzO2NlbGxDb21wb25lbnRUeXBlO2NlbGxQaXhlbENvbXBvbmVudFR5cGU7Y2VsbFBpeGVsVHlwZTtjZWxsUGl4ZWxDb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PWsuRmxvYXQzMixyPWsuRmxvYXQzMixvPUcuU2NhbGFyLG49MSxpPXkuSW50MzIsZz1rLkZsb2F0MzIsbD1HLlNjYWxhcixCPTEpe3RoaXMuZGltZW5zaW9uPWUsdGhpcy5wb2ludENvbXBvbmVudFR5cGU9dCx0aGlzLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlPXIsdGhpcy5wb2ludFBpeGVsVHlwZT1vLHRoaXMucG9pbnRQaXhlbENvbXBvbmVudHM9bix0aGlzLmNlbGxDb21wb25lbnRUeXBlPWksdGhpcy5jZWxsUGl4ZWxDb21wb25lbnRUeXBlPWcsdGhpcy5jZWxsUGl4ZWxUeXBlPWwsdGhpcy5jZWxsUGl4ZWxDb21wb25lbnRzPUJ9fSxwZT1MQTt2YXIgeEE9Y2xhc3N7bWVzaFR5cGU7bmFtZT0iTWVzaCI7bnVtYmVyT2ZQb2ludHM7cG9pbnRzO251bWJlck9mUG9pbnRQaXhlbHM7cG9pbnREYXRhO251bWJlck9mQ2VsbHM7Y2VsbHM7Y2VsbEJ1ZmZlclNpemU7bnVtYmVyT2ZDZWxsUGl4ZWxzO2NlbGxEYXRhO2NvbnN0cnVjdG9yKGU9bmV3IHBlKXt0aGlzLm1lc2hUeXBlPWUsdGhpcy5uYW1lPSJNZXNoIix0aGlzLm51bWJlck9mUG9pbnRzPTAsdGhpcy5wb2ludHM9bnVsbCx0aGlzLm51bWJlck9mUG9pbnRQaXhlbHM9MCx0aGlzLnBvaW50RGF0YT1udWxsLHRoaXMubnVtYmVyT2ZDZWxscz0wLHRoaXMuY2VsbEJ1ZmZlclNpemU9MCx0aGlzLmNlbGxzPW51bGwsdGhpcy5udW1iZXJPZkNlbGxQaXhlbHM9MCx0aGlzLmNlbGxEYXRhPW51bGx9fSxPQT14QTt2YXIgSkE9Y2xhc3N7cG9pbnRQaXhlbENvbXBvbmVudFR5cGU7cG9pbnRQaXhlbFR5cGU7cG9pbnRQaXhlbENvbXBvbmVudHM7Y2VsbFBpeGVsQ29tcG9uZW50VHlwZTtjZWxsUGl4ZWxUeXBlO2NlbGxQaXhlbENvbXBvbmVudHM7Y29uc3RydWN0b3IoZT1rLkZsb2F0MzIsdD1HLlNjYWxhcixyPTEsbz1rLkZsb2F0MzIsbj1HLlNjYWxhcixpPTEpe3RoaXMucG9pbnRQaXhlbENvbXBvbmVudFR5cGU9ZSx0aGlzLnBvaW50UGl4ZWxUeXBlPXQsdGhpcy5wb2ludFBpeGVsQ29tcG9uZW50cz1yLHRoaXMuY2VsbFBpeGVsQ29tcG9uZW50VHlwZT1vLHRoaXMuY2VsbFBpeGVsVHlwZT1uLHRoaXMuY2VsbFBpeGVsQ29tcG9uZW50cz1pfX0sZGU9SkE7dmFyIE1BPWNsYXNze3BvbHlEYXRhVHlwZTtuYW1lPSJQb2x5RGF0YSI7bnVtYmVyT2ZQb2ludHM7cG9pbnRzO3ZlcnRpY2VzQnVmZmVyU2l6ZTt2ZXJ0aWNlcztsaW5lc0J1ZmZlclNpemU7bGluZXM7cG9seWdvbnNCdWZmZXJTaXplO3BvbHlnb25zO3RyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTt0cmlhbmdsZVN0cmlwcztudW1iZXJPZlBvaW50UGl4ZWxzO3BvaW50RGF0YTtudW1iZXJPZkNlbGxQaXhlbHM7Y2VsbERhdGE7Y29uc3RydWN0b3IoZT1uZXcgZGUpe3RoaXMucG9seURhdGFUeXBlPWUsdGhpcy5wb2x5RGF0YVR5cGU9ZSx0aGlzLm5hbWU9IlBvbHlEYXRhIix0aGlzLm51bWJlck9mUG9pbnRzPTAsdGhpcy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSx0aGlzLnZlcnRpY2VzQnVmZmVyU2l6ZT0wLHRoaXMudmVydGljZXM9bnVsbCx0aGlzLmxpbmVzQnVmZmVyU2l6ZT0wLHRoaXMubGluZXM9bnVsbCx0aGlzLnBvbHlnb25zQnVmZmVyU2l6ZT0wLHRoaXMucG9seWdvbnM9bnVsbCx0aGlzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT0wLHRoaXMudHJpYW5nbGVTdHJpcHM9bnVsbCx0aGlzLm51bWJlck9mUG9pbnRQaXhlbHM9MCx0aGlzLnBvaW50RGF0YT1udWxsLHRoaXMubnVtYmVyT2ZDZWxsUGl4ZWxzPTAsdGhpcy5jZWxsRGF0YT1udWxsfX0sSEE9TUE7dmFyIEp0PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0scD1KdDt2YXIgeWU9U3ltYm9sKCJDb21saW5rLnByb3h5IiksTXQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksS0E9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLFlBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxJQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksaGU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsSHQ9e2NhbkhhbmRsZTpBPT5oZShBKSYmQVt5ZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gRGUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLFdBKEEpfX0sWXQ9e2NhbkhhbmRsZTpBPT5oZShBKSYmSUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LHdlPW5ldyBNYXAoW1sicHJveHkiLEh0XSxbInRocm93IixZdF1dKTtmdW5jdGlvbiBxdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRGUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG8pe2lmKCFvfHwhby5kYXRhKXJldHVybjtpZighcXQodCxvLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7by5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6bix0eXBlOmkscGF0aDpnfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxvLmRhdGEpLGw9KG8uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoTyksQjt0cnl7bGV0IEk9Zy5zbGljZSgwLC0xKS5yZWR1Y2UoKFEsQyk9PlFbQ10sQSkscz1nLnJlZHVjZSgoUSxDKT0+UVtDXSxBKTtzd2l0Y2goaSl7Y2FzZSJHRVQiOkI9czticmVhaztjYXNlIlNFVCI6SVtnLnNsaWNlKC0xKVswXV09TyhvLmRhdGEudmFsdWUpLEI9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6Qj1zLmFwcGx5KEksbCk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgUT1uZXcgcyguLi5sKTtCPV90KFEpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6USxwb3J0MjpDfT1uZXcgTWVzc2FnZUNoYW5uZWw7RGUoQSxDKSxCPXZBKFEsW1FdKX1icmVhaztjYXNlIlJFTEVBU0UiOkI9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChJKXtCPXt2YWx1ZTpJLFtJQV06MH19UHJvbWlzZS5yZXNvbHZlKEIpLmNhdGNoKEk9Pih7dmFsdWU6SSxbSUFdOjB9KSkudGhlbihJPT57bGV0W3MsUV09QkEoSSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm59KSxRKSxpPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxTZShlKSxZQSBpbiBBJiZ0eXBlb2YgQVtZQV09PSJmdW5jdGlvbiImJkFbWUFdKCkpfSkuY2F0Y2goST0+e2xldFtzLFFdPUJBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbSUFdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7aWQ6bn0pLFEpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gS3QoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gU2UoQSl7S3QoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBXQShBLGUpe3JldHVybiBxQShBLFtdLGUpfWZ1bmN0aW9uIGFBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBiZShBKXtyZXR1cm4gTShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntTZShBKX0pfXZhciBnQT1uZXcgV2Vha01hcCxDQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oZ0EuZ2V0KEEpfHwwKS0xO2dBLnNldChBLGUpLGU9PT0wJiZiZShBKX0pO2Z1bmN0aW9uIFd0KEEsZSl7bGV0IHQ9KGdBLmdldChlKXx8MCkrMTtnQS5zZXQoZSx0KSxDQSYmQ0EucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIHZ0KEEpe0NBJiZDQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIHFBKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbz1uZXcgUHJveHkodCx7Z2V0KG4saSl7aWYoYUEociksaT09PUtBKXJldHVybigpPT57dnQobyksYmUoQSkscj0hMH07aWYoaT09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtsZXQgZz1NKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChsPT5sLnRvU3RyaW5nKCkpfSkudGhlbihPKTtyZXR1cm4gZy50aGVuLmJpbmQoZyl9cmV0dXJuIHFBKEEsWy4uLmUsaV0pfSxzZXQobixpLGcpe2FBKHIpO2xldFtsLEJdPUJBKGcpO3JldHVybiBNKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxpXS5tYXAoST0+SS50b1N0cmluZygpKSx2YWx1ZTpsfSxCKS50aGVuKE8pfSxhcHBseShuLGksZyl7YUEocik7bGV0IGw9ZVtlLmxlbmd0aC0xXTtpZihsPT09TXQpcmV0dXJuIE0oQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihPKTtpZihsPT09ImJpbmQiKXJldHVybiBxQShBLGUuc2xpY2UoMCwtMSkpO2xldFtCLEldPW1lKGcpO3JldHVybiBNKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKHM9PnMudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkJ9LEkpLnRoZW4oTyl9LGNvbnN0cnVjdChuLGkpe2FBKHIpO2xldFtnLGxdPW1lKGkpO3JldHVybiBNKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChCPT5CLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpnfSxsKS50aGVuKE8pfX0pO3JldHVybiBXdChvLEEpLG99ZnVuY3Rpb24ganQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gbWUoQSl7bGV0IGU9QS5tYXAoQkEpO3JldHVybltlLm1hcCh0PT50WzBdKSxqdChlLm1hcCh0PT50WzFdKSldfXZhciBrZT1uZXcgV2Vha01hcDtmdW5jdGlvbiB2QShBLGUpe3JldHVybiBrZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIF90KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1t5ZV06ITB9KX1mdW5jdGlvbiBCQShBKXtmb3IobGV0W2UsdF1vZiB3ZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isb109dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sb119cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGtlLmdldChBKXx8W11dfWZ1bmN0aW9uIE8oQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gd2UuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBNKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBvPXp0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBuKGkpeyFpLmRhdGF8fCFpLmRhdGEuaWR8fGkuZGF0YS5pZCE9PW98fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG4pLHIoaS5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpvfSxlKSx0KX0pfWZ1bmN0aW9uIHp0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBaKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6VnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOnpBfT1PYmplY3QsY0E9KEE9PmU9PntsZXQgdD1WdC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTj1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+Y0EoZSk9PT1BKSxFQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6SH09QXJyYXksWD1FQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gWnQoQSl7cmV0dXJuIEEhPT1udWxsJiYhWChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFYKEEuY29uc3RydWN0b3IpJiZSKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBOZT1OKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIFh0KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmTmUoQS5idWZmZXIpLGV9dmFyICR0PUVBKCJzdHJpbmciKSxSPUVBKCJmdW5jdGlvbiIpLFRlPUVBKCJudW1iZXIiKSxRQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLEFyPUE9PkE9PT0hMHx8QT09PSExLGxBPUE9PntpZihjQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPXpBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LGVyPU4oIkRhdGUiKSx0cj1OKCJGaWxlIikscnI9TigiQmxvYiIpLG9yPU4oIkZpbGVMaXN0IiksbnI9QT0+UUEoQSkmJlIoQS5waXBlKSxpcj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8UihBLmFwcGVuZCkmJigoZT1jQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJlIoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sc3I9TigiVVJMU2VhcmNoUGFyYW1zIiksYXI9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uICQoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixvO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxIKEEpKWZvcihyPTAsbz1BLmxlbmd0aDtyPG87cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBuPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksaT1uLmxlbmd0aCxnO2ZvcihyPTA7cjxpO3IrKylnPW5bcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBHZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsbztmb3IoO3ItLSA+MDspaWYobz10W3JdLGU9PT1vLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG87cmV0dXJuIG51bGx9dmFyIFBlPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsTGU9QT0+IVgoQSkmJkEhPT1QZTtmdW5jdGlvbiBfQSgpe2xldHtjYXNlbGVzczpBfT1MZSh0aGlzKSYmdGhpc3x8e30sZT17fSx0PShyLG8pPT57bGV0IG49QSYmR2UoZSxvKXx8bztsQShlW25dKSYmbEEocik/ZVtuXT1fQShlW25dLHIpOmxBKHIpP2Vbbl09X0Eoe30scik6SChyKT9lW25dPXIuc2xpY2UoKTplW25dPXJ9O2ZvcihsZXQgcj0wLG89YXJndW1lbnRzLmxlbmd0aDtyPG87cisrKWFyZ3VtZW50c1tyXSYmJChhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIElyPShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PigkKGUsKG8sbik9Pnt0JiZSKG8pP0Fbbl09WihvLHQpOkFbbl09b30se2FsbE93bktleXM6cn0pLEEpLGdyPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksQ3I9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sQnI9KEEsZSx0LHIpPT57bGV0IG8sbixpLGc9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLG49by5sZW5ndGg7bi0tID4wOylpPW9bbl0sKCFyfHxyKGksQSxlKSkmJiFnW2ldJiYoZVtpXT1BW2ldLGdbaV09ITApO0E9dCE9PSExJiZ6QShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0sbHI9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxjcj1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoSChBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighVGUoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LEVyPShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ6QShVaW50OEFycmF5KSksUXI9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG87Zm9yKDsobz1yLm5leHQoKSkmJiFvLmRvbmU7KXtsZXQgbj1vLnZhbHVlO2UuY2FsbChBLG5bMF0sblsxXSl9fSx1cj0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxmcj1OKCJIVE1MRm9ybUVsZW1lbnQiKSxwcj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbyl7cmV0dXJuIHIudG9VcHBlckNhc2UoKStvfSksRmU9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLGRyPU4oIlJlZ0V4cCIpLHhlPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTskKHQsKG8sbik9PntsZXQgaTsoaT1lKG8sbixBKSkhPT0hMSYmKHJbbl09aXx8byl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxtcj1BPT57eGUoQSwoZSx0KT0+e2lmKFIoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoUihyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSx5cj0oQSxlKT0+e2xldCB0PXt9LHI9bz0+e28uZm9yRWFjaChuPT57dFtuXT0hMH0pfTtyZXR1cm4gSChBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxocj0oKT0+e30sd3I9KEEsZSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOmUpLGpBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsVWU9IjAxMjM0NTY3ODkiLE9lPXtESUdJVDpVZSxBTFBIQTpqQSxBTFBIQV9ESUdJVDpqQStqQS50b1VwcGVyQ2FzZSgpK1VlfSxEcj0oQT0xNixlPU9lLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6cn09ZTtmb3IoO0EtLTspdCs9ZVtNYXRoLnJhbmRvbSgpKnJ8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIFNyKEEpe3JldHVybiEhKEEmJlIoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBicj1BPT57bGV0IGU9bmV3IEFycmF5KDEwKSx0PShyLG8pPT57aWYoUUEocikpe2lmKGUuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXtlW29dPXI7bGV0IG49SChyKT9bXTp7fTtyZXR1cm4gJChyLChpLGcpPT57bGV0IGw9dChpLG8rMSk7IVgobCkmJihuW2ddPWwpfSksZVtvXT12b2lkIDAsbn19cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LGtyPU4oIkFzeW5jRnVuY3Rpb24iKSxScj1BPT5BJiYoUUEoQSl8fFIoQSkpJiZSKEEudGhlbikmJlIoQS5jYXRjaCksYT17aXNBcnJheTpILGlzQXJyYXlCdWZmZXI6TmUsaXNCdWZmZXI6WnQsaXNGb3JtRGF0YTppcixpc0FycmF5QnVmZmVyVmlldzpYdCxpc1N0cmluZzokdCxpc051bWJlcjpUZSxpc0Jvb2xlYW46QXIsaXNPYmplY3Q6UUEsaXNQbGFpbk9iamVjdDpsQSxpc1VuZGVmaW5lZDpYLGlzRGF0ZTplcixpc0ZpbGU6dHIsaXNCbG9iOnJyLGlzUmVnRXhwOmRyLGlzRnVuY3Rpb246Uixpc1N0cmVhbTpucixpc1VSTFNlYXJjaFBhcmFtczpzcixpc1R5cGVkQXJyYXk6RXIsaXNGaWxlTGlzdDpvcixmb3JFYWNoOiQsbWVyZ2U6X0EsZXh0ZW5kOklyLHRyaW06YXIsc3RyaXBCT006Z3IsaW5oZXJpdHM6Q3IsdG9GbGF0T2JqZWN0OkJyLGtpbmRPZjpjQSxraW5kT2ZUZXN0Ok4sZW5kc1dpdGg6bHIsdG9BcnJheTpjcixmb3JFYWNoRW50cnk6UXIsbWF0Y2hBbGw6dXIsaXNIVE1MRm9ybTpmcixoYXNPd25Qcm9wZXJ0eTpGZSxoYXNPd25Qcm9wOkZlLHJlZHVjZURlc2NyaXB0b3JzOnhlLGZyZWV6ZU1ldGhvZHM6bXIsdG9PYmplY3RTZXQ6eXIsdG9DYW1lbENhc2U6cHIsbm9vcDpocix0b0Zpbml0ZU51bWJlcjp3cixmaW5kS2V5OkdlLGdsb2JhbDpQZSxpc0NvbnRleHREZWZpbmVkOkxlLEFMUEhBQkVUOk9lLGdlbmVyYXRlU3RyaW5nOkRyLGlzU3BlY0NvbXBsaWFudEZvcm06U3IsdG9KU09OT2JqZWN0OmJyLGlzQXN5bmNGbjprcixpc1RoZW5hYmxlOlJyfTtmdW5jdGlvbiBZKEEsZSx0LHIsbyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG8mJih0aGlzLnJlc3BvbnNlPW8pfWEuaW5oZXJpdHMoWSxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmEudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIEplPVkucHJvdG90eXBlLE1lPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e01lW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFksTWUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtZLmZyb209KEEsZSx0LHIsbyxuKT0+e2xldCBpPU9iamVjdC5jcmVhdGUoSmUpO3JldHVybiBhLnRvRmxhdE9iamVjdChBLGksZnVuY3Rpb24obCl7cmV0dXJuIGwhPT1FcnJvci5wcm90b3R5cGV9LGc9PmchPT0iaXNBeGlvc0Vycm9yIiksWS5jYWxsKGksQS5tZXNzYWdlLGUsdCxyLG8pLGkuY2F1c2U9QSxpLm5hbWU9QS5uYW1lLG4mJk9iamVjdC5hc3NpZ24oaSxuKSxpfTt2YXIgZj1ZO3ZhciB1QT1udWxsO2Z1bmN0aW9uIFZBKEEpe3JldHVybiBhLmlzUGxhaW5PYmplY3QoQSl8fGEuaXNBcnJheShBKX1mdW5jdGlvbiBZZShBKXtyZXR1cm4gYS5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBIZShBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG8sbil7cmV0dXJuIG89WWUobyksIXQmJm4/IlsiK28rIl0iOm99KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIEZyKEEpe3JldHVybiBhLmlzQXJyYXkoQSkmJiFBLnNvbWUoVkEpfXZhciBVcj1hLnRvRmxhdE9iamVjdChhLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gTnIoQSxlLHQpe2lmKCFhLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KHVBfHxGb3JtRGF0YSksdD1hLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oRSx1KXtyZXR1cm4hYS5pc1VuZGVmaW5lZCh1W0VdKX0pO2xldCByPXQubWV0YVRva2VucyxvPXQudmlzaXRvcnx8SSxuPXQuZG90cyxpPXQuaW5kZXhlcyxsPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmEuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighYS5pc0Z1bmN0aW9uKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gQihjKXtpZihjPT09bnVsbClyZXR1cm4iIjtpZihhLmlzRGF0ZShjKSlyZXR1cm4gYy50b0lTT1N0cmluZygpO2lmKCFsJiZhLmlzQmxvYihjKSl0aHJvdyBuZXcgZigiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gYS5pc0FycmF5QnVmZmVyKGMpfHxhLmlzVHlwZWRBcnJheShjKT9sJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbY10pOkJ1ZmZlci5mcm9tKGMpOmN9ZnVuY3Rpb24gSShjLEUsdSl7bGV0IGQ9YztpZihjJiYhdSYmdHlwZW9mIGM9PSJvYmplY3QiKXtpZihhLmVuZHNXaXRoKEUsInt9IikpRT1yP0U6RS5zbGljZSgwLC0yKSxjPUpTT04uc3RyaW5naWZ5KGMpO2Vsc2UgaWYoYS5pc0FycmF5KGMpJiZGcihjKXx8KGEuaXNGaWxlTGlzdChjKXx8YS5lbmRzV2l0aChFLCJbXSIpKSYmKGQ9YS50b0FycmF5KGMpKSlyZXR1cm4gRT1ZZShFKSxkLmZvckVhY2goZnVuY3Rpb24oVSxGdCl7IShhLmlzVW5kZWZpbmVkKFUpfHxVPT09bnVsbCkmJmUuYXBwZW5kKGk9PT0hMD9IZShbRV0sRnQsbik6aT09PW51bGw/RTpFKyJbXSIsQihVKSl9KSwhMX1yZXR1cm4gVkEoYyk/ITA6KGUuYXBwZW5kKEhlKHUsRSxuKSxCKGMpKSwhMSl9bGV0IHM9W10sUT1PYmplY3QuYXNzaWduKFVyLHtkZWZhdWx0VmlzaXRvcjpJLGNvbnZlcnRWYWx1ZTpCLGlzVmlzaXRhYmxlOlZBfSk7ZnVuY3Rpb24gQyhjLEUpe2lmKCFhLmlzVW5kZWZpbmVkKGMpKXtpZihzLmluZGV4T2YoYykhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrRS5qb2luKCIuIikpO3MucHVzaChjKSxhLmZvckVhY2goYyxmdW5jdGlvbihkLEYpeyghKGEuaXNVbmRlZmluZWQoZCl8fGQ9PT1udWxsKSYmby5jYWxsKGUsZCxhLmlzU3RyaW5nKEYpP0YudHJpbSgpOkYsRSxRKSk9PT0hMCYmQyhkLEU/RS5jb25jYXQoRik6W0ZdKX0pLHMucG9wKCl9fWlmKCFhLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gQyhBKSxlfXZhciBQPU5yO2Z1bmN0aW9uIHFlKEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gS2UoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZQKEEsdGhpcyxlKX12YXIgV2U9S2UucHJvdG90eXBlO1dlLmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtXZS50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLHFlKX06cWU7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gdChvWzBdKSsiPSIrdChvWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIGZBPUtlO2Z1bmN0aW9uIFRyKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIEFBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8VHIsbz10JiZ0LnNlcmlhbGl6ZSxuO2lmKG8/bj1vKGUsdCk6bj1hLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgZkEoZSx0KS50b1N0cmluZyhyKSxuKXtsZXQgaT1BLmluZGV4T2YoIiMiKTtpIT09LTEmJihBPUEuc2xpY2UoMCxpKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrbn1yZXR1cm4gQX12YXIgWkE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe2EuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxYQT1aQTt2YXIgcEE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciB2ZT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6ZkE7dmFyIGplPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgX2U9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgemU9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6dmUsRm9ybURhdGE6amUsQmxvYjpfZX0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciAkQT17fTtOdCgkQSx7aGFzQnJvd3NlckVudjooKT0+VmUsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5HcixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PlByfSk7dmFyIFZlPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLEdyPShBPT5WZSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLFByPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgRD17Li4uJEEsLi4uemV9O2Z1bmN0aW9uIEFlKEEsZSl7cmV0dXJuIFAoQSxuZXcgRC5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixvLG4pe3JldHVybiBELmlzTm9kZSYmYS5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOm4uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZSkpfWZ1bmN0aW9uIExyKEEpe3JldHVybiBhLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxBKS5tYXAoZT0+ZVswXT09PSJbXSI/IiI6ZVsxXXx8ZVswXSl9ZnVuY3Rpb24geHIoQSl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhBKSxyLG89dC5sZW5ndGgsbjtmb3Iocj0wO3I8bztyKyspbj10W3JdLGVbbl09QVtuXTtyZXR1cm4gZX1mdW5jdGlvbiBPcihBKXtmdW5jdGlvbiBlKHQscixvLG4pe2xldCBpPXRbbisrXTtpZihpPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IGc9TnVtYmVyLmlzRmluaXRlKCtpKSxsPW4+PXQubGVuZ3RoO3JldHVybiBpPSFpJiZhLmlzQXJyYXkobyk/by5sZW5ndGg6aSxsPyhhLmhhc093blByb3AobyxpKT9vW2ldPVtvW2ldLHJdOm9baV09ciwhZyk6KCghb1tpXXx8IWEuaXNPYmplY3Qob1tpXSkpJiYob1tpXT1bXSksZSh0LHIsb1tpXSxuKSYmYS5pc0FycmF5KG9baV0pJiYob1tpXT14cihvW2ldKSksIWcpfWlmKGEuaXNGb3JtRGF0YShBKSYmYS5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBhLmZvckVhY2hFbnRyeShBLChyLG8pPT57ZShMcihyKSxvLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBkQT1PcjtmdW5jdGlvbiBKcihBLGUsdCl7aWYoYS5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKEEpLGEudHJpbShBKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgZWU9e3RyYW5zaXRpb25hbDpwQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixvPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG49YS5pc09iamVjdChlKTtpZihuJiZhLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSksYS5pc0Zvcm1EYXRhKGUpKXJldHVybiBvP0pTT04uc3RyaW5naWZ5KGRBKGUpKTplO2lmKGEuaXNBcnJheUJ1ZmZlcihlKXx8YS5pc0J1ZmZlcihlKXx8YS5pc1N0cmVhbShlKXx8YS5pc0ZpbGUoZSl8fGEuaXNCbG9iKGUpKXJldHVybiBlO2lmKGEuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKGEuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKG4pe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIEFlKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1hLmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGw9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBQKGc/eyJmaWxlc1tdIjplfTplLGwmJm5ldyBsLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gbnx8bz8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLEpyKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxlZS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG89dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoZSYmYS5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bykpe2xldCBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm87dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKGkpdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9mLmZyb20oZyxmLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpELmNsYXNzZXMuRm9ybURhdGEsQmxvYjpELmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTthLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e2VlLmhlYWRlcnNbQV09e319KTt2YXIgcT1lZTt2YXIgTXI9YS50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxaZT1BPT57bGV0IGU9e30sdCxyLG87cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe289aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLG8pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9aS5zdWJzdHJpbmcobysxKS50cmltKCksISghdHx8ZVt0XSYmTXJbdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgWGU9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG1BKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTphLmlzQXJyYXkoQSk/QS5tYXAobUEpOlN0cmluZyhBKX1mdW5jdGlvbiBIcihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgWXI9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gdGUoQSxlLHQscixvKXtpZihhLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYobyYmKGU9dCksISFhLmlzU3RyaW5nKGUpKXtpZihhLmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZihhLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIHFyKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIEtyKEEsZSl7bGV0IHQ9YS50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG8sbixpKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxvLG4saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIEs9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgbz10aGlzO2Z1bmN0aW9uIG4oZyxsLEIpe2xldCBJPWVBKGwpO2lmKCFJKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgcz1hLmZpbmRLZXkobyxJKTsoIXN8fG9bc109PT12b2lkIDB8fEI9PT0hMHx8Qj09PXZvaWQgMCYmb1tzXSE9PSExKSYmKG9bc3x8bF09bUEoZykpfWxldCBpPShnLGwpPT5hLmZvckVhY2goZywoQixJKT0+bihCLEksbCkpO3JldHVybiBhLmlzUGxhaW5PYmplY3QoZSl8fGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2koZSx0KTphLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiFZcihlKT9pKFplKGUpLHQpOmUhPW51bGwmJm4odCxlLHIpLHRoaXN9Z2V0KGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1hLmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgbz10aGlzW3JdO2lmKCF0KXJldHVybiBvO2lmKHQ9PT0hMClyZXR1cm4gSHIobyk7aWYoYS5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxvLHIpO2lmKGEuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhvKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1hLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fHRlKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxvPSExO2Z1bmN0aW9uIG4oaSl7aWYoaT1lQShpKSxpKXtsZXQgZz1hLmZpbmRLZXkocixpKTtnJiYoIXR8fHRlKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLG89ITApfX1yZXR1cm4gYS5pc0FycmF5KGUpP2UuZm9yRWFjaChuKTpuKGUpLG99Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxvPSExO2Zvcig7ci0tOyl7bGV0IG49dFtyXTsoIWV8fHRlKHRoaXMsdGhpc1tuXSxuLGUsITApKSYmKGRlbGV0ZSB0aGlzW25dLG89ITApfXJldHVybiBvfW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIGEuZm9yRWFjaCh0aGlzLChvLG4pPT57bGV0IGk9YS5maW5kS2V5KHIsbik7aWYoaSl7dFtpXT1tQShvKSxkZWxldGUgdFtuXTtyZXR1cm59bGV0IGc9ZT9xcihuKTpTdHJpbmcobikudHJpbSgpO2chPT1uJiZkZWxldGUgdFtuXSx0W2ddPW1BKG8pLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gYS5mb3JFYWNoKHRoaXMsKHIsbyk9PntyIT1udWxsJiZyIT09ITEmJih0W29dPWUmJmEuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG89PnIuc2V0KG8pKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1tYZV09dGhpc1tYZV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxvPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG4oaSl7bGV0IGc9ZUEoaSk7cltnXXx8KEtyKG8saSkscltnXT0hMCl9cmV0dXJuIGEuaXNBcnJheShlKT9lLmZvckVhY2gobik6bihlKSx0aGlzfX07Sy5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7YS5yZWR1Y2VEZXNjcmlwdG9ycyhLLnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTthLmZyZWV6ZU1ldGhvZHMoSyk7dmFyIFM9SztmdW5jdGlvbiB0QShBLGUpe2xldCB0PXRoaXN8fHEscj1lfHx0LG89Uy5mcm9tKHIuaGVhZGVycyksbj1yLmRhdGE7cmV0dXJuIGEuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe249Zy5jYWxsKHQsbixvLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG8ubm9ybWFsaXplKCksbn1mdW5jdGlvbiByQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uICRlKEEsZSx0KXtmLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGYuRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1hLmluaGVyaXRzKCRlLGYse19fQ0FOQ0VMX186ITB9KTt2YXIgTD0kZTtmdW5jdGlvbiByZShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBmKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW2YuRVJSX0JBRF9SRVFVRVNULGYuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIEF0PUQuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLG8sbil7bGV0IGk9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07YS5pc051bWJlcih0KSYmaS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksYS5pc1N0cmluZyhyKSYmaS5wdXNoKCJwYXRoPSIrciksYS5pc1N0cmluZyhvKSYmaS5wdXNoKCJkb21haW49IitvKSxuPT09ITAmJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIG9lKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gbmUoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIG9BKEEsZSl7cmV0dXJuIEEmJiFvZShlKT9uZShBLGUpOmV9dmFyIGV0PUQuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG8obil7bGV0IGk9bjtyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSxpPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1vKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihpKXtsZXQgZz1hLmlzU3RyaW5nKGkpP28oaSk6aTtyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gaWUoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIFdyKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksbz0wLG49MCxpO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24obCl7bGV0IEI9RGF0ZS5ub3coKSxJPXJbbl07aXx8KGk9QiksdFtvXT1sLHJbb109QjtsZXQgcz1uLFE9MDtmb3IoO3MhPT1vOylRKz10W3MrK10scz1zJUE7aWYobz0obysxKSVBLG89PT1uJiYobj0obisxKSVBKSxCLWk8ZSlyZXR1cm47bGV0IEM9SSYmQi1JO3JldHVybiBDP01hdGgucm91bmQoUSoxZTMvQyk6dm9pZCAwfX12YXIgdHQ9V3I7ZnVuY3Rpb24gcnQoQSxlKXtsZXQgdD0wLHI9dHQoNTAsMjUwKTtyZXR1cm4gbz0+e2xldCBuPW8ubG9hZGVkLGk9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLGc9bi10LGw9cihnKSxCPW48PWk7dD1uO2xldCBJPXtsb2FkZWQ6bix0b3RhbDppLHByb2dyZXNzOmk/bi9pOnZvaWQgMCxieXRlczpnLHJhdGU6bHx8dm9pZCAwLGVzdGltYXRlZDpsJiZpJiZCPyhpLW4pL2w6dm9pZCAwLGV2ZW50Om99O0lbZT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKEkpfX12YXIgdnI9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixvdD12ciYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG89QS5kYXRhLG49Uy5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTppLHdpdGhYU1JGVG9rZW46Z309QSxsO2Z1bmN0aW9uIEIoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbCl9bGV0IEk7aWYoYS5pc0Zvcm1EYXRhKG8pKXtpZihELmhhc1N0YW5kYXJkQnJvd3NlckVudnx8RC5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpbi5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoST1uLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtFLC4uLnVdPUk/SS5zcGxpdCgiOyIpLm1hcChkPT5kLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO24uc2V0Q29udGVudFR5cGUoW0V8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi51XS5qb2luKCI7ICIpKX19bGV0IHM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IEU9QS5hdXRoLnVzZXJuYW1lfHwiIix1PUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7bi5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoRSsiOiIrdSkpfWxldCBRPW9BKEEuYmFzZVVSTCxBLnVybCk7cy5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksQUEoUSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIEMoKXtpZighcylyZXR1cm47bGV0IEU9Uy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gcyYmcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksZD17ZGF0YTohaXx8aT09PSJ0ZXh0Inx8aT09PSJqc29uIj9zLnJlc3BvbnNlVGV4dDpzLnJlc3BvbnNlLHN0YXR1czpzLnN0YXR1cyxzdGF0dXNUZXh0OnMuc3RhdHVzVGV4dCxoZWFkZXJzOkUsY29uZmlnOkEscmVxdWVzdDpzfTtyZShmdW5jdGlvbihVKXt0KFUpLEIoKX0sZnVuY3Rpb24oVSl7cihVKSxCKCl9LGQpLHM9bnVsbH1pZigib25sb2FkZW5kImluIHM/cy5vbmxvYWRlbmQ9QzpzLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFzfHxzLnJlYWR5U3RhdGUhPT00fHxzLnN0YXR1cz09PTAmJiEocy5yZXNwb25zZVVSTCYmcy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoQyl9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihyKG5ldyBmKCJSZXF1ZXN0IGFib3J0ZWQiLGYuRUNPTk5BQk9SVEVELEEscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IGYoIk5ldHdvcmsgRXJyb3IiLGYuRVJSX05FVFdPUkssQSxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixkPUEudHJhbnNpdGlvbmFsfHxwQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgZih1LGQuY2xhcmlmeVRpbWVvdXRFcnJvcj9mLkVUSU1FRE9VVDpmLkVDT05OQUJPUlRFRCxBLHMpKSxzPW51bGx9LEQuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoZyYmYS5pc0Z1bmN0aW9uKGcpJiYoZz1nKEEpKSxnfHxnIT09ITEmJmV0KFEpKSl7bGV0IEU9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmQXQucmVhZChBLnhzcmZDb29raWVOYW1lKTtFJiZuLnNldChBLnhzcmZIZWFkZXJOYW1lLEUpfW89PT12b2lkIDAmJm4uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gcyYmYS5mb3JFYWNoKG4udG9KU09OKCksZnVuY3Rpb24odSxkKXtzLnNldFJlcXVlc3RIZWFkZXIoZCx1KX0pLGEuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwocy53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksaSYmaSE9PSJqc29uIiYmKHMucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJnMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHJ0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmcy51cGxvYWQmJnMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixydChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYobD1FPT57cyYmKHIoIUV8fEUudHlwZT9uZXcgTChudWxsLEEscyk6RSkscy5hYm9ydCgpLHM9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9sKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpKSk7bGV0IGM9aWUoUSk7aWYoYyYmRC5wcm90b2NvbHMuaW5kZXhPZihjKT09PS0xKXtyKG5ldyBmKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2MrIjoiLGYuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59cy5zZW5kKG98fG51bGwpfSl9O3ZhciBzZT17aHR0cDp1QSx4aHI6b3R9O2EuZm9yRWFjaChzZSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBudD1BPT5gLSAke0F9YCxqcj1BPT5hLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEseUE9e2dldEFkYXB0ZXI6QT0+e0E9YS5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsbz17fTtmb3IobGV0IG49MDtuPGU7bisrKXt0PUFbbl07bGV0IGk7aWYocj10LCFqcih0KSYmKHI9c2VbKGk9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgZihgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHIpYnJlYWs7b1tpfHwiIyIrbl09cn1pZighcil7bGV0IG49T2JqZWN0LmVudHJpZXMobykubWFwKChbZyxsXSk9PmBhZGFwdGVyICR7Z30gYCsobD09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9uLmxlbmd0aD4xP2BzaW5jZSA6CmArbi5tYXAobnQpLmpvaW4oYApgKToiICIrbnQoblswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgZigiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczpzZX07ZnVuY3Rpb24gYWUoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEwobnVsbCxBKX1mdW5jdGlvbiBoQShBKXtyZXR1cm4gYWUoQSksQS5oZWFkZXJzPVMuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSkseUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fHEuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gYWUoQSksci5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz1TLmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gckEocil8fChhZShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz1TLmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIGl0PUE9PkEgaW5zdGFuY2VvZiBTP3suLi5BfTpBO2Z1bmN0aW9uIFQoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoQixJLHMpe3JldHVybiBhLmlzUGxhaW5PYmplY3QoQikmJmEuaXNQbGFpbk9iamVjdChJKT9hLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOnN9LEIsSSk6YS5pc1BsYWluT2JqZWN0KEkpP2EubWVyZ2Uoe30sSSk6YS5pc0FycmF5KEkpP0kuc2xpY2UoKTpJfWZ1bmN0aW9uIG8oQixJLHMpe2lmKGEuaXNVbmRlZmluZWQoSSkpe2lmKCFhLmlzVW5kZWZpbmVkKEIpKXJldHVybiByKHZvaWQgMCxCLHMpfWVsc2UgcmV0dXJuIHIoQixJLHMpfWZ1bmN0aW9uIG4oQixJKXtpZighYS5pc1VuZGVmaW5lZChJKSlyZXR1cm4gcih2b2lkIDAsSSl9ZnVuY3Rpb24gaShCLEkpe2lmKGEuaXNVbmRlZmluZWQoSSkpe2lmKCFhLmlzVW5kZWZpbmVkKEIpKXJldHVybiByKHZvaWQgMCxCKX1lbHNlIHJldHVybiByKHZvaWQgMCxJKX1mdW5jdGlvbiBnKEIsSSxzKXtpZihzIGluIGUpcmV0dXJuIHIoQixJKTtpZihzIGluIEEpcmV0dXJuIHIodm9pZCAwLEIpfWxldCBsPXt1cmw6bixtZXRob2Q6bixkYXRhOm4sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooQixJKT0+byhpdChCKSxpdChJKSwhMCl9O3JldHVybiBhLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihJKXtsZXQgcz1sW0ldfHxvLFE9cyhBW0ldLGVbSV0sSSk7YS5pc1VuZGVmaW5lZChRKSYmcyE9PWd8fCh0W0ldPVEpfSksdH12YXIgd0E9IjEuNi44Ijt2YXIgSWU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57SWVbQV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIHN0PXt9O0llLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbyhuLGkpe3JldHVybiJbQXhpb3MgdiIrd0ErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIituKyInIitpKyhyPyIuICIrcjoiIil9cmV0dXJuKG4saSxnKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgZihvKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLGYuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhc3RbaV0mJihzdFtpXT0hMCxjb25zb2xlLndhcm4obyhpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShuLGksZyk6ITB9fTtmdW5jdGlvbiBfcihBLGUsdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBmKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixmLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhBKSxvPXIubGVuZ3RoO2Zvcig7by0tID4wOyl7bGV0IG49cltvXSxpPWVbbl07aWYoaSl7bGV0IGc9QVtuXSxsPWc9PT12b2lkIDB8fGkoZyxuLEEpO2lmKGwhPT0hMCl0aHJvdyBuZXcgZigib3B0aW9uICIrbisiIG11c3QgYmUgIitsLGYuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgZigiVW5rbm93biBvcHRpb24gIituLGYuRVJSX0JBRF9PUFRJT04pfX12YXIgREE9e2Fzc2VydE9wdGlvbnM6X3IsdmFsaWRhdG9yczpJZX07dmFyIHg9REEudmFsaWRhdG9ycyxXPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgWEEscmVzcG9uc2U6bmV3IFhBfX1hc3luYyByZXF1ZXN0KGUsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvPXt9KTpvPW5ldyBFcnJvcjtsZXQgbj1vLnN0YWNrP28uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP24mJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgobi5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmArbik6ci5zdGFjaz1ufXRocm93IHJ9fV9yZXF1ZXN0KGUsdCl7dHlwZW9mIGU9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPWUpOnQ9ZXx8e30sdD1UKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6byxoZWFkZXJzOm59PXQ7ciE9PXZvaWQgMCYmREEuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzp4LnRyYW5zaXRpb25hbCh4LmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOngudHJhbnNpdGlvbmFsKHguYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjp4LnRyYW5zaXRpb25hbCh4LmJvb2xlYW4pfSwhMSksbyE9bnVsbCYmKGEuaXNGdW5jdGlvbihvKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpvfTpEQS5hc3NlcnRPcHRpb25zKG8se2VuY29kZTp4LmZ1bmN0aW9uLHNlcmlhbGl6ZTp4LmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPW4mJmEubWVyZ2Uobi5jb21tb24sblt0Lm1ldGhvZF0pO24mJmEuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxjPT57ZGVsZXRlIG5bY119KSx0LmhlYWRlcnM9Uy5jb25jYXQoaSxuKTtsZXQgZz1bXSxsPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihFKXt0eXBlb2YgRS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZFLnJ1bldoZW4odCk9PT0hMXx8KGw9bCYmRS5zeW5jaHJvbm91cyxnLnVuc2hpZnQoRS5mdWxmaWxsZWQsRS5yZWplY3RlZCkpfSk7bGV0IEI9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihFKXtCLnB1c2goRS5mdWxmaWxsZWQsRS5yZWplY3RlZCl9KTtsZXQgSSxzPTAsUTtpZighbCl7bGV0IGM9W2hBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoYy51bnNoaWZ0LmFwcGx5KGMsZyksYy5wdXNoLmFwcGx5KGMsQiksUT1jLmxlbmd0aCxJPVByb21pc2UucmVzb2x2ZSh0KTtzPFE7KUk9SS50aGVuKGNbcysrXSxjW3MrK10pO3JldHVybiBJfVE9Zy5sZW5ndGg7bGV0IEM9dDtmb3Iocz0wO3M8UTspe2xldCBjPWdbcysrXSxFPWdbcysrXTt0cnl7Qz1jKEMpfWNhdGNoKHUpe0UuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7ST1oQS5jYWxsKHRoaXMsQyl9Y2F0Y2goYyl7cmV0dXJuIFByb21pc2UucmVqZWN0KGMpfWZvcihzPTAsUT1CLmxlbmd0aDtzPFE7KUk9SS50aGVuKEJbcysrXSxCW3MrK10pO3JldHVybiBJfWdldFVyaShlKXtlPVQodGhpcy5kZWZhdWx0cyxlKTtsZXQgdD1vQShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBBQSh0LGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTthLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe1cucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChUKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTthLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihuLGksZyl7cmV0dXJuIHRoaXMucmVxdWVzdChUKGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm4sZGF0YTppfSkpfX1XLnByb3RvdHlwZVtlXT10KCksVy5wcm90b3R5cGVbZSsiRm9ybSJdPXQoITApfSk7dmFyIG5BPVc7dmFyIGdlPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihuKXt0PW59KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG89PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgbj1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7bi0tID4wOylyLl9saXN0ZW5lcnNbbl0obyk7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1vPT57bGV0IG4saT1uZXcgUHJvbWlzZShnPT57ci5zdWJzY3JpYmUoZyksbj1nfSkudGhlbihvKTtyZXR1cm4gaS5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKG4pfSxpfSxlKGZ1bmN0aW9uKG4saSxnKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBMKG4saSxnKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihvKXtlPW99KSxjYW5jZWw6ZX19fSxhdD1nZTtmdW5jdGlvbiBDZShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gQmUoQSl7cmV0dXJuIGEuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIGxlPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhsZSkuZm9yRWFjaCgoW0EsZV0pPT57bGVbZV09QX0pO3ZhciBJdD1sZTtmdW5jdGlvbiBndChBKXtsZXQgZT1uZXcgbkEoQSksdD1aKG5BLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiBhLmV4dGVuZCh0LG5BLnByb3RvdHlwZSxlLHthbGxPd25LZXlzOiEwfSksYS5leHRlbmQodCxlLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihvKXtyZXR1cm4gZ3QoVChBLG8pKX0sdH12YXIgbT1ndChxKTttLkF4aW9zPW5BO20uQ2FuY2VsZWRFcnJvcj1MO20uQ2FuY2VsVG9rZW49YXQ7bS5pc0NhbmNlbD1yQTttLlZFUlNJT049d0E7bS50b0Zvcm1EYXRhPVA7bS5BeGlvc0Vycm9yPWY7bS5DYW5jZWw9bS5DYW5jZWxlZEVycm9yO20uYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX07bS5zcHJlYWQ9Q2U7bS5pc0F4aW9zRXJyb3I9QmU7bS5tZXJnZUNvbmZpZz1UO20uQXhpb3NIZWFkZXJzPVM7bS5mb3JtVG9KU09OPUE9PmRBKGEuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7bS5nZXRBZGFwdGVyPXlBLmdldEFkYXB0ZXI7bS5IdHRwU3RhdHVzQ29kZT1JdDttLmRlZmF1bHQ9bTt2YXIgdj1tO3ZhcntBeGlvczpNcyxBeGlvc0Vycm9yOkhzLENhbmNlbGVkRXJyb3I6WXMsaXNDYW5jZWw6cXMsQ2FuY2VsVG9rZW46S3MsVkVSU0lPTjpXcyxhbGw6dnMsQ2FuY2VsOmpzLGlzQXhpb3NFcnJvcjpfcyxzcHJlYWQ6enMsdG9Gb3JtRGF0YTpWcyxBeGlvc0hlYWRlcnM6WnMsSHR0cFN0YXR1c0NvZGU6WHMsZm9ybVRvSlNPTjokcyxnZXRBZGFwdGVyOkFhLG1lcmdlQ29uZmlnOmVhfT12O2FzeW5jIGZ1bmN0aW9uIHpyKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgbz1hd2FpdCB2LmdldCh0LHtyZXNwb25zZVR5cGU6ImJsb2IiLHBhcmFtczplfSksbj1VUkwuY3JlYXRlT2JqZWN0VVJMKG8uZGF0YSk7cj1uZXcgV29ya2VyKG4se3R5cGU6Im1vZHVsZSJ9KX1lbHNlIHI9bmV3IFdvcmtlcih0LHt0eXBlOiJtb2R1bGUifSk7cmV0dXJuIHJ9dmFyIGlBPXpyO2Z1bmN0aW9uIEN0KEEpe2xldCBlPVdBKEEpLHQ9QTtyZXR1cm4gdC50ZXJtaW5hdGVkPSExLHQud29ya2VyUHJveHk9ZSx0Lm9yaWdpbmFsVGVybWluYXRlPXQudGVybWluYXRlLHQudGVybWluYXRlPSgpPT57dC50ZXJtaW5hdGVkPSEwLHQud29ya2VyUHJveHlbS0FdKCksdC5vcmlnaW5hbFRlcm1pbmF0ZSgpfSx7d29ya2VyUHJveHk6ZSx3b3JrZXI6dH19YXN5bmMgZnVuY3Rpb24gVnIoQSxlLHQpe2xldCByO2lmKEEhPW51bGwpe2xldCBuPUE7cmV0dXJuIG4ud29ya2VyUHJveHkhPT12b2lkIDA/KHI9bi53b3JrZXJQcm94eSx7d29ya2VyUHJveHk6cix3b3JrZXI6bn0pOkN0KEEpfWxldCBvPWF3YWl0IGlBKGUsdCk7cmV0dXJuIEN0KG8pfXZhciBCdD1Wcjthc3luYyBmdW5jdGlvbiBacihBLGUsdCl7bGV0IHI9InVua25vd24iO3R5cGVvZiBBIT0ic3RyaW5nIj9yPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9yPUE6cj10eXBlb2YgZTwidSI/YCR7ZX0vJHtBfWA6QSxyLmVuZHNXaXRoKCIuanMiKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC0zKSksci5lbmRzV2l0aCgiLndhc20iKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC01KSk7bGV0IG89YCR7cn0ud2FzbWAsaT0oYXdhaXQgdi5nZXQobyx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KSkuZGF0YTtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke3J9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6aX0pfXZhciBsdD1acjt2YXIgY3Q9YXN5bmMoKT0+V2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNSwxLDk2LDAsMSwxMjMsMywyLDEsMCwxMCwxMCwxLDgsMCw2NSwwLDI1MywxNSwyNTMsOTgsMTFdKSk7dmFyIHV0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLEV0PW5ldyBUZXh0RW5jb2RlcixRdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gWHIoQSxlKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxyPUEuZnNfb3BlbihlLHQuZmxhZ3MpLG49QS5mc19zdGF0KGUpLnNpemUsaT1udWxsO3V0P2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKG4pOmk9bmV3IEFycmF5QnVmZmVyKG4pO2xldCBnPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBBLmZzX3JlYWQocixnLDAsbiwwKSxBLmZzX2Nsb3NlKHIpLGd9ZnVuY3Rpb24gZnQoQSxlLHQpe2xldCByPW51bGw7dXQ/cj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6cj1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IG89bmV3IFVpbnQ4QXJyYXkociksbj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZSx0KTtyZXR1cm4gby5zZXQobiksb31mdW5jdGlvbiBoKEEsZSx0LHIpe2xldCBvPTA7cmV0dXJuIGUhPT1udWxsJiYobz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LHIsZS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShlLmJ1ZmZlciksbykpLG99ZnVuY3Rpb24gSihBLGUsdCl7bGV0IHI9SlNPTi5zdHJpbmdpZnkoZSksbz1BLmxlbmd0aEJ5dGVzVVRGOChyKSsxLG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LG9dKTtBLnN0cmluZ1RvVVRGOChyLG4sbyl9ZnVuY3Rpb24gYihBLGUsdCxyKXtsZXQgbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLGk9ZnQoQSxvLG4pO3JldHVybiB3KHIsaS5idWZmZXIpfWZ1bmN0aW9uIFNBKEEsZSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxlXSkscj1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShyKX1mdW5jdGlvbiAkcihBLGUsdCxyKXtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oQixJKXtzd2l0Y2goQi50eXBlKXtjYXNlIHAuVGV4dFN0cmVhbTp7bGV0IHM9RXQuZW5jb2RlKEIuZGF0YS5kYXRhKSxRPWgoQSxzLEksMCksQz17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWB9O0ooQSxDLEkpO2JyZWFrfWNhc2UgcC5Kc29uQ29tcGF0aWJsZTp7bGV0IHM9RXQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEIuZGF0YSkpLFE9aChBLHMsSSwwKSxDPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YH07SihBLEMsSSk7YnJlYWt9Y2FzZSBwLkJpbmFyeVN0cmVhbTp7bGV0IHM9Qi5kYXRhLmRhdGEsUT1oKEEscyxJLDApLEM9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTtKKEEsQyxJKTticmVha31jYXNlIHAuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKEIuZGF0YS5wYXRoLEIuZGF0YS5kYXRhKTticmVha31jYXNlIHAuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoQi5kYXRhLnBhdGgsQi5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgcC5JbWFnZTp7bGV0IHM9Qi5kYXRhLFE9aChBLHMuZGF0YSxJLDApLEM9aChBLHMuZGlyZWN0aW9uLEksMSksYz10eXBlb2Ygcy5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShzLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sRT17aW1hZ2VUeXBlOnMuaW1hZ2VUeXBlLG5hbWU6cy5uYW1lLG9yaWdpbjpzLm9yaWdpbixzcGFjaW5nOnMuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsc2l6ZTpzLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxtZXRhZGF0YTpjfTtKKEEsRSxJKTticmVha31jYXNlIHAuTWVzaDp7bGV0IHM9Qi5kYXRhLFE9aChBLHMucG9pbnRzLEksMCksQz1oKEEscy5jZWxscyxJLDEpLGM9aChBLHMucG9pbnREYXRhLEksMiksRT1oKEEscy5jZWxsRGF0YSxJLDMpLHU9e21lc2hUeXBlOnMubWVzaFR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbnVtYmVyT2ZDZWxsczpzLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsY2VsbEJ1ZmZlclNpemU6cy5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOnMubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gfTtKKEEsdSxJKTticmVha31jYXNlIHAuUG9pbnRTZXQ6e2xldCBzPUIuZGF0YSxRPWgoQSxzLnBvaW50cyxJLDApLEM9aChBLHMucG9pbnREYXRhLEksMSksYz17cG9pbnRTZXRUeXBlOnMucG9pbnRTZXRUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YH07SihBLGMsSSk7YnJlYWt9Y2FzZSBwLlBvbHlEYXRhOntsZXQgcz1CLmRhdGEsUT1oKEEscy5wb2ludHMsSSwwKSxDPWgoQSxzLnZlcnRpY2VzLEksMSksYz1oKEEscy5saW5lcyxJLDIpLEU9aChBLHMucG9seWdvbnMsSSwzKSx1PWgoQSxzLnRyaWFuZ2xlU3RyaXBzLEksNCksZD1oKEEscy5wb2ludERhdGEsSSw1KSxGPWgoQSxzLnBvaW50RGF0YSxJLDYpLFU9e3BvbHlEYXRhVHlwZTpzLnBvbHlEYXRhVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6cy52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsbGluZXNCdWZmZXJTaXplOnMubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHBvbHlnb25zQnVmZmVyU2l6ZTpzLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6cy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0Z9YH07SihBLFUsSSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG89QS5zdGFja1NhdmUoKSxuPTA7dHJ5e249QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKEIpe3Rocm93IHR5cGVvZiBCPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKEIpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLEJ9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShvKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLGc9QS5nZXRNb2R1bGVTdGRlcnIoKSxsPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZuPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKEIsSSl7bGV0IHM9bnVsbDtzd2l0Y2goQi50eXBlKXtjYXNlIHAuVGV4dFN0cmVhbTp7bGV0IEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksYz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixDLGMpO3M9e2RhdGE6UXQuZGVjb2RlKEUpfTticmVha31jYXNlIHAuSnNvbkNvbXBhdGlibGU6e2xldCBDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLGM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksRT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQyxjKTtzPUpTT04ucGFyc2UoUXQuZGVjb2RlKEUpKTticmVha31jYXNlIHAuQmluYXJ5U3RyZWFtOntsZXQgQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxjPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pO3M9e2RhdGE6ZnQoQSxDLGMpfTticmVha31jYXNlIHAuVGV4dEZpbGU6e3M9e3BhdGg6Qi5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKEIuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBwLkJpbmFyeUZpbGU6e3M9e3BhdGg6Qi5kYXRhLnBhdGgsZGF0YTpYcihBLEIuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBwLkltYWdlOntsZXQgQz1TQShBLEkpO0MuZGF0YT1iKEEsSSwwLEMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEMuZGlyZWN0aW9uPWIoQSxJLDEsay5GbG9hdDY0KSxDLm1ldGFkYXRhPW5ldyBNYXAoQy5tZXRhZGF0YSkscz1DO2JyZWFrfWNhc2UgcC5NZXNoOntsZXQgQz1TQShBLEkpO0MubnVtYmVyT2ZQb2ludHM+MD9DLnBvaW50cz1iKEEsSSwwLEMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpDLnBvaW50cz13KEMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQy5udW1iZXJPZkNlbGxzPjA/Qy5jZWxscz1iKEEsSSwxLEMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkMuY2VsbHM9dyhDLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qy5wb2ludERhdGE9YihBLEksMixDLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpDLnBvaW50RGF0YT13KEMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxDLm51bWJlck9mQ2VsbFBpeGVscz4wP0MuY2VsbERhdGE9YihBLEksMyxDLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkMuY2VsbERhdGE9dyhDLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUM7YnJlYWt9Y2FzZSBwLlBvaW50U2V0OntsZXQgQz1TQShBLEkpO2NvbnNvbGUubG9nKEMpLEMubnVtYmVyT2ZQb2ludHM+MD9DLnBvaW50cz1iKEEsSSwwLEMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qy5wb2ludHM9dyhDLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxDLm51bWJlck9mUG9pbnRQaXhlbHM+MD9DLnBvaW50RGF0YT1iKEEsSSwxLEMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpDLnBvaW50RGF0YT13KEMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1DO2JyZWFrfWNhc2UgcC5Qb2x5RGF0YTp7bGV0IEM9U0EoQSxJKTtDLm51bWJlck9mUG9pbnRzPjA/Qy5wb2ludHM9YihBLEksMCxrLkZsb2F0MzIpOkMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9DLnZlcnRpY2VzPWIoQSxJLDEseS5VSW50MzIpOkMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEMubGluZXNCdWZmZXJTaXplPjA/Qy5saW5lcz1iKEEsSSwyLHkuVUludDMyKTpDLmxpbmVzPW5ldyBVaW50MzJBcnJheSxDLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0MucG9seWdvbnM9YihBLEksMyx5LlVJbnQzMik6Qy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9DLnRyaWFuZ2xlU3RyaXBzPWIoQSxJLDQseS5VSW50MzIpOkMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEMubnVtYmVyT2ZQb2ludFBpeGVscz4wP0MucG9pbnREYXRhPWIoQSxJLDUsQy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkMucG9pbnREYXRhPXcoQy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxDLm51bWJlck9mQ2VsbFBpeGVscz4wP0MuY2VsbERhdGE9YihBLEksNixDLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpDLmNlbGxEYXRhPXcoQy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QzticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBRPXt0eXBlOkIudHlwZSxkYXRhOnN9O2wucHVzaChRKX0pLHtyZXR1cm5WYWx1ZTpuLHN0ZG91dDppLHN0ZGVycjpnLG91dHB1dHM6bH19dmFyIHB0PSRyO3ZhciBBbz10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gZW8oQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8QS5sZW5ndGg7cisrKXtsZXQgbz10byhBW3JdLGUpO28hPT1udWxsJiZ0LnB1c2gobyl9cmV0dXJuIHR9ZnVuY3Rpb24gdG8oQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSxBbyYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT90OnQuc2xpY2UoMCl9dmFyIGR0PWVvO2Z1bmN0aW9uIHJvKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBtdD1ybztmdW5jdGlvbiBvbyhBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgeXQ9b287ZnVuY3Rpb24gbm8oQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIGh0PW5vO3ZhciBpbztmdW5jdGlvbiBiQSgpe3JldHVybiBpb312YXIgc287ZnVuY3Rpb24gd3QoKXtyZXR1cm4gc299dmFyIGFvO2Z1bmN0aW9uIGtBKCl7cmV0dXJuIGFvfXZhciBjZT1uZXcgTWFwO2Z1bmN0aW9uIElvKCl7bGV0IEE9a0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIER0KCl7bGV0IEE9YkEoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gUkEoKXtsZXQgQT13dCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIGdvKEEsZSx0KXtsZXQgcj1BLG89QTtpZih0eXBlb2YgQSE9InN0cmluZyImJihyPW5ldyBVUkwoQS5ocmVmKSxvPXIuaHJlZiksY2UuaGFzKG8pKXJldHVybiBjZS5nZXQobyk7e2xldCBuPWF3YWl0IGx0KEEsZT8udG9TdHJpbmcoKT8/RHQoKSx0Pz9SQSgpKTtyZXR1cm4gY2Uuc2V0KG8sbiksbn19YXN5bmMgZnVuY3Rpb24gQ28oQSxlLHQscixvKXtpZighYXdhaXQgY3QoKSl7bGV0IHU9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KHUpLG5ldyBFcnJvcih1KX1sZXQgbj1vPy53ZWJXb3JrZXI/P251bGw7aWYobj09PSExKXtsZXQgdT1hd2FpdCBnbyhBLnRvU3RyaW5nKCksbz8ucGlwZWxpbmVCYXNlVXJsLG8/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1JBKCkpO3JldHVybiBwdCh1LGUsdCxyKX1sZXQgaT1uLGc9bz8ucGlwZWxpbmVXb3JrZXJVcmw/P0lvKCksbD10eXBlb2YgZyE9InN0cmluZyImJnR5cGVvZiBnPy5ocmVmPCJ1Ij9nLmhyZWY6Zyx7d29ya2VyUHJveHk6Qix3b3JrZXI6SX09YXdhaXQgQnQoaSxsLG8/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1JBKCkpO2k9STtsZXQgcz1bXTtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24odSl7aWYodS50eXBlPT09cC5CaW5hcnlTdHJlYW0pe2xldCBkPXUuZGF0YS5kYXRhO3MucHVzaChkKX1lbHNlIGlmKHUudHlwZT09PXAuQmluYXJ5RmlsZSl7bGV0IGQ9dS5kYXRhLmRhdGE7cy5wdXNoKGQpfWVsc2UgaWYodS50eXBlPT09cC5JbWFnZSl7bGV0IGQ9dS5kYXRhO2QuZGF0YSE9PW51bGwmJnMucHVzaCguLi5tdChkKSl9ZWxzZSBpZih1LnR5cGU9PT1wLk1lc2gpe2xldCBkPXUuZGF0YTtzLnB1c2goLi4ueXQoZCkpfWVsc2UgaWYodS50eXBlPT09cC5Qb2x5RGF0YSl7bGV0IGQ9dS5kYXRhO3MucHVzaCguLi5odChkKSl9fSk7bGV0IFE9bz8ucGlwZWxpbmVCYXNlVXJsPz9EdCgpLEM9dHlwZW9mIFEhPSJzdHJpbmciJiZ0eXBlb2YgUT8uaHJlZjwidSI/US5ocmVmOlEsYz1yIT1udWxsP3ZBKHIsZHQocyxvPy5ub0NvcHkpKTpudWxsLEU9YXdhaXQgQi5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCksQyxlLHQsYyxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9SQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6RS5yZXR1cm5WYWx1ZSxzdGRvdXQ6RS5zdGRvdXQsc3RkZXJyOkUuc3RkZXJyLG91dHB1dHM6RS5vdXRwdXRzLHdlYldvcmtlcjppfX12YXIgc0E9Q287dmFyIEJvPW51bGw7ZnVuY3Rpb24gU3QoKXtyZXR1cm4gQm99dmFyIEVlLGxvPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9jb21wcmVzcy1zdHJpbmdpZnlAJHtOQX0vZGlzdC9waXBlbGluZXNgO2Z1bmN0aW9uIFdhKEEpe0VlPUF9ZnVuY3Rpb24gRkEoKXtpZih0eXBlb2YgRWU8InUiKXJldHVybiBFZTtsZXQgQT1iQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpsb312YXIgUWUsY289bnVsbDtmdW5jdGlvbiBidChBKXtRZT1BfWZ1bmN0aW9uIGooKXtpZih0eXBlb2YgUWU8InUiKXJldHVybiBRZTtsZXQgQT1rQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpjb312YXIgXz1udWxsO2FzeW5jIGZ1bmN0aW9uIGt0KCl7bGV0IEE9aigpLGU9dHlwZW9mIEEhPSJzdHJpbmciJiZ0eXBlb2YgQT8uaHJlZjwidSI/QS5ocmVmOkE7Xz1hd2FpdCBpQShlKX1mdW5jdGlvbiBYYShBKXtfPUF9YXN5bmMgZnVuY3Rpb24gVUEoKXtpZihfIT09bnVsbClyZXR1cm4gXy50ZXJtaW5hdGVkJiZhd2FpdCBrdCgpLF87bGV0IEE9U3QoKTtyZXR1cm4gQSE9PW51bGw/QTooYXdhaXQga3QoKSxfKX1hc3luYyBmdW5jdGlvbiBFbyhBLGU9e30pe2xldCB0PVt7dHlwZTpwLkJpbmFyeVN0cmVhbX1dLHI9W3t0eXBlOnAuQmluYXJ5U3RyZWFtLGRhdGE6e2RhdGE6QX19XSxvPVtdO28ucHVzaCgiMCIpLG8ucHVzaCgiMCIpLG8ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnN0cmluZ2lmeSYmZS5zdHJpbmdpZnkmJm8ucHVzaCgiLS1zdHJpbmdpZnkiKSxlLmNvbXByZXNzaW9uTGV2ZWwmJm8ucHVzaCgiLS1jb21wcmVzc2lvbi1sZXZlbCIsZS5jb21wcmVzc2lvbkxldmVsLnRvU3RyaW5nKCkpLGUuZGF0YVVybFByZWZpeCYmby5wdXNoKCItLWRhdGEtdXJsLXByZWZpeCIsZS5kYXRhVXJsUHJlZml4LnRvU3RyaW5nKCkpO2xldCBnPSJjb21wcmVzcy1zdHJpbmdpZnkiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IFVBKCkpO2xldHt3ZWJXb3JrZXI6QixyZXR1cm5WYWx1ZTpJLHN0ZGVycjpzLG91dHB1dHM6UX09YXdhaXQgc0EoZyxvLHQscix7cGlwZWxpbmVCYXNlVXJsOkZBKCkscGlwZWxpbmVXb3JrZXJVcmw6aigpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihJIT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkIsb3V0cHV0OihRWzBdPy5kYXRhKS5kYXRhfX12YXIgej1Fbzthc3luYyBmdW5jdGlvbiBRbyhBLGU9e30pe2xldCB0PVt7dHlwZTpwLkJpbmFyeVN0cmVhbX1dLHI9W3t0eXBlOnAuQmluYXJ5U3RyZWFtLGRhdGE6e2RhdGE6QX19XSxvPVtdO28ucHVzaCgiMCIpLG8ucHVzaCgiMCIpLG8ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnBhcnNlU3RyaW5nJiZlLnBhcnNlU3RyaW5nJiZvLnB1c2goIi0tcGFyc2Utc3RyaW5nIik7bGV0IGc9InBhcnNlLXN0cmluZy1kZWNvbXByZXNzIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBVQSgpKTtsZXR7d2ViV29ya2VyOkIscmV0dXJuVmFsdWU6SSxzdGRlcnI6cyxvdXRwdXRzOlF9PWF3YWl0IHNBKGcsbyx0LHIse3BpcGVsaW5lQmFzZVVybDpGQSgpLHBpcGVsaW5lV29ya2VyVXJsOmooKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoSSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpCLG91dHB1dDooUVswXT8uZGF0YSkuZGF0YX19dmFyIFY9UW87YXN5bmMgZnVuY3Rpb24gdW8oQSxlPXt9KXtsZXQgcj1uZXcgUEEoQS5pbWFnZVR5cGUpO3Iub3JpZ2luPUEub3JpZ2luLHIuc3BhY2luZz1BLnNwYWNpbmcsci5zaXplPUEuc2l6ZSxyLm1ldGFkYXRhPUEubWV0YWRhdGE7bGV0IG89bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpLG49bmV3IFVpbnQ4QXJyYXkoQS5kaXJlY3Rpb24uYnVmZmVyKSxpPWF3YWl0IHoobix7Y29tcHJlc3Npb25MZXZlbDo1LHN0cmluZ2lmeTohMCx3ZWJXb3JrZXI6ZS53ZWJXb3JrZXIsbm9Db3B5OmUubm9Db3B5fSksZz1pLndlYldvcmtlcjtpZihyLmRpcmVjdGlvbj1vLmRlY29kZShpLm91dHB1dC5idWZmZXIpLEEuZGF0YT09PW51bGwpci5kYXRhPW51bGw7ZWxzZXtsZXQgbD1uZXcgVWludDhBcnJheShBLmRhdGEuYnVmZmVyKSxCPWF3YWl0IHoobCx7Y29tcHJlc3Npb25MZXZlbDo1LHN0cmluZ2lmeTohMCx3ZWJXb3JrZXI6Zyxub0NvcHk6ZS5ub0NvcHl9KTtyLmRhdGE9by5kZWNvZGUoQi5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZW5jb2RlZDpyLHdlYldvcmtlcjpnfX1hc3luYyBmdW5jdGlvbiBmbyhBLGU9e30pe2xldCB0PUEscj1uZXcgVGV4dEVuY29kZXIsbz1uZXcgVWludDhBcnJheShyLmVuY29kZShBLmRpcmVjdGlvbikpLG49YXdhaXQgVihvLHtwYXJzZVN0cmluZzohMCx3ZWJXb3JrZXI6ZS53ZWJXb3JrZXIsbm9Db3B5OiEwfSksaT1uLndlYldvcmtlcjtpZih0LmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KG4ub3V0cHV0LmJ1ZmZlciksIXQuZGF0YSl0LmRhdGE9bnVsbDtlbHNle2xldCBnPW5ldyBVaW50OEFycmF5KHIuZW5jb2RlKEEuZGF0YSkpLGw9YXdhaXQgVihnLHtwYXJzZVN0cmluZzohMCx3ZWJXb3JrZXI6aSxub0NvcHk6ITB9KTt0LmRhdGE9dyh0LmltYWdlVHlwZS5jb21wb25lbnRUeXBlLGwub3V0cHV0LmJ1ZmZlcil9cmV0dXJue2RlY29kZWQ6dCx3ZWJXb3JrZXI6aX19YXN5bmMgZnVuY3Rpb24gcG8oQSxlPXt9KXtsZXQgcj1uZXcgT0EoQS5tZXNoVHlwZSk7ci5uYW1lPUEubmFtZSxyLm51bWJlck9mUG9pbnRzPUEubnVtYmVyT2ZQb2ludHMsci5udW1iZXJPZkNlbGxzPUEubnVtYmVyT2ZDZWxscyxyLm51bWJlck9mUG9pbnRQaXhlbHM9QS5udW1iZXJPZlBvaW50UGl4ZWxzLHIubnVtYmVyT2ZDZWxsUGl4ZWxzPUEubnVtYmVyT2ZDZWxsUGl4ZWxzLHIuY2VsbEJ1ZmZlclNpemU9QS5jZWxsQnVmZmVyU2l6ZTtsZXQgbz1lLndlYldvcmtlcixuPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmb3IobGV0IGkgb2ZbInBvaW50cyIsInBvaW50RGF0YSIsImNlbGxzIiwiY2VsbERhdGEiXSlpZihBW2ldPT09bnVsbClyW2ldPW51bGw7ZWxzZXtsZXQgZz1uZXcgVWludDhBcnJheShBW2ldLmJ1ZmZlciksbD1hd2FpdCB6KGcse2NvbXByZXNzaW9uTGV2ZWw6NSxzdHJpbmdpZnk6ITAsd2ViV29ya2VyOm8sbm9Db3B5OmUubm9Db3B5fSk7bz1sLndlYldvcmtlcixyW2ldPW4uZGVjb2RlKGwub3V0cHV0LmJ1ZmZlcil9cmV0dXJue2VuY29kZWQ6cix3ZWJXb3JrZXI6b319YXN5bmMgZnVuY3Rpb24gbW8oQSxlPXt9KXtsZXQgdD1BLHI9bmV3IE1hcChbWyJwb2ludHMiLCJwb2ludENvbXBvbmVudFR5cGUiXSxbInBvaW50RGF0YSIsInBvaW50UGl4ZWxDb21wb25lbnRUeXBlIl0sWyJjZWxscyIsImNlbGxDb21wb25lbnRUeXBlIl0sWyJjZWxsRGF0YSIsImNlbGxQaXhlbENvbXBvbmVudFR5cGUiXV0pLG89bmV3IFRleHRFbmNvZGVyLG49ZS53ZWJXb3JrZXI7Zm9yKGxldCBpIG9mWyJwb2ludHMiLCJwb2ludERhdGEiLCJjZWxscyIsImNlbGxEYXRhIl0paWYodFtpXT09PW51bGwpdFtpXT1udWxsO2Vsc2V7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoby5lbmNvZGUodFtpXSkpLGw9YXdhaXQgVihnLHtwYXJzZVN0cmluZzohMCx3ZWJXb3JrZXI6bixub0NvcHk6ITB9KTtuPWwud2ViV29ya2VyLHRbaV09dyh0Lm1lc2hUeXBlW3IuZ2V0KGkpXSxsLm91dHB1dC5idWZmZXIpfXJldHVybntkZWNvZGVkOnQsd2ViV29ya2VyOm59fWFzeW5jIGZ1bmN0aW9uIHlvKEEsZT17fSl7bGV0IHI9bmV3IEhBKEEucG9seURhdGFUeXBlKTtyLm5hbWU9QS5uYW1lLHIubnVtYmVyT2ZQb2ludHM9QS5udW1iZXJPZlBvaW50cyxyLnZlcnRpY2VzQnVmZmVyU2l6ZT1BLnZlcnRpY2VzQnVmZmVyU2l6ZSxyLmxpbmVzQnVmZmVyU2l6ZT1BLmxpbmVzQnVmZmVyU2l6ZSxyLnBvbHlnb25zQnVmZmVyU2l6ZT1BLnBvbHlnb25zQnVmZmVyU2l6ZSxyLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT1BLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSxyLm51bWJlck9mUG9pbnRQaXhlbHM9QS5udW1iZXJPZlBvaW50UGl4ZWxzLHIubnVtYmVyT2ZDZWxsUGl4ZWxzPUEubnVtYmVyT2ZDZWxsUGl4ZWxzO2xldCBvPWUud2ViV29ya2VyLG49bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2ZvcihsZXQgaSBvZlsicG9pbnRzIiwidmVydGljZXMiLCJsaW5lcyIsInBvbHlnb25zIiwidHJpYW5nbGVTdHJpcHMiLCJwb2ludERhdGEiLCJjZWxsRGF0YSJdKWlmKEFbaV09PT1udWxsKXJbaV09bnVsbDtlbHNle2xldCBnPW5ldyBVaW50OEFycmF5KEFbaV0uYnVmZmVyKSxsPWF3YWl0IHooZyx7Y29tcHJlc3Npb25MZXZlbDo1LHN0cmluZ2lmeTohMCx3ZWJXb3JrZXI6byxub0NvcHk6ZS5ub0NvcHl9KTtvPWwud2ViV29ya2VyLHJbaV09bi5kZWNvZGUobC5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZW5jb2RlZDpyLHdlYldvcmtlcjpvfX1hc3luYyBmdW5jdGlvbiBobyhBLGU9e30pe2xldCB0PUEscj1uZXcgTWFwKFtbInBvaW50cyIsImZsb2F0MzIiXSxbInZlcnRpY2VzIiwidWludDMyIl0sWyJsaW5lcyIsInVpbnQzMiJdLFsicG9seWdvbnMiLCJ1aW50MzIiXSxbInRyaWFuZ2xlU3RyaXBzIiwidWludDMyIl0sWyJwb2ludERhdGEiLHQucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlXSxbImNlbGxEYXRhIix0LnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlXV0pLG89bmV3IFRleHRFbmNvZGVyLG49ZS53ZWJXb3JrZXI7Zm9yKGxldCBpIG9mWyJwb2ludHMiLCJ2ZXJ0aWNlcyIsImxpbmVzIiwicG9seWdvbnMiLCJ0cmlhbmdsZVN0cmlwcyIsInBvaW50RGF0YSIsImNlbGxEYXRhIl0paWYodFtpXT09PW51bGwpdFtpXT1udWxsO2Vsc2V7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoby5lbmNvZGUodFtpXSkpLGw9YXdhaXQgVihnLHtwYXJzZVN0cmluZzohMCx3ZWJXb3JrZXI6bixub0NvcHk6ITB9KTtuPWwud2ViV29ya2VyLHRbaV09dyhyLmdldChpKSxsLm91dHB1dC5idWZmZXIpfXJldHVybntkZWNvZGVkOnQsd2ViV29ya2VyOm59fXZhciBSdD0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgSUk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBlST0oQSx0KT0+e2Zvcih2YXIgSSBpbiB0KUlJKEEsSSx7Z2V0OnRbSV0sZW51bWVyYWJsZTohMH0pfTt2YXIgdkE9U3ltYm9sKCJDb21saW5rLnByb3h5IiksZ0k9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50Iiksckk9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLHBBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxlQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksJEE9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsb0k9e2NhbkhhbmRsZTpBPT4kQShBKSYmQVt2QV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTp0LHBvcnQyOkl9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gaUEoQSx0KSxbSSxbSV1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLG5JKEEpfX0saUk9e2NhbkhhbmRsZTpBPT4kQShBKSYmZUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgdDtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOkF9LFt0LFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LEF0PW5ldyBNYXAoW1sicHJveHkiLG9JXSxbInRocm93IixpSV1dKTtmdW5jdGlvbiBDSShBLHQpe2ZvcihsZXQgSSBvZiBBKWlmKHQ9PT1JfHxJPT09IioifHxJIGluc3RhbmNlb2YgUmVnRXhwJiZJLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaUEoQSx0PWdsb2JhbFRoaXMsST1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBlKGcpe2lmKCFnfHwhZy5kYXRhKXJldHVybjtpZighQ0koSSxnLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke2cub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpyLHR5cGU6byxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGcuZGF0YSksYT0oZy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChiKSxRO3RyeXtsZXQgQj1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixzKT0+ZltzXSxBKSxpPW4ucmVkdWNlKChmLHMpPT5mW3NdLEEpO3N3aXRjaChvKXtjYXNlIkdFVCI6UT1pO2JyZWFrO2Nhc2UiU0VUIjpCW24uc2xpY2UoLTEpWzBdXT1iKGcuZGF0YS52YWx1ZSksUT0hMDticmVhaztjYXNlIkFQUExZIjpRPWkuYXBwbHkoQixhKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBpKC4uLmEpO1E9YUkoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOnN9PW5ldyBNZXNzYWdlQ2hhbm5lbDtpQShBLHMpLFE9RkEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6UT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEIpe1E9e3ZhbHVlOkIsW2VBXTowfX1Qcm9taXNlLnJlc29sdmUoUSkuY2F0Y2goQj0+KHt2YWx1ZTpCLFtlQV06MH0pKS50aGVuKEI9PntsZXRbaSxmXT1vQShCKTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpLG89PT0iUkVMRUFTRSImJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGUpLHR0KHQpLHBBIGluIEEmJnR5cGVvZiBBW3BBXT09ImZ1bmN0aW9uIiYmQVtwQV0oKSl9KS5jYXRjaChCPT57bGV0W2ksZl09b0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtlQV06MH0pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZil9KX0pLHQuc3RhcnQmJnQuc3RhcnQoKX1mdW5jdGlvbiBCSShBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiB0dChBKXtCSShBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIG5JKEEsdCl7cmV0dXJuIFNBKEEsW10sdCl9ZnVuY3Rpb24gSUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIEl0KEEpe3JldHVybiBxKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3R0KEEpfSl9dmFyIGdBPW5ldyBXZWFrTWFwLHJBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCB0PShnQS5nZXQoQSl8fDApLTE7Z0Euc2V0KEEsdCksdD09PTAmJkl0KEEpfSk7ZnVuY3Rpb24gc0koQSx0KXtsZXQgST0oZ0EuZ2V0KHQpfHwwKSsxO2dBLnNldCh0LEkpLHJBJiZyQS5yZWdpc3RlcihBLHQsQSl9ZnVuY3Rpb24gUUkoQSl7ckEmJnJBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gU0EoQSx0PVtdLEk9ZnVuY3Rpb24oKXt9KXtsZXQgZT0hMSxnPW5ldyBQcm94eShJLHtnZXQocixvKXtpZihJQShlKSxvPT09ckkpcmV0dXJuKCk9PntRSShnKSxJdChBKSxlPSEwfTtpZihvPT09InRoZW4iKXtpZih0Lmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pmd9O2xldCBuPXEoQSx7dHlwZToiR0VUIixwYXRoOnQubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKGIpO3JldHVybiBuLnRoZW4uYmluZChuKX1yZXR1cm4gU0EoQSxbLi4udCxvXSl9LHNldChyLG8sbil7SUEoZSk7bGV0W2EsUV09b0Eobik7cmV0dXJuIHEoQSx7dHlwZToiU0VUIixwYXRoOlsuLi50LG9dLm1hcChCPT5CLnRvU3RyaW5nKCkpLHZhbHVlOmF9LFEpLnRoZW4oYil9LGFwcGx5KHIsbyxuKXtJQShlKTtsZXQgYT10W3QubGVuZ3RoLTFdO2lmKGE9PT1nSSlyZXR1cm4gcShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKGIpO2lmKGE9PT0iYmluZCIpcmV0dXJuIFNBKEEsdC5zbGljZSgwLC0xKSk7bGV0W1EsQl09X0Eobik7cmV0dXJuIHEoQSx7dHlwZToiQVBQTFkiLHBhdGg6dC5tYXAoaT0+aS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6UX0sQikudGhlbihiKX0sY29uc3RydWN0KHIsbyl7SUEoZSk7bGV0W24sYV09X0Eobyk7cmV0dXJuIHEoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOnQubWFwKFE9PlEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Om59LGEpLnRoZW4oYil9fSk7cmV0dXJuIHNJKGcsQSksZ31mdW5jdGlvbiBFSShBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBfQShBKXtsZXQgdD1BLm1hcChvQSk7cmV0dXJuW3QubWFwKEk9PklbMF0pLEVJKHQubWFwKEk9PklbMV0pKV19dmFyIGV0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEZBKEEsdCl7cmV0dXJuIGV0LnNldChBLHQpLEF9ZnVuY3Rpb24gYUkoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3ZBXTohMH0pfWZ1bmN0aW9uIG9BKEEpe2ZvcihsZXRbdCxJXW9mIEF0KWlmKEkuY2FuSGFuZGxlKEEpKXtsZXRbZSxnXT1JLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6dCx2YWx1ZTplfSxnXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZXQuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gYihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBBdC5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIHEoQSx0LEkpe3JldHVybiBuZXcgUHJvbWlzZShlPT57bGV0IGc9Y0koKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobyl7IW8uZGF0YXx8IW8uZGF0YS5pZHx8by5kYXRhLmlkIT09Z3x8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZShvLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmd9LHQpLEkpfSl9ZnVuY3Rpb24gY0koKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFcoQSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseSh0LGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpmSX09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6VUF9PU9iamVjdCxCQT0oQT0+dD0+e2xldCBJPWZJLmNhbGwodCk7cmV0dXJuIEFbSV18fChBW0ldPUkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxVPUE9PihBPUEudG9Mb3dlckNhc2UoKSx0PT5CQSh0KT09PUEpLG5BPUE9PnQ9PnR5cGVvZiB0PT09QSx7aXNBcnJheTpLfT1BcnJheSxaPW5BKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBsSShBKXtyZXR1cm4gQSE9PW51bGwmJiFaKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIVooQS5jb25zdHJ1Y3RvcikmJkYoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIGl0PVUoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gREkoQSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz90PUFycmF5QnVmZmVyLmlzVmlldyhBKTp0PUEmJkEuYnVmZmVyJiZpdChBLmJ1ZmZlciksdH12YXIgdUk9bkEoInN0cmluZyIpLEY9bkEoImZ1bmN0aW9uIiksQ3Q9bkEoIm51bWJlciIpLHNBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsaEk9QT0+QT09PSEwfHxBPT09ITEsQ0E9QT0+e2lmKEJBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IHQ9VUEoQSk7cmV0dXJuKHQ9PT1udWxsfHx0PT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZEk9VSgiRGF0ZSIpLHlJPVUoIkZpbGUiKSx3ST1VKCJCbG9iIiksbUk9VSgiRmlsZUxpc3QiKSxwST1BPT5zQShBKSYmRihBLnBpcGUpLFNJPUE9PntsZXQgdDtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxGKEEuYXBwZW5kKSYmKCh0PUJBKEEpKT09PSJmb3JtZGF0YSJ8fHQ9PT0ib2JqZWN0IiYmRihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxGST1VKCJVUkxTZWFyY2hQYXJhbXMiKSxSST1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gVihBLHQse2FsbE93bktleXM6ST0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBlLGc7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEsoQSkpZm9yKGU9MCxnPUEubGVuZ3RoO2U8ZztlKyspdC5jYWxsKG51bGwsQVtlXSxlLEEpO2Vsc2V7bGV0IHI9ST9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxvPXIubGVuZ3RoLG47Zm9yKGU9MDtlPG87ZSsrKW49cltlXSx0LmNhbGwobnVsbCxBW25dLG4sQSl9fWZ1bmN0aW9uIEJ0KEEsdCl7dD10LnRvTG93ZXJDYXNlKCk7bGV0IEk9T2JqZWN0LmtleXMoQSksZT1JLmxlbmd0aCxnO2Zvcig7ZS0tID4wOylpZihnPUlbZV0sdD09PWcudG9Mb3dlckNhc2UoKSlyZXR1cm4gZztyZXR1cm4gbnVsbH12YXIgbnQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxzdD1BPT4hWihBKSYmQSE9PW50O2Z1bmN0aW9uIE5BKCl7bGV0e2Nhc2VsZXNzOkF9PXN0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LEk9KGUsZyk9PntsZXQgcj1BJiZCdCh0LGcpfHxnO0NBKHRbcl0pJiZDQShlKT90W3JdPU5BKHRbcl0sZSk6Q0EoZSk/dFtyXT1OQSh7fSxlKTpLKGUpP3Rbcl09ZS5zbGljZSgpOnRbcl09ZX07Zm9yKGxldCBlPTAsZz1hcmd1bWVudHMubGVuZ3RoO2U8ZztlKyspYXJndW1lbnRzW2VdJiZWKGFyZ3VtZW50c1tlXSxJKTtyZXR1cm4gdH12YXIgTkk9KEEsdCxJLHthbGxPd25LZXlzOmV9PXt9KT0+KFYodCwoZyxyKT0+e0kmJkYoZyk/QVtyXT1XKGcsSSk6QVtyXT1nfSx7YWxsT3duS2V5czplfSksQSksVUk9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxHST0oQSx0LEksZSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6dC5wcm90b3R5cGV9KSxJJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLEkpfSxrST0oQSx0LEksZSk9PntsZXQgZyxyLG8sbj17fTtpZih0PXR8fHt9LEE9PW51bGwpcmV0dXJuIHQ7ZG97Zm9yKGc9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSkscj1nLmxlbmd0aDtyLS0gPjA7KW89Z1tyXSwoIWV8fGUobyxBLHQpKSYmIW5bb10mJih0W29dPUFbb10sbltvXT0hMCk7QT1JIT09ITEmJlVBKEEpfXdoaWxlKEEmJighSXx8SShBLHQpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB0fSxMST0oQSx0LEkpPT57QT1TdHJpbmcoQSksKEk9PT12b2lkIDB8fEk+QS5sZW5ndGgpJiYoST1BLmxlbmd0aCksSS09dC5sZW5ndGg7bGV0IGU9QS5pbmRleE9mKHQsSSk7cmV0dXJuIGUhPT0tMSYmZT09PUl9LEpJPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihLKEEpKXJldHVybiBBO2xldCB0PUEubGVuZ3RoO2lmKCFDdCh0KSlyZXR1cm4gbnVsbDtsZXQgST1uZXcgQXJyYXkodCk7Zm9yKDt0LS0gPjA7KUlbdF09QVt0XTtyZXR1cm4gSX0sSEk9KEE9PnQ9PkEmJnQgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJlVBKFVpbnQ4QXJyYXkpKSxZST0oQSx0KT0+e2xldCBlPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksZztmb3IoOyhnPWUubmV4dCgpKSYmIWcuZG9uZTspe2xldCByPWcudmFsdWU7dC5jYWxsKEEsclswXSxyWzFdKX19LGJJPShBLHQpPT57bGV0IEksZT1bXTtmb3IoOyhJPUEuZXhlYyh0KSkhPT1udWxsOyllLnB1c2goSSk7cmV0dXJuIGV9LE1JPVUoIkhUTUxGb3JtRWxlbWVudCIpLHFJPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKEksZSxnKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK2d9KSxydD0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9Pih0LEkpPT5BLmNhbGwodCxJKSkoT2JqZWN0LnByb3RvdHlwZSksS0k9VSgiUmVnRXhwIiksUXQ9KEEsdCk9PntsZXQgST1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxlPXt9O1YoSSwoZyxyKT0+e2xldCBvOyhvPXQoZyxyLEEpKSE9PSExJiYoZVtyXT1vfHxnKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsZSl9LE9JPUE9PntRdChBLCh0LEkpPT57aWYoRihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKEkpIT09LTEpcmV0dXJuITE7bGV0IGU9QVtJXTtpZihGKGUpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK0krIlwnIil9KX19KX0sVEk9KEEsdCk9PntsZXQgST17fSxlPWc9PntnLmZvckVhY2gocj0+e0lbcl09ITB9KX07cmV0dXJuIEsoQSk/ZShBKTplKFN0cmluZyhBKS5zcGxpdCh0KSksSX0sUEk9KCk9Pnt9LHhJPShBLHQpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTp0KSxSQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLG90PSIwMTIzNDU2Nzg5IixFdD17RElHSVQ6b3QsQUxQSEE6UkEsQUxQSEFfRElHSVQ6UkErUkEudG9VcHBlckNhc2UoKStvdH0sakk9KEE9MTYsdD1FdC5BTFBIQV9ESUdJVCk9PntsZXQgST0iIix7bGVuZ3RoOmV9PXQ7Zm9yKDtBLS07KUkrPXRbTWF0aC5yYW5kb20oKSplfDBdO3JldHVybiBJfTtmdW5jdGlvbiBXSShBKXtyZXR1cm4hIShBJiZGKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgWkk9QT0+e2xldCB0PW5ldyBBcnJheSgxMCksST0oZSxnKT0+e2lmKHNBKGUpKXtpZih0LmluZGV4T2YoZSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBlKSl7dFtnXT1lO2xldCByPUsoZSk/W106e307cmV0dXJuIFYoZSwobyxuKT0+e2xldCBhPUkobyxnKzEpOyFaKGEpJiYocltuXT1hKX0pLHRbZ109dm9pZCAwLHJ9fXJldHVybiBlfTtyZXR1cm4gSShBLDApfSxWST1VKCJBc3luY0Z1bmN0aW9uIiksWEk9QT0+QSYmKHNBKEEpfHxGKEEpKSYmRihBLnRoZW4pJiZGKEEuY2F0Y2gpLEM9e2lzQXJyYXk6Syxpc0FycmF5QnVmZmVyOml0LGlzQnVmZmVyOmxJLGlzRm9ybURhdGE6U0ksaXNBcnJheUJ1ZmZlclZpZXc6REksaXNTdHJpbmc6dUksaXNOdW1iZXI6Q3QsaXNCb29sZWFuOmhJLGlzT2JqZWN0OnNBLGlzUGxhaW5PYmplY3Q6Q0EsaXNVbmRlZmluZWQ6Wixpc0RhdGU6ZEksaXNGaWxlOnlJLGlzQmxvYjp3SSxpc1JlZ0V4cDpLSSxpc0Z1bmN0aW9uOkYsaXNTdHJlYW06cEksaXNVUkxTZWFyY2hQYXJhbXM6RkksaXNUeXBlZEFycmF5OkhJLGlzRmlsZUxpc3Q6bUksZm9yRWFjaDpWLG1lcmdlOk5BLGV4dGVuZDpOSSx0cmltOlJJLHN0cmlwQk9NOlVJLGluaGVyaXRzOkdJLHRvRmxhdE9iamVjdDprSSxraW5kT2Y6QkEsa2luZE9mVGVzdDpVLGVuZHNXaXRoOkxJLHRvQXJyYXk6SkksZm9yRWFjaEVudHJ5OllJLG1hdGNoQWxsOmJJLGlzSFRNTEZvcm06TUksaGFzT3duUHJvcGVydHk6cnQsaGFzT3duUHJvcDpydCxyZWR1Y2VEZXNjcmlwdG9yczpRdCxmcmVlemVNZXRob2RzOk9JLHRvT2JqZWN0U2V0OlRJLHRvQ2FtZWxDYXNlOnFJLG5vb3A6UEksdG9GaW5pdGVOdW1iZXI6eEksZmluZEtleTpCdCxnbG9iYWw6bnQsaXNDb250ZXh0RGVmaW5lZDpzdCxBTFBIQUJFVDpFdCxnZW5lcmF0ZVN0cmluZzpqSSxpc1NwZWNDb21wbGlhbnRGb3JtOldJLHRvSlNPTk9iamVjdDpaSSxpc0FzeW5jRm46VkksaXNUaGVuYWJsZTpYSX07ZnVuY3Rpb24gTyhBLHQsSSxlLGcpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxJJiYodGhpcy5jb25maWc9SSksZSYmKHRoaXMucmVxdWVzdD1lKSxnJiYodGhpcy5yZXNwb25zZT1nKX1DLmluaGVyaXRzKE8sRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpDLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBhdD1PLnByb3RvdHlwZSxjdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntjdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLGN0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXQsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Ty5mcm9tPShBLHQsSSxlLGcscik9PntsZXQgbz1PYmplY3QuY3JlYXRlKGF0KTtyZXR1cm4gQy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGEpe3JldHVybiBhIT09RXJyb3IucHJvdG90eXBlfSxuPT5uIT09ImlzQXhpb3NFcnJvciIpLE8uY2FsbChvLEEubWVzc2FnZSx0LEksZSxnKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxyJiZPYmplY3QuYXNzaWduKG8sciksb307dmFyIGw9Tzt2YXIgUUE9bnVsbDtmdW5jdGlvbiBHQShBKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KEEpfHxDLmlzQXJyYXkoQSl9ZnVuY3Rpb24gbHQoQSl7cmV0dXJuIEMuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gZnQoQSx0LEkpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihnLHIpe3JldHVybiBnPWx0KGcpLCFJJiZyPyJbIitnKyJdIjpnfSkuam9pbihJPyIuIjoiIik6dH1mdW5jdGlvbiB6SShBKXtyZXR1cm4gQy5pc0FycmF5KEEpJiYhQS5zb21lKEdBKX12YXIgX0k9Qy50b0ZsYXRPYmplY3QoQyx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHZJKEEsdCxJKXtpZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhRQXx8Rm9ybURhdGEpLEk9Qy50b0ZsYXRPYmplY3QoSSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIUMuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgZT1JLm1ldGFUb2tlbnMsZz1JLnZpc2l0b3J8fEIscj1JLmRvdHMsbz1JLmluZGV4ZXMsYT0oSS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZDLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIUMuaXNGdW5jdGlvbihnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIFEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoQy5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYSYmQy5pc0Jsb2IoRSkpdGhyb3cgbmV3IGwoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEMuaXNBcnJheUJ1ZmZlcihFKXx8Qy5pc1R5cGVkQXJyYXkoRSk/YSYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEIoRSxjLHUpe2xldCB5PUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoQy5lbmRzV2l0aChjLCJ7fSIpKWM9ZT9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKEMuaXNBcnJheShFKSYmekkoRSl8fChDLmlzRmlsZUxpc3QoRSl8fEMuZW5kc1dpdGgoYywiW10iKSkmJih5PUMudG9BcnJheShFKSkpcmV0dXJuIGM9bHQoYykseS5mb3JFYWNoKGZ1bmN0aW9uKE4sdEkpeyEoQy5pc1VuZGVmaW5lZChOKXx8Tj09PW51bGwpJiZ0LmFwcGVuZChvPT09ITA/ZnQoW2NdLHRJLHIpOm89PT1udWxsP2M6YysiW10iLFEoTikpfSksITF9cmV0dXJuIEdBKEUpPyEwOih0LmFwcGVuZChmdCh1LGMsciksUShFKSksITEpfWxldCBpPVtdLGY9T2JqZWN0LmFzc2lnbihfSSx7ZGVmYXVsdFZpc2l0b3I6Qixjb252ZXJ0VmFsdWU6USxpc1Zpc2l0YWJsZTpHQX0pO2Z1bmN0aW9uIHMoRSxjKXtpZighQy5pc1VuZGVmaW5lZChFKSl7aWYoaS5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTtpLnB1c2goRSksQy5mb3JFYWNoKEUsZnVuY3Rpb24oeSxSKXsoIShDLmlzVW5kZWZpbmVkKHkpfHx5PT09bnVsbCkmJmcuY2FsbCh0LHksQy5pc1N0cmluZyhSKT9SLnRyaW0oKTpSLGMsZikpPT09ITAmJnMoeSxjP2MuY29uY2F0KFIpOltSXSl9KSxpLnBvcCgpfX1pZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIHMoQSksdH12YXIgSj12STtmdW5jdGlvbiBEdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIHV0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmSihBLHRoaXMsdCl9dmFyIGh0PXV0LnByb3RvdHlwZTtodC5hcHBlbmQ9ZnVuY3Rpb24odCxJKXt0aGlzLl9wYWlycy5wdXNoKFt0LEldKX07aHQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IEk9dD9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxEdCl9OkR0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIEkoZ1swXSkrIj0iK0koZ1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciBFQT11dDtmdW5jdGlvbiAkSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiBYKEEsdCxJKXtpZighdClyZXR1cm4gQTtsZXQgZT1JJiZJLmVuY29kZXx8JEksZz1JJiZJLnNlcmlhbGl6ZSxyO2lmKGc/cj1nKHQsSSk6cj1DLmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcgRUEodCxJKS50b1N0cmluZyhlKSxyKXtsZXQgbz1BLmluZGV4T2YoIiUyMyIpO28hPT0tMSYmKEE9QS5zbGljZSgwLG8pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStyfXJldHVybiBBfXZhciBrQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsSSxlKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDpJLHN5bmNocm9ub3VzOmU/ZS5zeW5jaHJvbm91czohMSxydW5XaGVuOmU/ZS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7Qy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oZSl7ZSE9PW51bGwmJnQoZSl9KX19LExBPWtBO3ZhciBhQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGR0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpFQTt2YXIgeXQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciB3dD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBtdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpkdCxGb3JtRGF0YTp5dCxCbG9iOnd0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIEpBPXt9O2VJKEpBLHtoYXNCcm93c2VyRW52OigpPT5wdCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFlLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+dGV9KTt2YXIgcHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsQWU9KEE9PnB0JiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksdGU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciB3PXsuLi5KQSwuLi5tdH07ZnVuY3Rpb24gSEEoQSx0KXtyZXR1cm4gSihBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oSSxlLGcscil7cmV0dXJuIHcuaXNOb2RlJiZDLmlzQnVmZmVyKEkpPyh0aGlzLmFwcGVuZChlLEkudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6ci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gSWUoQSl7cmV0dXJuIEMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBlZShBKXtsZXQgdD17fSxJPU9iamVjdC5rZXlzKEEpLGUsZz1JLmxlbmd0aCxyO2ZvcihlPTA7ZTxnO2UrKylyPUlbZV0sdFtyXT1BW3JdO3JldHVybiB0fWZ1bmN0aW9uIGdlKEEpe2Z1bmN0aW9uIHQoSSxlLGcscil7bGV0IG89SVtyKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgbj1OdW1iZXIuaXNGaW5pdGUoK28pLGE9cj49SS5sZW5ndGg7cmV0dXJuIG89IW8mJkMuaXNBcnJheShnKT9nLmxlbmd0aDpvLGE/KEMuaGFzT3duUHJvcChnLG8pP2dbb109W2dbb10sZV06Z1tvXT1lLCFuKTooKCFnW29dfHwhQy5pc09iamVjdChnW29dKSkmJihnW29dPVtdKSx0KEksZSxnW29dLHIpJiZDLmlzQXJyYXkoZ1tvXSkmJihnW29dPWVlKGdbb10pKSwhbil9aWYoQy5pc0Zvcm1EYXRhKEEpJiZDLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IEk9e307cmV0dXJuIEMuZm9yRWFjaEVudHJ5KEEsKGUsZyk9Pnt0KEllKGUpLGcsSSwwKX0pLEl9cmV0dXJuIG51bGx9dmFyIGNBPWdlO2Z1bmN0aW9uIHJlKEEsdCxJKXtpZihDLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksQy50cmltKEEpfWNhdGNoKGUpe2lmKGUubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgZX1yZXR1cm4oSXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBZQT17dHJhbnNpdGlvbmFsOmFBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxJKXtsZXQgZT1JLmdldENvbnRlbnRUeXBlKCl8fCIiLGc9ZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEscj1DLmlzT2JqZWN0KHQpO2lmKHImJkMuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxDLmlzRm9ybURhdGEodCkpcmV0dXJuIGc/SlNPTi5zdHJpbmdpZnkoY0EodCkpOnQ7aWYoQy5pc0FycmF5QnVmZmVyKHQpfHxDLmlzQnVmZmVyKHQpfHxDLmlzU3RyZWFtKHQpfHxDLmlzRmlsZSh0KXx8Qy5pc0Jsb2IodCkpcmV0dXJuIHQ7aWYoQy5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoQy5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IG47aWYocil7aWYoZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gSEEodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChuPUMuaXNGaWxlTGlzdCh0KSl8fGUuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEoobj97ImZpbGVzW10iOnR9OnQsYSYmbmV3IGEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiByfHxnPyhJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSkscmUodCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IEk9dGhpcy50cmFuc2l0aW9uYWx8fFlBLnRyYW5zaXRpb25hbCxlPUkmJkkuZm9yY2VkSlNPTlBhcnNpbmcsZz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZih0JiZDLmlzU3RyaW5nKHQpJiYoZSYmIXRoaXMucmVzcG9uc2VUeXBlfHxnKSl7bGV0IG89IShJJiZJLnNpbGVudEpTT05QYXJzaW5nKSYmZzt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2gobil7aWYobyl0aHJvdyBuLm5hbWU9PT0iU3ludGF4RXJyb3IiP2wuZnJvbShuLGwuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bn19cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57WUEuaGVhZGVyc1tBXT17fX0pO3ZhciBUPVlBO3ZhciBvZT1DLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLFN0PUE9PntsZXQgdD17fSxJLGUsZztyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihvKXtnPW8uaW5kZXhPZigiOiIpLEk9by5zdWJzdHJpbmcoMCxnKS50cmltKCkudG9Mb3dlckNhc2UoKSxlPW8uc3Vic3RyaW5nKGcrMSkudHJpbSgpLCEoIUl8fHRbSV0mJm9lW0ldKSYmKEk9PT0ic2V0LWNvb2tpZSI/dFtJXT90W0ldLnB1c2goZSk6dFtJXT1bZV06dFtJXT10W0ldP3RbSV0rIiwgIitlOmUpfSksdH07dmFyIEZ0PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24geihBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpDLmlzQXJyYXkoQSk/QS5tYXAoZkEpOlN0cmluZyhBKX1mdW5jdGlvbiBpZShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLEk9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxlO2Zvcig7ZT1JLmV4ZWMoQSk7KXRbZVsxXV09ZVsyXTtyZXR1cm4gdH12YXIgQ2U9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gYkEoQSx0LEksZSxnKXtpZihDLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHQsSSk7aWYoZyYmKHQ9SSksISFDLmlzU3RyaW5nKHQpKXtpZihDLmlzU3RyaW5nKGUpKXJldHVybiB0LmluZGV4T2YoZSkhPT0tMTtpZihDLmlzUmVnRXhwKGUpKXJldHVybiBlLnRlc3QodCl9fWZ1bmN0aW9uIEJlKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxJLGUpPT5JLnRvVXBwZXJDYXNlKCkrZSl9ZnVuY3Rpb24gbmUoQSx0KXtsZXQgST1DLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGUrSSx7dmFsdWU6ZnVuY3Rpb24oZyxyLG8pe3JldHVybiB0aGlzW2VdLmNhbGwodGhpcyx0LGcscixvKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxJLGUpe2xldCBnPXRoaXM7ZnVuY3Rpb24gcihuLGEsUSl7bGV0IEI9eihhKTtpZighQil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGk9Qy5maW5kS2V5KGcsQik7KCFpfHxnW2ldPT09dm9pZCAwfHxRPT09ITB8fFE9PT12b2lkIDAmJmdbaV0hPT0hMSkmJihnW2l8fGFdPWZBKG4pKX1sZXQgbz0obixhKT0+Qy5mb3JFYWNoKG4sKFEsQik9PnIoUSxCLGEpKTtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKHQsSSk6Qy5pc1N0cmluZyh0KSYmKHQ9dC50cmltKCkpJiYhQ2UodCk/byhTdCh0KSxJKTp0IT1udWxsJiZyKEksdCxlKSx0aGlzfWdldCh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtpZihlKXtsZXQgZz10aGlzW2VdO2lmKCFJKXJldHVybiBnO2lmKEk9PT0hMClyZXR1cm4gaWUoZyk7aWYoQy5pc0Z1bmN0aW9uKEkpKXJldHVybiBJLmNhbGwodGhpcyxnLGUpO2lmKEMuaXNSZWdFeHAoSSkpcmV0dXJuIEkuZXhlYyhnKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKGUmJnRoaXNbZV0hPT12b2lkIDAmJighSXx8YkEodGhpcyx0aGlzW2VdLGUsSSkpKX1yZXR1cm4hMX1kZWxldGUodCxJKXtsZXQgZT10aGlzLGc9ITE7ZnVuY3Rpb24gcihvKXtpZihvPXoobyksbyl7bGV0IG49Qy5maW5kS2V5KGUsbyk7biYmKCFJfHxiQShlLGVbbl0sbixJKSkmJihkZWxldGUgZVtuXSxnPSEwKX19cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSxnfWNsZWFyKHQpe2xldCBJPU9iamVjdC5rZXlzKHRoaXMpLGU9SS5sZW5ndGgsZz0hMTtmb3IoO2UtLTspe2xldCByPUlbZV07KCF0fHxiQSh0aGlzLHRoaXNbcl0scix0LCEwKSkmJihkZWxldGUgdGhpc1tyXSxnPSEwKX1yZXR1cm4gZ31ub3JtYWxpemUodCl7bGV0IEk9dGhpcyxlPXt9O3JldHVybiBDLmZvckVhY2godGhpcywoZyxyKT0+e2xldCBvPUMuZmluZEtleShlLHIpO2lmKG8pe0lbb109ZkEoZyksZGVsZXRlIElbcl07cmV0dXJufWxldCBuPXQ/QmUocik6U3RyaW5nKHIpLnRyaW0oKTtuIT09ciYmZGVsZXRlIElbcl0sSVtuXT1mQShnKSxlW25dPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChlLGcpPT57ZSE9bnVsbCYmZSE9PSExJiYoSVtnXT10JiZDLmlzQXJyYXkoZSk/ZS5qb2luKCIsICIpOmUpfSksSX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxJXSk9PnQrIjogIitJKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5JKXtsZXQgZT1uZXcgdGhpcyh0KTtyZXR1cm4gSS5mb3JFYWNoKGc9PmUuc2V0KGcpKSxlfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgZT0odGhpc1tGdF09dGhpc1tGdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxnPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIobyl7bGV0IG49eihvKTtlW25dfHwobmUoZyxvKSxlW25dPSEwKX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLHRoaXN9fTtQLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtDLnJlZHVjZURlc2NyaXB0b3JzKFAucHJvdG90eXBlLCh7dmFsdWU6QX0sdCk9PntsZXQgST10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChlKXt0aGlzW0ldPWV9fX0pO0MuZnJlZXplTWV0aG9kcyhQKTt2YXIgbT1QO2Z1bmN0aW9uIF8oQSx0KXtsZXQgST10aGlzfHxULGU9dHx8SSxnPW0uZnJvbShlLmhlYWRlcnMpLHI9ZS5kYXRhO3JldHVybiBDLmZvckVhY2goQSxmdW5jdGlvbihuKXtyPW4uY2FsbChJLHIsZy5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxnLm5vcm1hbGl6ZSgpLHJ9ZnVuY3Rpb24gdihBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFJ0KEEsdCxJKXtsLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGwuRVJSX0NBTkNFTEVELHQsSSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1DLmluaGVyaXRzKFJ0LGwse19fQ0FOQ0VMX186ITB9KTt2YXIgSD1SdDtmdW5jdGlvbiBNQShBLHQsSSl7bGV0IGU9SS5jb25maWcudmFsaWRhdGVTdGF0dXM7IUkuc3RhdHVzfHwhZXx8ZShJLnN0YXR1cyk/QShJKTp0KG5ldyBsKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrSS5zdGF0dXMsW2wuRVJSX0JBRF9SRVFVRVNULGwuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihJLnN0YXR1cy8xMDApLTRdLEkuY29uZmlnLEkucmVxdWVzdCxJKSl9dmFyIE50PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsSSxlLGcscil7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07Qy5pc051bWJlcihJKSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoSSkudG9HTVRTdHJpbmcoKSksQy5pc1N0cmluZyhlKSYmby5wdXNoKCJwYXRoPSIrZSksQy5pc1N0cmluZyhnKSYmby5wdXNoKCJkb21haW49IitnKSxyPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gcUEoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gS0EoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uICQoQSx0KXtyZXR1cm4gQSYmIXFBKHQpP0tBKEEsdCk6dH12YXIgVXQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLGU7ZnVuY3Rpb24gZyhyKXtsZXQgbz1yO3JldHVybiB0JiYoSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLG89SS5ocmVmKSxJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbykse2hyZWY6SS5ocmVmLHByb3RvY29sOkkucHJvdG9jb2w/SS5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6SS5ob3N0LHNlYXJjaDpJLnNlYXJjaD9JLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDpJLmhhc2g/SS5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTpJLmhvc3RuYW1lLHBvcnQ6SS5wb3J0LHBhdGhuYW1lOkkucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP0kucGF0aG5hbWU6Ii8iK0kucGF0aG5hbWV9fXJldHVybiBlPWcod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG8pe2xldCBuPUMuaXNTdHJpbmcobyk/ZyhvKTpvO3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiBPQShBKXtsZXQgdD0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gdCYmdFsxXXx8IiJ9ZnVuY3Rpb24gc2UoQSx0KXtBPUF8fDEwO2xldCBJPW5ldyBBcnJheShBKSxlPW5ldyBBcnJheShBKSxnPTAscj0wLG87cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjFlMyxmdW5jdGlvbihhKXtsZXQgUT1EYXRlLm5vdygpLEI9ZVtyXTtvfHwobz1RKSxJW2ddPWEsZVtnXT1RO2xldCBpPXIsZj0wO2Zvcig7aSE9PWc7KWYrPUlbaSsrXSxpPWklQTtpZihnPShnKzEpJUEsZz09PXImJihyPShyKzEpJUEpLFEtbzx0KXJldHVybjtsZXQgcz1CJiZRLUI7cmV0dXJuIHM/TWF0aC5yb3VuZChmKjFlMy9zKTp2b2lkIDB9fXZhciBHdD1zZTtmdW5jdGlvbiBrdChBLHQpe2xldCBJPTAsZT1HdCg1MCwyNTApO3JldHVybiBnPT57bGV0IHI9Zy5sb2FkZWQsbz1nLmxlbmd0aENvbXB1dGFibGU/Zy50b3RhbDp2b2lkIDAsbj1yLUksYT1lKG4pLFE9cjw9bztJPXI7bGV0IEI9e2xvYWRlZDpyLHRvdGFsOm8scHJvZ3Jlc3M6bz9yL286dm9pZCAwLGJ5dGVzOm4scmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJm8mJlE/KG8tcikvYTp2b2lkIDAsZXZlbnQ6Z307Qlt0PyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEoQil9fXZhciBRZT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLEx0PVFlJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSSxlKXtsZXQgZz1BLmRhdGEscj1tLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm8sd2l0aFhTUkZUb2tlbjpufT1BLGE7ZnVuY3Rpb24gUSgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQjtpZihDLmlzRm9ybURhdGEoZykpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilyLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChCPXIuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4udV09Qj9CLnNwbGl0KCI7IikubWFwKHk9PnkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107ci5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLnVdLmpvaW4oIjsgIikpfX1sZXQgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgYz1BLmF1dGgudXNlcm5hbWV8fCIiLHU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShjKyI6Iit1KSl9bGV0IGY9JChBLmJhc2VVUkwsQS51cmwpO2kub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoZixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxpLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIHMoKXtpZighaSlyZXR1cm47bGV0IGM9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gaSYmaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkseT17ZGF0YTohb3x8bz09PSJ0ZXh0Inx8bz09PSJqc29uIj9pLnJlc3BvbnNlVGV4dDppLnJlc3BvbnNlLHN0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDppfTtNQShmdW5jdGlvbihOKXtJKE4pLFEoKX0sZnVuY3Rpb24oTil7ZShOKSxRKCl9LHkpLGk9bnVsbH1pZigib25sb2FkZW5kImluIGk/aS5vbmxvYWRlbmQ9czppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFpfHxpLnJlYWR5U3RhdGUhPT00fHxpLnN0YXR1cz09PTAmJiEoaS5yZXNwb25zZVVSTCYmaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocyl9LGkub25hYm9ydD1mdW5jdGlvbigpe2kmJihlKG5ldyBsKCJSZXF1ZXN0IGFib3J0ZWQiLGwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbCl9LGkub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IGwoIk5ldHdvcmsgRXJyb3IiLGwuRVJSX05FVFdPUkssQSxpKSksaT1udWxsfSxpLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIix5PUEudHJhbnNpdGlvbmFsfHxhQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksZShuZXcgbCh1LHkuY2xhcmlmeVRpbWVvdXRFcnJvcj9sLkVUSU1FRE9VVDpsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobiYmQy5pc0Z1bmN0aW9uKG4pJiYobj1uKEEpKSxufHxuIT09ITEmJlV0KGYpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmTnQucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfWc9PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gaSYmQy5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24odSx5KXtpLnNldFJlcXVlc3RIZWFkZXIoeSx1KX0pLEMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoaS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksbyYmbyE9PSJqc29uIiYmKGkucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS51cGxvYWQmJmkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYT1jPT57aSYmKGUoIWN8fGMudHlwZT9uZXcgSChudWxsLEEsaSk6YyksaS5hYm9ydCgpLGk9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9hKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IEU9T0EoZik7aWYoRSYmdy5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtlKG5ldyBsKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGwuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59aS5zZW5kKGd8fG51bGwpfSl9O3ZhciBUQT17aHR0cDpRQSx4aHI6THR9O0MuZm9yRWFjaChUQSwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBKdD1BPT5gLSAke0F9YCxFZT1BPT5DLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbEE9e2dldEFkYXB0ZXI6QT0+e0E9Qy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxJLGUsZz17fTtmb3IobGV0IHI9MDtyPHQ7cisrKXtJPUFbcl07bGV0IG87aWYoZT1JLCFFZShJKSYmKGU9VEFbKG89U3RyaW5nKEkpKS50b0xvd2VyQ2FzZSgpXSxlPT09dm9pZCAwKSl0aHJvdyBuZXcgbChgVW5rbm93biBhZGFwdGVyIFwnJHtvfVwnYCk7aWYoZSlicmVhaztnW298fCIlMjMiK3JdPWV9aWYoIWUpe2xldCByPU9iamVjdC5lbnRyaWVzKGcpLm1hcCgoW24sYV0pPT5gYWRhcHRlciAke259IGArKGE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPXQ/ci5sZW5ndGg+MT9gc2luY2UgOiUwQWArci5tYXAoSnQpLmpvaW4oYCUwQWApOiIgIitKdChyWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBsKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIGV9LGFkYXB0ZXJzOlRBfTtmdW5jdGlvbiBQQShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSChudWxsLEEpfWZ1bmN0aW9uIERBKEEpe3JldHVybiBQQShBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGxBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxULmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFBBKEEpLGUuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUpLGUuaGVhZGVycz1tLmZyb20oZS5oZWFkZXJzKSxlfSxmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8KFBBKEEpLGUmJmUucmVzcG9uc2UmJihlLnJlc3BvbnNlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlLnJlc3BvbnNlKSxlLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKGUucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChlKX0pfXZhciBIdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgST17fTtmdW5jdGlvbiBlKFEsQixpKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KFEpJiZDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZS5jYWxsKHtjYXNlbGVzczppfSxRLEIpOkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlKHt9LEIpOkMuaXNBcnJheShCKT9CLnNsaWNlKCk6Qn1mdW5jdGlvbiBnKFEsQixpKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSxpKX1lbHNlIHJldHVybiBlKFEsQixpKX1mdW5jdGlvbiByKFEsQil7aWYoIUMuaXNVbmRlZmluZWQoQikpcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG8oUSxCKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSl9ZWxzZSByZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbihRLEIsaSl7aWYoaSBpbiB0KXJldHVybiBlKFEsQik7aWYoaSBpbiBBKXJldHVybiBlKHZvaWQgMCxRKX1sZXQgYT17dXJsOnIsbWV0aG9kOnIsZGF0YTpyLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpuLGhlYWRlcnM6KFEsQik9PmcoSHQoUSksSHQoQiksITApfTtyZXR1cm4gQy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24oQil7bGV0IGk9YVtCXXx8ZyxmPWkoQVtCXSx0W0JdLEIpO0MuaXNVbmRlZmluZWQoZikmJmkhPT1ufHwoSVtCXT1mKX0pLEl9dmFyIHVBPSIxLjYuOCI7dmFyIHhBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSx0KT0+e3hBW0FdPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09PUF8fCJhIisodDwxPyJuICI6IiAiKStBfX0pO3ZhciBZdD17fTt4QS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxJLGUpe2Z1bmN0aW9uIGcocixvKXtyZXR1cm4iW0F4aW9zIHYiK3VBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK3IrIlwnIitvKyhlPyIuICIrZToiIil9cmV0dXJuKHIsbyxuKT0+e2lmKHQ9PT0hMSl0aHJvdyBuZXcgbChnKG8sIiBoYXMgYmVlbiByZW1vdmVkIisoST8iIGluICIrSToiIikpLGwuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBJJiYhWXRbb10mJihZdFtvXT0hMCxjb25zb2xlLndhcm4oZyhvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitJKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLHQ/dChyLG8sbik6ITB9fTtmdW5jdGlvbiBhZShBLHQsSSl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBsKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxnPWUubGVuZ3RoO2Zvcig7Zy0tID4wOyl7bGV0IHI9ZVtnXSxvPXRbcl07aWYobyl7bGV0IG49QVtyXSxhPW49PT12b2lkIDB8fG8obixyLEEpO2lmKGEhPT0hMCl0aHJvdyBuZXcgbCgib3B0aW9uICIrcisiIG11c3QgYmUgIithLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKEkhPT0hMCl0aHJvdyBuZXcgbCgiVW5rbm93biBvcHRpb24gIityLGwuRVJSX0JBRF9PUFRJT04pfX12YXIgaEE9e2Fzc2VydE9wdGlvbnM6YWUsdmFsaWRhdG9yczp4QX07dmFyIFk9aEEudmFsaWRhdG9ycyx4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdHM9dCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgTEEscmVzcG9uc2U6bmV3IExBfX1hc3luYyByZXF1ZXN0KHQsSSl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KHQsSSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgZztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShnPXt9KTpnPW5ldyBFcnJvcjtsZXQgcj1nLnN0YWNrP2cuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7ZS5zdGFjaz9yJiYhU3RyaW5nKGUuc3RhY2spLmVuZHNXaXRoKHIucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihlLnN0YWNrKz1gJTBBYCtyKTplLnN0YWNrPXJ9dGhyb3cgZX19X3JlcXVlc3QodCxJKXt0eXBlb2YgdD09InN0cmluZyI/KEk9SXx8e30sSS51cmw9dCk6ST10fHx7fSxJPWsodGhpcy5kZWZhdWx0cyxJKTtsZXR7dHJhbnNpdGlvbmFsOmUscGFyYW1zU2VyaWFsaXplcjpnLGhlYWRlcnM6cn09STtlIT09dm9pZCAwJiZoQS5hc3NlcnRPcHRpb25zKGUse3NpbGVudEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbil9LCExKSxnIT1udWxsJiYoQy5pc0Z1bmN0aW9uKGcpP0kucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOmd9OmhBLmFzc2VydE9wdGlvbnMoZyx7ZW5jb2RlOlkuZnVuY3Rpb24sc2VyaWFsaXplOlkuZnVuY3Rpb259LCEwKSksSS5tZXRob2Q9KEkubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89ciYmQy5tZXJnZShyLmNvbW1vbixyW0kubWV0aG9kXSk7ciYmQy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgcltFXX0pLEkuaGVhZGVycz1tLmNvbmNhdChvLHIpO2xldCBuPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3R5cGVvZiBjLnJ1bldoZW49PSJmdW5jdGlvbiImJmMucnVuV2hlbihJKT09PSExfHwoYT1hJiZjLnN5bmNocm9ub3VzLG4udW5zaGlmdChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKSl9KTtsZXQgUT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGMpe1EucHVzaChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKX0pO2xldCBCLGk9MCxmO2lmKCFhKXtsZXQgRT1bREEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxuKSxFLnB1c2guYXBwbHkoRSxRKSxmPUUubGVuZ3RoLEI9UHJvbWlzZS5yZXNvbHZlKEkpO2k8ZjspQj1CLnRoZW4oRVtpKytdLEVbaSsrXSk7cmV0dXJuIEJ9Zj1uLmxlbmd0aDtsZXQgcz1JO2ZvcihpPTA7aTxmOyl7bGV0IEU9bltpKytdLGM9bltpKytdO3RyeXtzPUUocyl9Y2F0Y2godSl7Yy5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXtCPURBLmNhbGwodGhpcyxzKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKGk9MCxmPVEubGVuZ3RoO2k8ZjspQj1CLnRoZW4oUVtpKytdLFFbaSsrXSk7cmV0dXJuIEJ9Z2V0VXJpKHQpe3Q9ayh0aGlzLmRlZmF1bHRzLHQpO2xldCBJPSQodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gWChJLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe3gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKEksZSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKGV8fHt9LHttZXRob2Q6dCx1cmw6SSxkYXRhOihlfHx7fSkuZGF0YX0pKX19KTtDLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBJKGUpe3JldHVybiBmdW5jdGlvbihyLG8sbil7cmV0dXJuIHRoaXMucmVxdWVzdChrKG58fHt9LHttZXRob2Q6dCxoZWFkZXJzOmU/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTpvfSkpfX14LnByb3RvdHlwZVt0XT1JKCkseC5wcm90b3R5cGVbdCsiRm9ybSJdPUkoITApfSk7dmFyIEFBPXg7dmFyIGpBPWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBJO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXtJPXJ9KTtsZXQgZT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGc9PntpZighZS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1lLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOyllLl9saXN0ZW5lcnNbcl0oZyk7ZS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1nPT57bGV0IHIsbz1uZXcgUHJvbWlzZShuPT57ZS5zdWJzY3JpYmUobikscj1ufSkudGhlbihnKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKHIpfSxvfSx0KGZ1bmN0aW9uKHIsbyxuKXtlLnJlYXNvbnx8KGUucmVhc29uPW5ldyBIKHIsbyxuKSxJKGUucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IEk9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7SSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEksMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihnKXt0PWd9KSxjYW5jZWw6dH19fSxidD1qQTtmdW5jdGlvbiBXQShBKXtyZXR1cm4gZnVuY3Rpb24oSSl7cmV0dXJuIEEuYXBwbHkobnVsbCxJKX19ZnVuY3Rpb24gWkEoQSl7cmV0dXJuIEMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFZBPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhWQSkuZm9yRWFjaCgoW0EsdF0pPT57VkFbdF09QX0pO3ZhciBNdD1WQTtmdW5jdGlvbiBxdChBKXtsZXQgdD1uZXcgQUEoQSksST1XKEFBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBDLmV4dGVuZChJLEFBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksQy5leHRlbmQoSSx0LG51bGwse2FsbE93bktleXM6ITB9KSxJLmNyZWF0ZT1mdW5jdGlvbihnKXtyZXR1cm4gcXQoayhBLGcpKX0sSX12YXIgaD1xdChUKTtoLkF4aW9zPUFBO2guQ2FuY2VsZWRFcnJvcj1IO2guQ2FuY2VsVG9rZW49YnQ7aC5pc0NhbmNlbD12O2guVkVSU0lPTj11QTtoLnRvRm9ybURhdGE9SjtoLkF4aW9zRXJyb3I9bDtoLkNhbmNlbD1oLkNhbmNlbGVkRXJyb3I7aC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtoLnNwcmVhZD1XQTtoLmlzQXhpb3NFcnJvcj1aQTtoLm1lcmdlQ29uZmlnPWs7aC5BeGlvc0hlYWRlcnM9bTtoLmZvcm1Ub0pTT049QT0+Y0EoQy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtoLmdldEFkYXB0ZXI9bEEuZ2V0QWRhcHRlcjtoLkh0dHBTdGF0dXNDb2RlPU10O2guZGVmYXVsdD1oO3ZhciBkQT1oO3ZhcntBeGlvczppbyxBeGlvc0Vycm9yOkNvLENhbmNlbGVkRXJyb3I6Qm8saXNDYW5jZWw6bm8sQ2FuY2VsVG9rZW46c28sVkVSU0lPTjpRbyxhbGw6RW8sQ2FuY2VsOmFvLGlzQXhpb3NFcnJvcjpjbyxzcHJlYWQ6Zm8sdG9Gb3JtRGF0YTpsbyxBeGlvc0hlYWRlcnM6RG8sSHR0cFN0YXR1c0NvZGU6dW8sZm9ybVRvSlNPTjpobyxnZXRBZGFwdGVyOnlvLG1lcmdlQ29uZmlnOndvfT1kQTt2YXIgdEEsTCx6QSxYQT17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe3pBPW5ldyBVaW50OEFycmF5KEwuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSx5QT1jbGFzc3tpbml0KCl7cmV0dXJuIHRBfHwodHlwZW9mIGZldGNoPCJ1Ij90QT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK0t0KS50aGVuKHQ9PnQuYXJyYXlCdWZmZXIoKSkudGhlbih0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0LFhBKSkudGhlbih0aGlzLl9pbml0KTp0QT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShLdCwiYmFzZTY0IiksWEEpLnRoZW4odGhpcy5faW5pdCksdEEpfV9pbml0KHQpe0w9dC5pbnN0YW5jZSxYQS5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUodCxJPTApe2lmKCFMKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBlPXQuYnl0ZUxlbmd0aCxnPUwuZXhwb3J0cy5tYWxsb2MoZSk7ekEuc2V0KHQsZyksST1JfHxOdW1iZXIoTC5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUoZyxlKSk7bGV0IHI9TC5leHBvcnRzLm1hbGxvYyhJKSxvPUwuZXhwb3J0cy5aU1REX2RlY29tcHJlc3MocixJLGcsZSksbj16QS5zbGljZShyLHIrbyk7cmV0dXJuIEwuZXhwb3J0cy5mcmVlKGcpLEwuZXhwb3J0cy5mcmVlKHIpLG59fSxLdD0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBPdD1uZXcgeUEsVHQ9ITE7YXN5bmMgZnVuY3Rpb24gY2UoQSx0LEkpe2xldCBlPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP2U9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP2U9QTplPWAke3R9LyR7QX1gLGUuZW5kc1dpdGgoIi5qcyIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTMpKSxlLmVuZHNXaXRoKCIud2FzbSIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTUpKTtsZXQgZz1gJHtlfS53YXNtYCxyPWF3YWl0IGRBLmdldChgJHtnfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6SX0pO1R0fHwoYXdhaXQgT3QuaW5pdCgpLFR0PSEwKTtsZXQgbj1PdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7ZX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIFB0PWNlO3ZhciB3QT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGZlKEEsdCxJKXtsZXQgZT1BLGc9QSxyPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKGU9bmV3IFVSTChBLmhyZWYpLGc9ZS5ocmVmKSx3QS5oYXMoZyk/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLFB0KGUsdCxJKSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIHh0PWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9dWU7ZnVuY3Rpb24gaGUoQSx0KXtsZXQgST1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e0k9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDg6e0k9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFMuVUludDE2OntJPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFMuSW50MTY6e0k9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7ST1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDMyOntJPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ0ludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQzMjp7ST1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDY0OntJPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ST1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ST1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIEl9dmFyIEc9aGU7dmFyIFp0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGp0PW5ldyBUZXh0RW5jb2RlcixXdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSx0KXtsZXQgST17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3Blbih0LEkuZmxhZ3MpLHI9QS5mc19zdGF0KHQpLnNpemUsbz1udWxsO1p0P289bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOm89bmV3IEFycmF5QnVmZmVyKHIpO2xldCBuPW5ldyBVaW50OEFycmF5KG8pO3JldHVybiBBLmZzX3JlYWQoZSxuLDAsciwwKSxBLmZzX2Nsb3NlKGUpLG59ZnVuY3Rpb24gVnQoQSx0LEkpe2xldCBlPW51bGw7WnQ/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoSSk6ZT1uZXcgQXJyYXlCdWZmZXIoSSk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxJKTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiBkKEEsdCxJLGUpe2xldCBnPTA7cmV0dXJuIHQhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGUsdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gTShBLHQsSSl7bGV0IGU9SlNPTi5zdHJpbmdpZnkodCksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gcChBLHQsSSxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLG89VnQoQSxnLHIpO3JldHVybiBHKGUsby5idWZmZXIpfWZ1bmN0aW9uIG1BKEEsdCl7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksZT1BLlVURjhUb1N0cmluZyhJKTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLHQsSSxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxCKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IGk9anQuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IGk9anQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IGk9US5kYXRhLmRhdGEsZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IGk9US5kYXRhLGY9ZChBLGkuZGF0YSxCLDApLHM9ZChBLGkuZGlyZWN0aW9uLEIsMSksRT10eXBlb2YgaS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShpLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOmkuaW1hZ2VUeXBlLG5hbWU6aS5uYW1lLG9yaWdpbjppLm9yaWdpbixzcGFjaW5nOmkuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsc2l6ZTppLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtNKEEsYyxCKTticmVha31jYXNlIEQuTWVzaDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5jZWxscyxCLDEpLEU9ZChBLGkucG9pbnREYXRhLEIsMiksYz1kKEEsaS5jZWxsRGF0YSxCLDMpLHU9e21lc2hUeXBlOmkubWVzaFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczppLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsY2VsbEJ1ZmZlclNpemU6aS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsdSxCKTticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkucG9pbnREYXRhLEIsMSksRT17cG9pbnRTZXRUeXBlOmkucG9pbnRTZXRUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YH07TShBLEUsQik7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnZlcnRpY2VzLEIsMSksRT1kKEEsaS5saW5lcyxCLDIpLGM9ZChBLGkucG9seWdvbnMsQiwzKSx1PWQoQSxpLnRyaWFuZ2xlU3RyaXBzLEIsNCkseT1kKEEsaS5wb2ludERhdGEsQiw1KSxSPWQoQSxpLnBvaW50RGF0YSxCLDYpLE49e3BvbHlEYXRhVHlwZTppLnBvbHlEYXRhVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6aS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsbGluZXNCdWZmZXJTaXplOmkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTppLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6aS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07TShBLE4sQik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgbz1BLmdldE1vZHVsZVN0ZG91dCgpLG49QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiBJIT1udWxsJiZJLmxlbmd0aD4wJiZyPT09MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7bGV0IGk9bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9e2RhdGE6V3QuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPUpTT04ucGFyc2UoV3QuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pO2k9e2RhdGE6VnQoQSxzLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgcz1tQShBLEIpO3MuZGF0YT1wKEEsQiwwLHMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLHMuZGlyZWN0aW9uPXAoQSxCLDEsai5GbG9hdDY0KSxzLm1ldGFkYXRhPW5ldyBNYXAocy5tZXRhZGF0YSksaT1zO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxzPjA/cy5jZWxscz1wKEEsQiwxLHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOnMuY2VsbHM9RyhzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMixzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsMyxzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgcz1tQShBLEIpO2NvbnNvbGUubG9nKHMpLHMubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwxLHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxqLkZsb2F0MzIpOnMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXkscy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9zLnZlcnRpY2VzPXAoQSxCLDEsUy5VSW50MzIpOnMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LHMubGluZXNCdWZmZXJTaXplPjA/cy5saW5lcz1wKEEsQiwyLFMuVUludDMyKTpzLmxpbmVzPW5ldyBVaW50MzJBcnJheSxzLnBvbHlnb25zQnVmZmVyU2l6ZT4wP3MucG9seWdvbnM9cChBLEIsMyxTLlVJbnQzMik6cy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXkscy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9zLnRyaWFuZ2xlU3RyaXBzPXAoQSxCLDQsUy5VSW50MzIpOnMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDUscy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsNixzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOlEudHlwZSxkYXRhOml9O2EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpyLHN0ZG91dDpvLHN0ZGVycjpuLG91dHB1dHM6YX19dmFyIFh0PXllO3ZhciB3ZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gbWUoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBJPVtdO2ZvcihsZXQgZT0wO2U8QS5sZW5ndGg7ZSsrKXtsZXQgZz1wZShBW2VdLHQpO2chPT1udWxsJiZJLnB1c2goZyl9cmV0dXJuIEl9ZnVuY3Rpb24gcGUoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBJPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP0k9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoST1BKSx3ZSYmSSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9JOkkuc2xpY2UoMCl9dmFyIHp0PW1lO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBfdD1TZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgdnQ9RmU7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyICR0PVJlO2FzeW5jIGZ1bmN0aW9uIE5lKEEsdCxJLGUpe2xldCBnPVh0KEEsdCxJLGUpLHI9W107cmV0dXJuIGcub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8udHlwZT09PUQuQmluYXJ5U3RyZWFtfHxvLnR5cGU9PT1ELkJpbmFyeUZpbGUpe2xldCBuPW8uZGF0YTtyLnB1c2gobil9ZWxzZSBpZihvLnR5cGU9PT1ELkltYWdlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLl90KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuTWVzaCl7bGV0IG49by5kYXRhO3IucHVzaCguLi52dChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELlBvbHlEYXRhKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLiR0KG4pKX19KSxGQShnLHp0KHIsITApKX12YXIgQUk9TmU7dmFyIFVlPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsSSxlLGcscil7bGV0IG89YXdhaXQgeHQoQSx0LHIpO3JldHVybiBhd2FpdCBBSShvLEksZSxnKX19O2lBKFVlKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO2J0KFJ0KTtleHBvcnR7eiBhcyBjb21wcmVzc1N0cmluZ2lmeSxVQSBhcyBnZXREZWZhdWx0V2ViV29ya2VyLGogYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsRkEgYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCx1byBhcyBpbWFnZVRvSnNvbixmbyBhcyBqc29uVG9JbWFnZSxtbyBhcyBqc29uVG9NZXNoLGhvIGFzIGpzb25Ub1BvbHlEYXRhLHBvIGFzIG1lc2hUb0pzb24sViBhcyBwYXJzZVN0cmluZ0RlY29tcHJlc3MseW8gYXMgcG9seURhdGFUb0pzb24sWGEgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixidCBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxXYSBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLE5BIGFzIHZlcnNpb259OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" +default_js_module = """data:text/javascript;base64,dmFyIFV0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgTnQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlVdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIFR0PSIzLjMuMCIsTkE9VHQ7dmFyIEd0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0seT1HdDt2YXIgUHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGs9UHQ7ZnVuY3Rpb24gTHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIHkuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSB5LkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIHkuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIHkuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSB5LlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSB5LkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgeS5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSB5LkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIGsuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2Ugay5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIHc9THQ7dmFyIHh0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sRz14dDt2YXIgVEE9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHQ9eS5VSW50OCxyPUcuU2NhbGFyLG89MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9dCx0aGlzLnBpeGVsVHlwZT1yLHRoaXMuY29tcG9uZW50cz1vfX0sdWU9VEE7ZnVuY3Rpb24gT3QoQSxlLHQscixvKXtBW3IrdCplXT1vfXZhciBmZT1PdDt2YXIgR0E9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IHVlKXt0aGlzLmltYWdlVHlwZT1lO2xldCB0PWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheSh0KSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkodCksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheSh0KnQpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCByPTA7cjx0O3IrKylmZSh0aGlzLmRpcmVjdGlvbix0LHIsciwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHQpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LFBBPUdBO3ZhciBMQT1jbGFzc3tkaW1lbnNpb247cG9pbnRDb21wb25lbnRUeXBlO3BvaW50UGl4ZWxDb21wb25lbnRUeXBlO3BvaW50UGl4ZWxUeXBlO3BvaW50UGl4ZWxDb21wb25lbnRzO2NlbGxDb21wb25lbnRUeXBlO2NlbGxQaXhlbENvbXBvbmVudFR5cGU7Y2VsbFBpeGVsVHlwZTtjZWxsUGl4ZWxDb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PWsuRmxvYXQzMixyPWsuRmxvYXQzMixvPUcuU2NhbGFyLG49MSxpPXkuSW50MzIsZz1rLkZsb2F0MzIsbD1HLlNjYWxhcixCPTEpe3RoaXMuZGltZW5zaW9uPWUsdGhpcy5wb2ludENvbXBvbmVudFR5cGU9dCx0aGlzLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlPXIsdGhpcy5wb2ludFBpeGVsVHlwZT1vLHRoaXMucG9pbnRQaXhlbENvbXBvbmVudHM9bix0aGlzLmNlbGxDb21wb25lbnRUeXBlPWksdGhpcy5jZWxsUGl4ZWxDb21wb25lbnRUeXBlPWcsdGhpcy5jZWxsUGl4ZWxUeXBlPWwsdGhpcy5jZWxsUGl4ZWxDb21wb25lbnRzPUJ9fSxwZT1MQTt2YXIgeEE9Y2xhc3N7bWVzaFR5cGU7bmFtZT0iTWVzaCI7bnVtYmVyT2ZQb2ludHM7cG9pbnRzO251bWJlck9mUG9pbnRQaXhlbHM7cG9pbnREYXRhO251bWJlck9mQ2VsbHM7Y2VsbHM7Y2VsbEJ1ZmZlclNpemU7bnVtYmVyT2ZDZWxsUGl4ZWxzO2NlbGxEYXRhO2NvbnN0cnVjdG9yKGU9bmV3IHBlKXt0aGlzLm1lc2hUeXBlPWUsdGhpcy5uYW1lPSJNZXNoIix0aGlzLm51bWJlck9mUG9pbnRzPTAsdGhpcy5wb2ludHM9bnVsbCx0aGlzLm51bWJlck9mUG9pbnRQaXhlbHM9MCx0aGlzLnBvaW50RGF0YT1udWxsLHRoaXMubnVtYmVyT2ZDZWxscz0wLHRoaXMuY2VsbEJ1ZmZlclNpemU9MCx0aGlzLmNlbGxzPW51bGwsdGhpcy5udW1iZXJPZkNlbGxQaXhlbHM9MCx0aGlzLmNlbGxEYXRhPW51bGx9fSxPQT14QTt2YXIgSkE9Y2xhc3N7cG9pbnRQaXhlbENvbXBvbmVudFR5cGU7cG9pbnRQaXhlbFR5cGU7cG9pbnRQaXhlbENvbXBvbmVudHM7Y2VsbFBpeGVsQ29tcG9uZW50VHlwZTtjZWxsUGl4ZWxUeXBlO2NlbGxQaXhlbENvbXBvbmVudHM7Y29uc3RydWN0b3IoZT1rLkZsb2F0MzIsdD1HLlNjYWxhcixyPTEsbz1rLkZsb2F0MzIsbj1HLlNjYWxhcixpPTEpe3RoaXMucG9pbnRQaXhlbENvbXBvbmVudFR5cGU9ZSx0aGlzLnBvaW50UGl4ZWxUeXBlPXQsdGhpcy5wb2ludFBpeGVsQ29tcG9uZW50cz1yLHRoaXMuY2VsbFBpeGVsQ29tcG9uZW50VHlwZT1vLHRoaXMuY2VsbFBpeGVsVHlwZT1uLHRoaXMuY2VsbFBpeGVsQ29tcG9uZW50cz1pfX0sZGU9SkE7dmFyIE1BPWNsYXNze3BvbHlEYXRhVHlwZTtuYW1lPSJQb2x5RGF0YSI7bnVtYmVyT2ZQb2ludHM7cG9pbnRzO3ZlcnRpY2VzQnVmZmVyU2l6ZTt2ZXJ0aWNlcztsaW5lc0J1ZmZlclNpemU7bGluZXM7cG9seWdvbnNCdWZmZXJTaXplO3BvbHlnb25zO3RyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTt0cmlhbmdsZVN0cmlwcztudW1iZXJPZlBvaW50UGl4ZWxzO3BvaW50RGF0YTtudW1iZXJPZkNlbGxQaXhlbHM7Y2VsbERhdGE7Y29uc3RydWN0b3IoZT1uZXcgZGUpe3RoaXMucG9seURhdGFUeXBlPWUsdGhpcy5wb2x5RGF0YVR5cGU9ZSx0aGlzLm5hbWU9IlBvbHlEYXRhIix0aGlzLm51bWJlck9mUG9pbnRzPTAsdGhpcy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSx0aGlzLnZlcnRpY2VzQnVmZmVyU2l6ZT0wLHRoaXMudmVydGljZXM9bnVsbCx0aGlzLmxpbmVzQnVmZmVyU2l6ZT0wLHRoaXMubGluZXM9bnVsbCx0aGlzLnBvbHlnb25zQnVmZmVyU2l6ZT0wLHRoaXMucG9seWdvbnM9bnVsbCx0aGlzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT0wLHRoaXMudHJpYW5nbGVTdHJpcHM9bnVsbCx0aGlzLm51bWJlck9mUG9pbnRQaXhlbHM9MCx0aGlzLnBvaW50RGF0YT1udWxsLHRoaXMubnVtYmVyT2ZDZWxsUGl4ZWxzPTAsdGhpcy5jZWxsRGF0YT1udWxsfX0sSEE9TUE7dmFyIEp0PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0scD1KdDt2YXIgeWU9U3ltYm9sKCJDb21saW5rLnByb3h5IiksTXQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksS0E9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLFlBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxJQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksaGU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsSHQ9e2NhbkhhbmRsZTpBPT5oZShBKSYmQVt5ZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gRGUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLFdBKEEpfX0sWXQ9e2NhbkhhbmRsZTpBPT5oZShBKSYmSUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LHdlPW5ldyBNYXAoW1sicHJveHkiLEh0XSxbInRocm93IixZdF1dKTtmdW5jdGlvbiBxdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRGUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG8pe2lmKCFvfHwhby5kYXRhKXJldHVybjtpZighcXQodCxvLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7by5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6bix0eXBlOmkscGF0aDpnfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxvLmRhdGEpLGw9KG8uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoTyksQjt0cnl7bGV0IEk9Zy5zbGljZSgwLC0xKS5yZWR1Y2UoKFEsQyk9PlFbQ10sQSkscz1nLnJlZHVjZSgoUSxDKT0+UVtDXSxBKTtzd2l0Y2goaSl7Y2FzZSJHRVQiOkI9czticmVhaztjYXNlIlNFVCI6SVtnLnNsaWNlKC0xKVswXV09TyhvLmRhdGEudmFsdWUpLEI9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6Qj1zLmFwcGx5KEksbCk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgUT1uZXcgcyguLi5sKTtCPV90KFEpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6USxwb3J0MjpDfT1uZXcgTWVzc2FnZUNoYW5uZWw7RGUoQSxDKSxCPXZBKFEsW1FdKX1icmVhaztjYXNlIlJFTEVBU0UiOkI9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChJKXtCPXt2YWx1ZTpJLFtJQV06MH19UHJvbWlzZS5yZXNvbHZlKEIpLmNhdGNoKEk9Pih7dmFsdWU6SSxbSUFdOjB9KSkudGhlbihJPT57bGV0W3MsUV09QkEoSSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm59KSxRKSxpPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxTZShlKSxZQSBpbiBBJiZ0eXBlb2YgQVtZQV09PSJmdW5jdGlvbiImJkFbWUFdKCkpfSkuY2F0Y2goST0+e2xldFtzLFFdPUJBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbSUFdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7aWQ6bn0pLFEpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gS3QoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gU2UoQSl7S3QoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBXQShBLGUpe3JldHVybiBxQShBLFtdLGUpfWZ1bmN0aW9uIGFBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBiZShBKXtyZXR1cm4gTShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntTZShBKX0pfXZhciBnQT1uZXcgV2Vha01hcCxDQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oZ0EuZ2V0KEEpfHwwKS0xO2dBLnNldChBLGUpLGU9PT0wJiZiZShBKX0pO2Z1bmN0aW9uIFd0KEEsZSl7bGV0IHQ9KGdBLmdldChlKXx8MCkrMTtnQS5zZXQoZSx0KSxDQSYmQ0EucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIHZ0KEEpe0NBJiZDQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIHFBKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbz1uZXcgUHJveHkodCx7Z2V0KG4saSl7aWYoYUEociksaT09PUtBKXJldHVybigpPT57dnQobyksYmUoQSkscj0hMH07aWYoaT09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtsZXQgZz1NKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChsPT5sLnRvU3RyaW5nKCkpfSkudGhlbihPKTtyZXR1cm4gZy50aGVuLmJpbmQoZyl9cmV0dXJuIHFBKEEsWy4uLmUsaV0pfSxzZXQobixpLGcpe2FBKHIpO2xldFtsLEJdPUJBKGcpO3JldHVybiBNKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxpXS5tYXAoST0+SS50b1N0cmluZygpKSx2YWx1ZTpsfSxCKS50aGVuKE8pfSxhcHBseShuLGksZyl7YUEocik7bGV0IGw9ZVtlLmxlbmd0aC0xXTtpZihsPT09TXQpcmV0dXJuIE0oQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihPKTtpZihsPT09ImJpbmQiKXJldHVybiBxQShBLGUuc2xpY2UoMCwtMSkpO2xldFtCLEldPW1lKGcpO3JldHVybiBNKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKHM9PnMudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkJ9LEkpLnRoZW4oTyl9LGNvbnN0cnVjdChuLGkpe2FBKHIpO2xldFtnLGxdPW1lKGkpO3JldHVybiBNKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChCPT5CLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpnfSxsKS50aGVuKE8pfX0pO3JldHVybiBXdChvLEEpLG99ZnVuY3Rpb24ganQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gbWUoQSl7bGV0IGU9QS5tYXAoQkEpO3JldHVybltlLm1hcCh0PT50WzBdKSxqdChlLm1hcCh0PT50WzFdKSldfXZhciBrZT1uZXcgV2Vha01hcDtmdW5jdGlvbiB2QShBLGUpe3JldHVybiBrZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIF90KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1t5ZV06ITB9KX1mdW5jdGlvbiBCQShBKXtmb3IobGV0W2UsdF1vZiB3ZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isb109dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sb119cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGtlLmdldChBKXx8W11dfWZ1bmN0aW9uIE8oQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gd2UuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBNKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBvPXp0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBuKGkpeyFpLmRhdGF8fCFpLmRhdGEuaWR8fGkuZGF0YS5pZCE9PW98fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG4pLHIoaS5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpvfSxlKSx0KX0pfWZ1bmN0aW9uIHp0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBaKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6VnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOnpBfT1PYmplY3QsY0E9KEE9PmU9PntsZXQgdD1WdC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTj1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+Y0EoZSk9PT1BKSxFQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6SH09QXJyYXksWD1FQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gWnQoQSl7cmV0dXJuIEEhPT1udWxsJiYhWChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFYKEEuY29uc3RydWN0b3IpJiZSKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBOZT1OKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIFh0KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmTmUoQS5idWZmZXIpLGV9dmFyICR0PUVBKCJzdHJpbmciKSxSPUVBKCJmdW5jdGlvbiIpLFRlPUVBKCJudW1iZXIiKSxRQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLEFyPUE9PkE9PT0hMHx8QT09PSExLGxBPUE9PntpZihjQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPXpBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LGVyPU4oIkRhdGUiKSx0cj1OKCJGaWxlIikscnI9TigiQmxvYiIpLG9yPU4oIkZpbGVMaXN0IiksbnI9QT0+UUEoQSkmJlIoQS5waXBlKSxpcj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8UihBLmFwcGVuZCkmJigoZT1jQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJlIoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sc3I9TigiVVJMU2VhcmNoUGFyYW1zIiksYXI9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uICQoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixvO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxIKEEpKWZvcihyPTAsbz1BLmxlbmd0aDtyPG87cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBuPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksaT1uLmxlbmd0aCxnO2ZvcihyPTA7cjxpO3IrKylnPW5bcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBHZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsbztmb3IoO3ItLSA+MDspaWYobz10W3JdLGU9PT1vLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG87cmV0dXJuIG51bGx9dmFyIFBlPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsTGU9QT0+IVgoQSkmJkEhPT1QZTtmdW5jdGlvbiBfQSgpe2xldHtjYXNlbGVzczpBfT1MZSh0aGlzKSYmdGhpc3x8e30sZT17fSx0PShyLG8pPT57bGV0IG49QSYmR2UoZSxvKXx8bztsQShlW25dKSYmbEEocik/ZVtuXT1fQShlW25dLHIpOmxBKHIpP2Vbbl09X0Eoe30scik6SChyKT9lW25dPXIuc2xpY2UoKTplW25dPXJ9O2ZvcihsZXQgcj0wLG89YXJndW1lbnRzLmxlbmd0aDtyPG87cisrKWFyZ3VtZW50c1tyXSYmJChhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIElyPShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PigkKGUsKG8sbik9Pnt0JiZSKG8pP0Fbbl09WihvLHQpOkFbbl09b30se2FsbE93bktleXM6cn0pLEEpLGdyPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksQ3I9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sQnI9KEEsZSx0LHIpPT57bGV0IG8sbixpLGc9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLG49by5sZW5ndGg7bi0tID4wOylpPW9bbl0sKCFyfHxyKGksQSxlKSkmJiFnW2ldJiYoZVtpXT1BW2ldLGdbaV09ITApO0E9dCE9PSExJiZ6QShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0sbHI9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxjcj1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoSChBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighVGUoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LEVyPShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ6QShVaW50OEFycmF5KSksUXI9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG87Zm9yKDsobz1yLm5leHQoKSkmJiFvLmRvbmU7KXtsZXQgbj1vLnZhbHVlO2UuY2FsbChBLG5bMF0sblsxXSl9fSx1cj0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxmcj1OKCJIVE1MRm9ybUVsZW1lbnQiKSxwcj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbyl7cmV0dXJuIHIudG9VcHBlckNhc2UoKStvfSksRmU9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLGRyPU4oIlJlZ0V4cCIpLHhlPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTskKHQsKG8sbik9PntsZXQgaTsoaT1lKG8sbixBKSkhPT0hMSYmKHJbbl09aXx8byl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxtcj1BPT57eGUoQSwoZSx0KT0+e2lmKFIoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoUihyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSx5cj0oQSxlKT0+e2xldCB0PXt9LHI9bz0+e28uZm9yRWFjaChuPT57dFtuXT0hMH0pfTtyZXR1cm4gSChBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxocj0oKT0+e30sd3I9KEEsZSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOmUpLGpBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsVWU9IjAxMjM0NTY3ODkiLE9lPXtESUdJVDpVZSxBTFBIQTpqQSxBTFBIQV9ESUdJVDpqQStqQS50b1VwcGVyQ2FzZSgpK1VlfSxEcj0oQT0xNixlPU9lLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6cn09ZTtmb3IoO0EtLTspdCs9ZVtNYXRoLnJhbmRvbSgpKnJ8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIFNyKEEpe3JldHVybiEhKEEmJlIoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBicj1BPT57bGV0IGU9bmV3IEFycmF5KDEwKSx0PShyLG8pPT57aWYoUUEocikpe2lmKGUuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXtlW29dPXI7bGV0IG49SChyKT9bXTp7fTtyZXR1cm4gJChyLChpLGcpPT57bGV0IGw9dChpLG8rMSk7IVgobCkmJihuW2ddPWwpfSksZVtvXT12b2lkIDAsbn19cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LGtyPU4oIkFzeW5jRnVuY3Rpb24iKSxScj1BPT5BJiYoUUEoQSl8fFIoQSkpJiZSKEEudGhlbikmJlIoQS5jYXRjaCksYT17aXNBcnJheTpILGlzQXJyYXlCdWZmZXI6TmUsaXNCdWZmZXI6WnQsaXNGb3JtRGF0YTppcixpc0FycmF5QnVmZmVyVmlldzpYdCxpc1N0cmluZzokdCxpc051bWJlcjpUZSxpc0Jvb2xlYW46QXIsaXNPYmplY3Q6UUEsaXNQbGFpbk9iamVjdDpsQSxpc1VuZGVmaW5lZDpYLGlzRGF0ZTplcixpc0ZpbGU6dHIsaXNCbG9iOnJyLGlzUmVnRXhwOmRyLGlzRnVuY3Rpb246Uixpc1N0cmVhbTpucixpc1VSTFNlYXJjaFBhcmFtczpzcixpc1R5cGVkQXJyYXk6RXIsaXNGaWxlTGlzdDpvcixmb3JFYWNoOiQsbWVyZ2U6X0EsZXh0ZW5kOklyLHRyaW06YXIsc3RyaXBCT006Z3IsaW5oZXJpdHM6Q3IsdG9GbGF0T2JqZWN0OkJyLGtpbmRPZjpjQSxraW5kT2ZUZXN0Ok4sZW5kc1dpdGg6bHIsdG9BcnJheTpjcixmb3JFYWNoRW50cnk6UXIsbWF0Y2hBbGw6dXIsaXNIVE1MRm9ybTpmcixoYXNPd25Qcm9wZXJ0eTpGZSxoYXNPd25Qcm9wOkZlLHJlZHVjZURlc2NyaXB0b3JzOnhlLGZyZWV6ZU1ldGhvZHM6bXIsdG9PYmplY3RTZXQ6eXIsdG9DYW1lbENhc2U6cHIsbm9vcDpocix0b0Zpbml0ZU51bWJlcjp3cixmaW5kS2V5OkdlLGdsb2JhbDpQZSxpc0NvbnRleHREZWZpbmVkOkxlLEFMUEhBQkVUOk9lLGdlbmVyYXRlU3RyaW5nOkRyLGlzU3BlY0NvbXBsaWFudEZvcm06U3IsdG9KU09OT2JqZWN0OmJyLGlzQXN5bmNGbjprcixpc1RoZW5hYmxlOlJyfTtmdW5jdGlvbiBZKEEsZSx0LHIsbyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG8mJih0aGlzLnJlc3BvbnNlPW8pfWEuaW5oZXJpdHMoWSxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmEudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIEplPVkucHJvdG90eXBlLE1lPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e01lW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFksTWUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtZLmZyb209KEEsZSx0LHIsbyxuKT0+e2xldCBpPU9iamVjdC5jcmVhdGUoSmUpO3JldHVybiBhLnRvRmxhdE9iamVjdChBLGksZnVuY3Rpb24obCl7cmV0dXJuIGwhPT1FcnJvci5wcm90b3R5cGV9LGc9PmchPT0iaXNBeGlvc0Vycm9yIiksWS5jYWxsKGksQS5tZXNzYWdlLGUsdCxyLG8pLGkuY2F1c2U9QSxpLm5hbWU9QS5uYW1lLG4mJk9iamVjdC5hc3NpZ24oaSxuKSxpfTt2YXIgZj1ZO3ZhciB1QT1udWxsO2Z1bmN0aW9uIFZBKEEpe3JldHVybiBhLmlzUGxhaW5PYmplY3QoQSl8fGEuaXNBcnJheShBKX1mdW5jdGlvbiBZZShBKXtyZXR1cm4gYS5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBIZShBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG8sbil7cmV0dXJuIG89WWUobyksIXQmJm4/IlsiK28rIl0iOm99KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIEZyKEEpe3JldHVybiBhLmlzQXJyYXkoQSkmJiFBLnNvbWUoVkEpfXZhciBVcj1hLnRvRmxhdE9iamVjdChhLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gTnIoQSxlLHQpe2lmKCFhLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KHVBfHxGb3JtRGF0YSksdD1hLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oRSx1KXtyZXR1cm4hYS5pc1VuZGVmaW5lZCh1W0VdKX0pO2xldCByPXQubWV0YVRva2VucyxvPXQudmlzaXRvcnx8SSxuPXQuZG90cyxpPXQuaW5kZXhlcyxsPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmEuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighYS5pc0Z1bmN0aW9uKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gQihjKXtpZihjPT09bnVsbClyZXR1cm4iIjtpZihhLmlzRGF0ZShjKSlyZXR1cm4gYy50b0lTT1N0cmluZygpO2lmKCFsJiZhLmlzQmxvYihjKSl0aHJvdyBuZXcgZigiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gYS5pc0FycmF5QnVmZmVyKGMpfHxhLmlzVHlwZWRBcnJheShjKT9sJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbY10pOkJ1ZmZlci5mcm9tKGMpOmN9ZnVuY3Rpb24gSShjLEUsdSl7bGV0IGQ9YztpZihjJiYhdSYmdHlwZW9mIGM9PSJvYmplY3QiKXtpZihhLmVuZHNXaXRoKEUsInt9IikpRT1yP0U6RS5zbGljZSgwLC0yKSxjPUpTT04uc3RyaW5naWZ5KGMpO2Vsc2UgaWYoYS5pc0FycmF5KGMpJiZGcihjKXx8KGEuaXNGaWxlTGlzdChjKXx8YS5lbmRzV2l0aChFLCJbXSIpKSYmKGQ9YS50b0FycmF5KGMpKSlyZXR1cm4gRT1ZZShFKSxkLmZvckVhY2goZnVuY3Rpb24oVSxGdCl7IShhLmlzVW5kZWZpbmVkKFUpfHxVPT09bnVsbCkmJmUuYXBwZW5kKGk9PT0hMD9IZShbRV0sRnQsbik6aT09PW51bGw/RTpFKyJbXSIsQihVKSl9KSwhMX1yZXR1cm4gVkEoYyk/ITA6KGUuYXBwZW5kKEhlKHUsRSxuKSxCKGMpKSwhMSl9bGV0IHM9W10sUT1PYmplY3QuYXNzaWduKFVyLHtkZWZhdWx0VmlzaXRvcjpJLGNvbnZlcnRWYWx1ZTpCLGlzVmlzaXRhYmxlOlZBfSk7ZnVuY3Rpb24gQyhjLEUpe2lmKCFhLmlzVW5kZWZpbmVkKGMpKXtpZihzLmluZGV4T2YoYykhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrRS5qb2luKCIuIikpO3MucHVzaChjKSxhLmZvckVhY2goYyxmdW5jdGlvbihkLEYpeyghKGEuaXNVbmRlZmluZWQoZCl8fGQ9PT1udWxsKSYmby5jYWxsKGUsZCxhLmlzU3RyaW5nKEYpP0YudHJpbSgpOkYsRSxRKSk9PT0hMCYmQyhkLEU/RS5jb25jYXQoRik6W0ZdKX0pLHMucG9wKCl9fWlmKCFhLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gQyhBKSxlfXZhciBQPU5yO2Z1bmN0aW9uIHFlKEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gS2UoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZQKEEsdGhpcyxlKX12YXIgV2U9S2UucHJvdG90eXBlO1dlLmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtXZS50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLHFlKX06cWU7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gdChvWzBdKSsiPSIrdChvWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIGZBPUtlO2Z1bmN0aW9uIFRyKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIEFBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8VHIsbz10JiZ0LnNlcmlhbGl6ZSxuO2lmKG8/bj1vKGUsdCk6bj1hLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgZkEoZSx0KS50b1N0cmluZyhyKSxuKXtsZXQgaT1BLmluZGV4T2YoIiMiKTtpIT09LTEmJihBPUEuc2xpY2UoMCxpKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrbn1yZXR1cm4gQX12YXIgWkE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe2EuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxYQT1aQTt2YXIgcEE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciB2ZT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6ZkE7dmFyIGplPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgX2U9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgemU9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6dmUsRm9ybURhdGE6amUsQmxvYjpfZX0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciAkQT17fTtOdCgkQSx7aGFzQnJvd3NlckVudjooKT0+VmUsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5HcixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PlByfSk7dmFyIFZlPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLEdyPShBPT5WZSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLFByPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgRD17Li4uJEEsLi4uemV9O2Z1bmN0aW9uIEFlKEEsZSl7cmV0dXJuIFAoQSxuZXcgRC5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixvLG4pe3JldHVybiBELmlzTm9kZSYmYS5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOm4uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZSkpfWZ1bmN0aW9uIExyKEEpe3JldHVybiBhLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxBKS5tYXAoZT0+ZVswXT09PSJbXSI/IiI6ZVsxXXx8ZVswXSl9ZnVuY3Rpb24geHIoQSl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhBKSxyLG89dC5sZW5ndGgsbjtmb3Iocj0wO3I8bztyKyspbj10W3JdLGVbbl09QVtuXTtyZXR1cm4gZX1mdW5jdGlvbiBPcihBKXtmdW5jdGlvbiBlKHQscixvLG4pe2xldCBpPXRbbisrXTtpZihpPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IGc9TnVtYmVyLmlzRmluaXRlKCtpKSxsPW4+PXQubGVuZ3RoO3JldHVybiBpPSFpJiZhLmlzQXJyYXkobyk/by5sZW5ndGg6aSxsPyhhLmhhc093blByb3AobyxpKT9vW2ldPVtvW2ldLHJdOm9baV09ciwhZyk6KCghb1tpXXx8IWEuaXNPYmplY3Qob1tpXSkpJiYob1tpXT1bXSksZSh0LHIsb1tpXSxuKSYmYS5pc0FycmF5KG9baV0pJiYob1tpXT14cihvW2ldKSksIWcpfWlmKGEuaXNGb3JtRGF0YShBKSYmYS5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBhLmZvckVhY2hFbnRyeShBLChyLG8pPT57ZShMcihyKSxvLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBkQT1PcjtmdW5jdGlvbiBKcihBLGUsdCl7aWYoYS5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKEEpLGEudHJpbShBKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgZWU9e3RyYW5zaXRpb25hbDpwQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixvPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG49YS5pc09iamVjdChlKTtpZihuJiZhLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSksYS5pc0Zvcm1EYXRhKGUpKXJldHVybiBvP0pTT04uc3RyaW5naWZ5KGRBKGUpKTplO2lmKGEuaXNBcnJheUJ1ZmZlcihlKXx8YS5pc0J1ZmZlcihlKXx8YS5pc1N0cmVhbShlKXx8YS5pc0ZpbGUoZSl8fGEuaXNCbG9iKGUpKXJldHVybiBlO2lmKGEuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKGEuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKG4pe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIEFlKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1hLmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGw9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBQKGc/eyJmaWxlc1tdIjplfTplLGwmJm5ldyBsLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gbnx8bz8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLEpyKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxlZS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG89dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoZSYmYS5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bykpe2xldCBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm87dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKGkpdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9mLmZyb20oZyxmLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpELmNsYXNzZXMuRm9ybURhdGEsQmxvYjpELmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTthLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e2VlLmhlYWRlcnNbQV09e319KTt2YXIgcT1lZTt2YXIgTXI9YS50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxaZT1BPT57bGV0IGU9e30sdCxyLG87cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe289aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLG8pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9aS5zdWJzdHJpbmcobysxKS50cmltKCksISghdHx8ZVt0XSYmTXJbdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgWGU9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG1BKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTphLmlzQXJyYXkoQSk/QS5tYXAobUEpOlN0cmluZyhBKX1mdW5jdGlvbiBIcihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgWXI9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gdGUoQSxlLHQscixvKXtpZihhLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYobyYmKGU9dCksISFhLmlzU3RyaW5nKGUpKXtpZihhLmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZihhLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIHFyKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIEtyKEEsZSl7bGV0IHQ9YS50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG8sbixpKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxvLG4saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIEs9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgbz10aGlzO2Z1bmN0aW9uIG4oZyxsLEIpe2xldCBJPWVBKGwpO2lmKCFJKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgcz1hLmZpbmRLZXkobyxJKTsoIXN8fG9bc109PT12b2lkIDB8fEI9PT0hMHx8Qj09PXZvaWQgMCYmb1tzXSE9PSExKSYmKG9bc3x8bF09bUEoZykpfWxldCBpPShnLGwpPT5hLmZvckVhY2goZywoQixJKT0+bihCLEksbCkpO3JldHVybiBhLmlzUGxhaW5PYmplY3QoZSl8fGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2koZSx0KTphLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiFZcihlKT9pKFplKGUpLHQpOmUhPW51bGwmJm4odCxlLHIpLHRoaXN9Z2V0KGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1hLmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgbz10aGlzW3JdO2lmKCF0KXJldHVybiBvO2lmKHQ9PT0hMClyZXR1cm4gSHIobyk7aWYoYS5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxvLHIpO2lmKGEuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhvKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1hLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fHRlKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxvPSExO2Z1bmN0aW9uIG4oaSl7aWYoaT1lQShpKSxpKXtsZXQgZz1hLmZpbmRLZXkocixpKTtnJiYoIXR8fHRlKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLG89ITApfX1yZXR1cm4gYS5pc0FycmF5KGUpP2UuZm9yRWFjaChuKTpuKGUpLG99Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxvPSExO2Zvcig7ci0tOyl7bGV0IG49dFtyXTsoIWV8fHRlKHRoaXMsdGhpc1tuXSxuLGUsITApKSYmKGRlbGV0ZSB0aGlzW25dLG89ITApfXJldHVybiBvfW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIGEuZm9yRWFjaCh0aGlzLChvLG4pPT57bGV0IGk9YS5maW5kS2V5KHIsbik7aWYoaSl7dFtpXT1tQShvKSxkZWxldGUgdFtuXTtyZXR1cm59bGV0IGc9ZT9xcihuKTpTdHJpbmcobikudHJpbSgpO2chPT1uJiZkZWxldGUgdFtuXSx0W2ddPW1BKG8pLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gYS5mb3JFYWNoKHRoaXMsKHIsbyk9PntyIT1udWxsJiZyIT09ITEmJih0W29dPWUmJmEuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG89PnIuc2V0KG8pKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1tYZV09dGhpc1tYZV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxvPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG4oaSl7bGV0IGc9ZUEoaSk7cltnXXx8KEtyKG8saSkscltnXT0hMCl9cmV0dXJuIGEuaXNBcnJheShlKT9lLmZvckVhY2gobik6bihlKSx0aGlzfX07Sy5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7YS5yZWR1Y2VEZXNjcmlwdG9ycyhLLnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTthLmZyZWV6ZU1ldGhvZHMoSyk7dmFyIFM9SztmdW5jdGlvbiB0QShBLGUpe2xldCB0PXRoaXN8fHEscj1lfHx0LG89Uy5mcm9tKHIuaGVhZGVycyksbj1yLmRhdGE7cmV0dXJuIGEuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe249Zy5jYWxsKHQsbixvLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG8ubm9ybWFsaXplKCksbn1mdW5jdGlvbiByQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uICRlKEEsZSx0KXtmLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGYuRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1hLmluaGVyaXRzKCRlLGYse19fQ0FOQ0VMX186ITB9KTt2YXIgTD0kZTtmdW5jdGlvbiByZShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBmKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW2YuRVJSX0JBRF9SRVFVRVNULGYuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIEF0PUQuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLG8sbil7bGV0IGk9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07YS5pc051bWJlcih0KSYmaS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksYS5pc1N0cmluZyhyKSYmaS5wdXNoKCJwYXRoPSIrciksYS5pc1N0cmluZyhvKSYmaS5wdXNoKCJkb21haW49IitvKSxuPT09ITAmJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIG9lKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gbmUoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIG9BKEEsZSl7cmV0dXJuIEEmJiFvZShlKT9uZShBLGUpOmV9dmFyIGV0PUQuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG8obil7bGV0IGk9bjtyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSxpPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1vKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihpKXtsZXQgZz1hLmlzU3RyaW5nKGkpP28oaSk6aTtyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gaWUoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIFdyKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksbz0wLG49MCxpO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24obCl7bGV0IEI9RGF0ZS5ub3coKSxJPXJbbl07aXx8KGk9QiksdFtvXT1sLHJbb109QjtsZXQgcz1uLFE9MDtmb3IoO3MhPT1vOylRKz10W3MrK10scz1zJUE7aWYobz0obysxKSVBLG89PT1uJiYobj0obisxKSVBKSxCLWk8ZSlyZXR1cm47bGV0IEM9SSYmQi1JO3JldHVybiBDP01hdGgucm91bmQoUSoxZTMvQyk6dm9pZCAwfX12YXIgdHQ9V3I7ZnVuY3Rpb24gcnQoQSxlKXtsZXQgdD0wLHI9dHQoNTAsMjUwKTtyZXR1cm4gbz0+e2xldCBuPW8ubG9hZGVkLGk9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLGc9bi10LGw9cihnKSxCPW48PWk7dD1uO2xldCBJPXtsb2FkZWQ6bix0b3RhbDppLHByb2dyZXNzOmk/bi9pOnZvaWQgMCxieXRlczpnLHJhdGU6bHx8dm9pZCAwLGVzdGltYXRlZDpsJiZpJiZCPyhpLW4pL2w6dm9pZCAwLGV2ZW50Om99O0lbZT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKEkpfX12YXIgdnI9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixvdD12ciYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG89QS5kYXRhLG49Uy5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTppLHdpdGhYU1JGVG9rZW46Z309QSxsO2Z1bmN0aW9uIEIoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbCl9bGV0IEk7aWYoYS5pc0Zvcm1EYXRhKG8pKXtpZihELmhhc1N0YW5kYXJkQnJvd3NlckVudnx8RC5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpbi5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoST1uLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtFLC4uLnVdPUk/SS5zcGxpdCgiOyIpLm1hcChkPT5kLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO24uc2V0Q29udGVudFR5cGUoW0V8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi51XS5qb2luKCI7ICIpKX19bGV0IHM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IEU9QS5hdXRoLnVzZXJuYW1lfHwiIix1PUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7bi5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoRSsiOiIrdSkpfWxldCBRPW9BKEEuYmFzZVVSTCxBLnVybCk7cy5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksQUEoUSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIEMoKXtpZighcylyZXR1cm47bGV0IEU9Uy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gcyYmcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksZD17ZGF0YTohaXx8aT09PSJ0ZXh0Inx8aT09PSJqc29uIj9zLnJlc3BvbnNlVGV4dDpzLnJlc3BvbnNlLHN0YXR1czpzLnN0YXR1cyxzdGF0dXNUZXh0OnMuc3RhdHVzVGV4dCxoZWFkZXJzOkUsY29uZmlnOkEscmVxdWVzdDpzfTtyZShmdW5jdGlvbihVKXt0KFUpLEIoKX0sZnVuY3Rpb24oVSl7cihVKSxCKCl9LGQpLHM9bnVsbH1pZigib25sb2FkZW5kImluIHM/cy5vbmxvYWRlbmQ9QzpzLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFzfHxzLnJlYWR5U3RhdGUhPT00fHxzLnN0YXR1cz09PTAmJiEocy5yZXNwb25zZVVSTCYmcy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoQyl9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihyKG5ldyBmKCJSZXF1ZXN0IGFib3J0ZWQiLGYuRUNPTk5BQk9SVEVELEEscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IGYoIk5ldHdvcmsgRXJyb3IiLGYuRVJSX05FVFdPUkssQSxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixkPUEudHJhbnNpdGlvbmFsfHxwQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgZih1LGQuY2xhcmlmeVRpbWVvdXRFcnJvcj9mLkVUSU1FRE9VVDpmLkVDT05OQUJPUlRFRCxBLHMpKSxzPW51bGx9LEQuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoZyYmYS5pc0Z1bmN0aW9uKGcpJiYoZz1nKEEpKSxnfHxnIT09ITEmJmV0KFEpKSl7bGV0IEU9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmQXQucmVhZChBLnhzcmZDb29raWVOYW1lKTtFJiZuLnNldChBLnhzcmZIZWFkZXJOYW1lLEUpfW89PT12b2lkIDAmJm4uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gcyYmYS5mb3JFYWNoKG4udG9KU09OKCksZnVuY3Rpb24odSxkKXtzLnNldFJlcXVlc3RIZWFkZXIoZCx1KX0pLGEuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwocy53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksaSYmaSE9PSJqc29uIiYmKHMucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJnMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHJ0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmcy51cGxvYWQmJnMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixydChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYobD1FPT57cyYmKHIoIUV8fEUudHlwZT9uZXcgTChudWxsLEEscyk6RSkscy5hYm9ydCgpLHM9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9sKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpKSk7bGV0IGM9aWUoUSk7aWYoYyYmRC5wcm90b2NvbHMuaW5kZXhPZihjKT09PS0xKXtyKG5ldyBmKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2MrIjoiLGYuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59cy5zZW5kKG98fG51bGwpfSl9O3ZhciBzZT17aHR0cDp1QSx4aHI6b3R9O2EuZm9yRWFjaChzZSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBudD1BPT5gLSAke0F9YCxqcj1BPT5hLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEseUE9e2dldEFkYXB0ZXI6QT0+e0E9YS5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsbz17fTtmb3IobGV0IG49MDtuPGU7bisrKXt0PUFbbl07bGV0IGk7aWYocj10LCFqcih0KSYmKHI9c2VbKGk9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgZihgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHIpYnJlYWs7b1tpfHwiIyIrbl09cn1pZighcil7bGV0IG49T2JqZWN0LmVudHJpZXMobykubWFwKChbZyxsXSk9PmBhZGFwdGVyICR7Z30gYCsobD09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9uLmxlbmd0aD4xP2BzaW5jZSA6CmArbi5tYXAobnQpLmpvaW4oYApgKToiICIrbnQoblswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgZigiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczpzZX07ZnVuY3Rpb24gYWUoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEwobnVsbCxBKX1mdW5jdGlvbiBoQShBKXtyZXR1cm4gYWUoQSksQS5oZWFkZXJzPVMuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSkseUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fHEuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gYWUoQSksci5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz1TLmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gckEocil8fChhZShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz1TLmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIGl0PUE9PkEgaW5zdGFuY2VvZiBTP3suLi5BfTpBO2Z1bmN0aW9uIFQoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoQixJLHMpe3JldHVybiBhLmlzUGxhaW5PYmplY3QoQikmJmEuaXNQbGFpbk9iamVjdChJKT9hLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOnN9LEIsSSk6YS5pc1BsYWluT2JqZWN0KEkpP2EubWVyZ2Uoe30sSSk6YS5pc0FycmF5KEkpP0kuc2xpY2UoKTpJfWZ1bmN0aW9uIG8oQixJLHMpe2lmKGEuaXNVbmRlZmluZWQoSSkpe2lmKCFhLmlzVW5kZWZpbmVkKEIpKXJldHVybiByKHZvaWQgMCxCLHMpfWVsc2UgcmV0dXJuIHIoQixJLHMpfWZ1bmN0aW9uIG4oQixJKXtpZighYS5pc1VuZGVmaW5lZChJKSlyZXR1cm4gcih2b2lkIDAsSSl9ZnVuY3Rpb24gaShCLEkpe2lmKGEuaXNVbmRlZmluZWQoSSkpe2lmKCFhLmlzVW5kZWZpbmVkKEIpKXJldHVybiByKHZvaWQgMCxCKX1lbHNlIHJldHVybiByKHZvaWQgMCxJKX1mdW5jdGlvbiBnKEIsSSxzKXtpZihzIGluIGUpcmV0dXJuIHIoQixJKTtpZihzIGluIEEpcmV0dXJuIHIodm9pZCAwLEIpfWxldCBsPXt1cmw6bixtZXRob2Q6bixkYXRhOm4sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooQixJKT0+byhpdChCKSxpdChJKSwhMCl9O3JldHVybiBhLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihJKXtsZXQgcz1sW0ldfHxvLFE9cyhBW0ldLGVbSV0sSSk7YS5pc1VuZGVmaW5lZChRKSYmcyE9PWd8fCh0W0ldPVEpfSksdH12YXIgd0E9IjEuNi44Ijt2YXIgSWU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57SWVbQV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIHN0PXt9O0llLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbyhuLGkpe3JldHVybiJbQXhpb3MgdiIrd0ErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIituKyInIitpKyhyPyIuICIrcjoiIil9cmV0dXJuKG4saSxnKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgZihvKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLGYuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhc3RbaV0mJihzdFtpXT0hMCxjb25zb2xlLndhcm4obyhpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShuLGksZyk6ITB9fTtmdW5jdGlvbiBfcihBLGUsdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBmKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixmLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhBKSxvPXIubGVuZ3RoO2Zvcig7by0tID4wOyl7bGV0IG49cltvXSxpPWVbbl07aWYoaSl7bGV0IGc9QVtuXSxsPWc9PT12b2lkIDB8fGkoZyxuLEEpO2lmKGwhPT0hMCl0aHJvdyBuZXcgZigib3B0aW9uICIrbisiIG11c3QgYmUgIitsLGYuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgZigiVW5rbm93biBvcHRpb24gIituLGYuRVJSX0JBRF9PUFRJT04pfX12YXIgREE9e2Fzc2VydE9wdGlvbnM6X3IsdmFsaWRhdG9yczpJZX07dmFyIHg9REEudmFsaWRhdG9ycyxXPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgWEEscmVzcG9uc2U6bmV3IFhBfX1hc3luYyByZXF1ZXN0KGUsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvPXt9KTpvPW5ldyBFcnJvcjtsZXQgbj1vLnN0YWNrP28uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP24mJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgobi5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmArbik6ci5zdGFjaz1ufXRocm93IHJ9fV9yZXF1ZXN0KGUsdCl7dHlwZW9mIGU9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPWUpOnQ9ZXx8e30sdD1UKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6byxoZWFkZXJzOm59PXQ7ciE9PXZvaWQgMCYmREEuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzp4LnRyYW5zaXRpb25hbCh4LmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOngudHJhbnNpdGlvbmFsKHguYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjp4LnRyYW5zaXRpb25hbCh4LmJvb2xlYW4pfSwhMSksbyE9bnVsbCYmKGEuaXNGdW5jdGlvbihvKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpvfTpEQS5hc3NlcnRPcHRpb25zKG8se2VuY29kZTp4LmZ1bmN0aW9uLHNlcmlhbGl6ZTp4LmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPW4mJmEubWVyZ2Uobi5jb21tb24sblt0Lm1ldGhvZF0pO24mJmEuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxjPT57ZGVsZXRlIG5bY119KSx0LmhlYWRlcnM9Uy5jb25jYXQoaSxuKTtsZXQgZz1bXSxsPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihFKXt0eXBlb2YgRS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZFLnJ1bldoZW4odCk9PT0hMXx8KGw9bCYmRS5zeW5jaHJvbm91cyxnLnVuc2hpZnQoRS5mdWxmaWxsZWQsRS5yZWplY3RlZCkpfSk7bGV0IEI9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihFKXtCLnB1c2goRS5mdWxmaWxsZWQsRS5yZWplY3RlZCl9KTtsZXQgSSxzPTAsUTtpZighbCl7bGV0IGM9W2hBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoYy51bnNoaWZ0LmFwcGx5KGMsZyksYy5wdXNoLmFwcGx5KGMsQiksUT1jLmxlbmd0aCxJPVByb21pc2UucmVzb2x2ZSh0KTtzPFE7KUk9SS50aGVuKGNbcysrXSxjW3MrK10pO3JldHVybiBJfVE9Zy5sZW5ndGg7bGV0IEM9dDtmb3Iocz0wO3M8UTspe2xldCBjPWdbcysrXSxFPWdbcysrXTt0cnl7Qz1jKEMpfWNhdGNoKHUpe0UuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7ST1oQS5jYWxsKHRoaXMsQyl9Y2F0Y2goYyl7cmV0dXJuIFByb21pc2UucmVqZWN0KGMpfWZvcihzPTAsUT1CLmxlbmd0aDtzPFE7KUk9SS50aGVuKEJbcysrXSxCW3MrK10pO3JldHVybiBJfWdldFVyaShlKXtlPVQodGhpcy5kZWZhdWx0cyxlKTtsZXQgdD1vQShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBBQSh0LGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTthLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe1cucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChUKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTthLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihuLGksZyl7cmV0dXJuIHRoaXMucmVxdWVzdChUKGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm4sZGF0YTppfSkpfX1XLnByb3RvdHlwZVtlXT10KCksVy5wcm90b3R5cGVbZSsiRm9ybSJdPXQoITApfSk7dmFyIG5BPVc7dmFyIGdlPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihuKXt0PW59KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG89PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgbj1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7bi0tID4wOylyLl9saXN0ZW5lcnNbbl0obyk7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1vPT57bGV0IG4saT1uZXcgUHJvbWlzZShnPT57ci5zdWJzY3JpYmUoZyksbj1nfSkudGhlbihvKTtyZXR1cm4gaS5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKG4pfSxpfSxlKGZ1bmN0aW9uKG4saSxnKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBMKG4saSxnKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihvKXtlPW99KSxjYW5jZWw6ZX19fSxhdD1nZTtmdW5jdGlvbiBDZShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gQmUoQSl7cmV0dXJuIGEuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIGxlPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhsZSkuZm9yRWFjaCgoW0EsZV0pPT57bGVbZV09QX0pO3ZhciBJdD1sZTtmdW5jdGlvbiBndChBKXtsZXQgZT1uZXcgbkEoQSksdD1aKG5BLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiBhLmV4dGVuZCh0LG5BLnByb3RvdHlwZSxlLHthbGxPd25LZXlzOiEwfSksYS5leHRlbmQodCxlLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihvKXtyZXR1cm4gZ3QoVChBLG8pKX0sdH12YXIgbT1ndChxKTttLkF4aW9zPW5BO20uQ2FuY2VsZWRFcnJvcj1MO20uQ2FuY2VsVG9rZW49YXQ7bS5pc0NhbmNlbD1yQTttLlZFUlNJT049d0E7bS50b0Zvcm1EYXRhPVA7bS5BeGlvc0Vycm9yPWY7bS5DYW5jZWw9bS5DYW5jZWxlZEVycm9yO20uYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX07bS5zcHJlYWQ9Q2U7bS5pc0F4aW9zRXJyb3I9QmU7bS5tZXJnZUNvbmZpZz1UO20uQXhpb3NIZWFkZXJzPVM7bS5mb3JtVG9KU09OPUE9PmRBKGEuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7bS5nZXRBZGFwdGVyPXlBLmdldEFkYXB0ZXI7bS5IdHRwU3RhdHVzQ29kZT1JdDttLmRlZmF1bHQ9bTt2YXIgdj1tO3ZhcntBeGlvczpNcyxBeGlvc0Vycm9yOkhzLENhbmNlbGVkRXJyb3I6WXMsaXNDYW5jZWw6cXMsQ2FuY2VsVG9rZW46S3MsVkVSU0lPTjpXcyxhbGw6dnMsQ2FuY2VsOmpzLGlzQXhpb3NFcnJvcjpfcyxzcHJlYWQ6enMsdG9Gb3JtRGF0YTpWcyxBeGlvc0hlYWRlcnM6WnMsSHR0cFN0YXR1c0NvZGU6WHMsZm9ybVRvSlNPTjokcyxnZXRBZGFwdGVyOkFhLG1lcmdlQ29uZmlnOmVhfT12O2FzeW5jIGZ1bmN0aW9uIHpyKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgbz1hd2FpdCB2LmdldCh0LHtyZXNwb25zZVR5cGU6ImJsb2IiLHBhcmFtczplfSksbj1VUkwuY3JlYXRlT2JqZWN0VVJMKG8uZGF0YSk7cj1uZXcgV29ya2VyKG4se3R5cGU6Im1vZHVsZSJ9KX1lbHNlIHI9bmV3IFdvcmtlcih0LHt0eXBlOiJtb2R1bGUifSk7cmV0dXJuIHJ9dmFyIGlBPXpyO2Z1bmN0aW9uIEN0KEEpe2xldCBlPVdBKEEpLHQ9QTtyZXR1cm4gdC50ZXJtaW5hdGVkPSExLHQud29ya2VyUHJveHk9ZSx0Lm9yaWdpbmFsVGVybWluYXRlPXQudGVybWluYXRlLHQudGVybWluYXRlPSgpPT57dC50ZXJtaW5hdGVkPSEwLHQud29ya2VyUHJveHlbS0FdKCksdC5vcmlnaW5hbFRlcm1pbmF0ZSgpfSx7d29ya2VyUHJveHk6ZSx3b3JrZXI6dH19YXN5bmMgZnVuY3Rpb24gVnIoQSxlLHQpe2xldCByO2lmKEEhPW51bGwpe2xldCBuPUE7cmV0dXJuIG4ud29ya2VyUHJveHkhPT12b2lkIDA/KHI9bi53b3JrZXJQcm94eSx7d29ya2VyUHJveHk6cix3b3JrZXI6bn0pOkN0KEEpfWxldCBvPWF3YWl0IGlBKGUsdCk7cmV0dXJuIEN0KG8pfXZhciBCdD1Wcjthc3luYyBmdW5jdGlvbiBacihBLGUsdCl7bGV0IHI9InVua25vd24iO3R5cGVvZiBBIT0ic3RyaW5nIj9yPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9yPUE6cj10eXBlb2YgZTwidSI/YCR7ZX0vJHtBfWA6QSxyLmVuZHNXaXRoKCIuanMiKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC0zKSksci5lbmRzV2l0aCgiLndhc20iKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC01KSk7bGV0IG89YCR7cn0ud2FzbWAsaT0oYXdhaXQgdi5nZXQobyx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KSkuZGF0YTtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke3J9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6aX0pfXZhciBsdD1acjt2YXIgY3Q9YXN5bmMoKT0+V2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNSwxLDk2LDAsMSwxMjMsMywyLDEsMCwxMCwxMCwxLDgsMCw2NSwwLDI1MywxNSwyNTMsOTgsMTFdKSk7dmFyIHV0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLEV0PW5ldyBUZXh0RW5jb2RlcixRdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gWHIoQSxlKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxyPUEuZnNfb3BlbihlLHQuZmxhZ3MpLG49QS5mc19zdGF0KGUpLnNpemUsaT1udWxsO3V0P2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKG4pOmk9bmV3IEFycmF5QnVmZmVyKG4pO2xldCBnPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBBLmZzX3JlYWQocixnLDAsbiwwKSxBLmZzX2Nsb3NlKHIpLGd9ZnVuY3Rpb24gZnQoQSxlLHQpe2xldCByPW51bGw7dXQ/cj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6cj1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IG89bmV3IFVpbnQ4QXJyYXkociksbj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZSx0KTtyZXR1cm4gby5zZXQobiksb31mdW5jdGlvbiBoKEEsZSx0LHIpe2xldCBvPTA7cmV0dXJuIGUhPT1udWxsJiYobz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LHIsZS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShlLmJ1ZmZlciksbykpLG99ZnVuY3Rpb24gSihBLGUsdCl7bGV0IHI9SlNPTi5zdHJpbmdpZnkoZSksbz1BLmxlbmd0aEJ5dGVzVVRGOChyKSsxLG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LG9dKTtBLnN0cmluZ1RvVVRGOChyLG4sbyl9ZnVuY3Rpb24gYihBLGUsdCxyKXtsZXQgbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLGk9ZnQoQSxvLG4pO3JldHVybiB3KHIsaS5idWZmZXIpfWZ1bmN0aW9uIFNBKEEsZSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxlXSkscj1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShyKX1mdW5jdGlvbiAkcihBLGUsdCxyKXtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oQixJKXtzd2l0Y2goQi50eXBlKXtjYXNlIHAuVGV4dFN0cmVhbTp7bGV0IHM9RXQuZW5jb2RlKEIuZGF0YS5kYXRhKSxRPWgoQSxzLEksMCksQz17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWB9O0ooQSxDLEkpO2JyZWFrfWNhc2UgcC5Kc29uQ29tcGF0aWJsZTp7bGV0IHM9RXQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEIuZGF0YSkpLFE9aChBLHMsSSwwKSxDPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YH07SihBLEMsSSk7YnJlYWt9Y2FzZSBwLkJpbmFyeVN0cmVhbTp7bGV0IHM9Qi5kYXRhLmRhdGEsUT1oKEEscyxJLDApLEM9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTtKKEEsQyxJKTticmVha31jYXNlIHAuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKEIuZGF0YS5wYXRoLEIuZGF0YS5kYXRhKTticmVha31jYXNlIHAuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoQi5kYXRhLnBhdGgsQi5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgcC5JbWFnZTp7bGV0IHM9Qi5kYXRhLFE9aChBLHMuZGF0YSxJLDApLEM9aChBLHMuZGlyZWN0aW9uLEksMSksYz10eXBlb2Ygcy5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShzLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sRT17aW1hZ2VUeXBlOnMuaW1hZ2VUeXBlLG5hbWU6cy5uYW1lLG9yaWdpbjpzLm9yaWdpbixzcGFjaW5nOnMuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsc2l6ZTpzLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxtZXRhZGF0YTpjfTtKKEEsRSxJKTticmVha31jYXNlIHAuTWVzaDp7bGV0IHM9Qi5kYXRhLFE9aChBLHMucG9pbnRzLEksMCksQz1oKEEscy5jZWxscyxJLDEpLGM9aChBLHMucG9pbnREYXRhLEksMiksRT1oKEEscy5jZWxsRGF0YSxJLDMpLHU9e21lc2hUeXBlOnMubWVzaFR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbnVtYmVyT2ZDZWxsczpzLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsY2VsbEJ1ZmZlclNpemU6cy5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOnMubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gfTtKKEEsdSxJKTticmVha31jYXNlIHAuUG9pbnRTZXQ6e2xldCBzPUIuZGF0YSxRPWgoQSxzLnBvaW50cyxJLDApLEM9aChBLHMucG9pbnREYXRhLEksMSksYz17cG9pbnRTZXRUeXBlOnMucG9pbnRTZXRUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YH07SihBLGMsSSk7YnJlYWt9Y2FzZSBwLlBvbHlEYXRhOntsZXQgcz1CLmRhdGEsUT1oKEEscy5wb2ludHMsSSwwKSxDPWgoQSxzLnZlcnRpY2VzLEksMSksYz1oKEEscy5saW5lcyxJLDIpLEU9aChBLHMucG9seWdvbnMsSSwzKSx1PWgoQSxzLnRyaWFuZ2xlU3RyaXBzLEksNCksZD1oKEEscy5wb2ludERhdGEsSSw1KSxGPWgoQSxzLnBvaW50RGF0YSxJLDYpLFU9e3BvbHlEYXRhVHlwZTpzLnBvbHlEYXRhVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6cy52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsbGluZXNCdWZmZXJTaXplOnMubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHBvbHlnb25zQnVmZmVyU2l6ZTpzLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6cy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0Z9YH07SihBLFUsSSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG89QS5zdGFja1NhdmUoKSxuPTA7dHJ5e249QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKEIpe3Rocm93IHR5cGVvZiBCPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKEIpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLEJ9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShvKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLGc9QS5nZXRNb2R1bGVTdGRlcnIoKSxsPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZuPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKEIsSSl7bGV0IHM9bnVsbDtzd2l0Y2goQi50eXBlKXtjYXNlIHAuVGV4dFN0cmVhbTp7bGV0IEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksYz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixDLGMpO3M9e2RhdGE6UXQuZGVjb2RlKEUpfTticmVha31jYXNlIHAuSnNvbkNvbXBhdGlibGU6e2xldCBDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLGM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksRT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQyxjKTtzPUpTT04ucGFyc2UoUXQuZGVjb2RlKEUpKTticmVha31jYXNlIHAuQmluYXJ5U3RyZWFtOntsZXQgQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxjPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pO3M9e2RhdGE6ZnQoQSxDLGMpfTticmVha31jYXNlIHAuVGV4dEZpbGU6e3M9e3BhdGg6Qi5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKEIuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBwLkJpbmFyeUZpbGU6e3M9e3BhdGg6Qi5kYXRhLnBhdGgsZGF0YTpYcihBLEIuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBwLkltYWdlOntsZXQgQz1TQShBLEkpO0MuZGF0YT1iKEEsSSwwLEMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEMuZGlyZWN0aW9uPWIoQSxJLDEsay5GbG9hdDY0KSxDLm1ldGFkYXRhPW5ldyBNYXAoQy5tZXRhZGF0YSkscz1DO2JyZWFrfWNhc2UgcC5NZXNoOntsZXQgQz1TQShBLEkpO0MubnVtYmVyT2ZQb2ludHM+MD9DLnBvaW50cz1iKEEsSSwwLEMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpDLnBvaW50cz13KEMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQy5udW1iZXJPZkNlbGxzPjA/Qy5jZWxscz1iKEEsSSwxLEMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkMuY2VsbHM9dyhDLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qy5wb2ludERhdGE9YihBLEksMixDLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpDLnBvaW50RGF0YT13KEMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxDLm51bWJlck9mQ2VsbFBpeGVscz4wP0MuY2VsbERhdGE9YihBLEksMyxDLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkMuY2VsbERhdGE9dyhDLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUM7YnJlYWt9Y2FzZSBwLlBvaW50U2V0OntsZXQgQz1TQShBLEkpO0MubnVtYmVyT2ZQb2ludHM+MD9DLnBvaW50cz1iKEEsSSwwLEMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qy5wb2ludHM9dyhDLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxDLm51bWJlck9mUG9pbnRQaXhlbHM+MD9DLnBvaW50RGF0YT1iKEEsSSwxLEMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpDLnBvaW50RGF0YT13KEMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1DO2JyZWFrfWNhc2UgcC5Qb2x5RGF0YTp7bGV0IEM9U0EoQSxJKTtDLm51bWJlck9mUG9pbnRzPjA/Qy5wb2ludHM9YihBLEksMCxrLkZsb2F0MzIpOkMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9DLnZlcnRpY2VzPWIoQSxJLDEseS5VSW50MzIpOkMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEMubGluZXNCdWZmZXJTaXplPjA/Qy5saW5lcz1iKEEsSSwyLHkuVUludDMyKTpDLmxpbmVzPW5ldyBVaW50MzJBcnJheSxDLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0MucG9seWdvbnM9YihBLEksMyx5LlVJbnQzMik6Qy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9DLnRyaWFuZ2xlU3RyaXBzPWIoQSxJLDQseS5VSW50MzIpOkMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEMubnVtYmVyT2ZQb2ludFBpeGVscz4wP0MucG9pbnREYXRhPWIoQSxJLDUsQy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkMucG9pbnREYXRhPXcoQy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxDLm51bWJlck9mQ2VsbFBpeGVscz4wP0MuY2VsbERhdGE9YihBLEksNixDLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpDLmNlbGxEYXRhPXcoQy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QzticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBRPXt0eXBlOkIudHlwZSxkYXRhOnN9O2wucHVzaChRKX0pLHtyZXR1cm5WYWx1ZTpuLHN0ZG91dDppLHN0ZGVycjpnLG91dHB1dHM6bH19dmFyIHB0PSRyO3ZhciBBbz10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gZW8oQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8QS5sZW5ndGg7cisrKXtsZXQgbz10byhBW3JdLGUpO28hPT1udWxsJiZ0LnB1c2gobyl9cmV0dXJuIHR9ZnVuY3Rpb24gdG8oQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSxBbyYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT90OnQuc2xpY2UoMCl9dmFyIGR0PWVvO2Z1bmN0aW9uIHJvKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBtdD1ybztmdW5jdGlvbiBvbyhBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgeXQ9b287ZnVuY3Rpb24gbm8oQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIGh0PW5vO3ZhciBpbztmdW5jdGlvbiBiQSgpe3JldHVybiBpb312YXIgc287ZnVuY3Rpb24gd3QoKXtyZXR1cm4gc299dmFyIGFvO2Z1bmN0aW9uIGtBKCl7cmV0dXJuIGFvfXZhciBjZT1uZXcgTWFwO2Z1bmN0aW9uIElvKCl7bGV0IEE9a0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIER0KCl7bGV0IEE9YkEoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gUkEoKXtsZXQgQT13dCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIGdvKEEsZSx0KXtsZXQgcj1BLG89QTtpZih0eXBlb2YgQSE9InN0cmluZyImJihyPW5ldyBVUkwoQS5ocmVmKSxvPXIuaHJlZiksY2UuaGFzKG8pKXJldHVybiBjZS5nZXQobyk7e2xldCBuPWF3YWl0IGx0KEEsZT8udG9TdHJpbmcoKT8/RHQoKSx0Pz9SQSgpKTtyZXR1cm4gY2Uuc2V0KG8sbiksbn19YXN5bmMgZnVuY3Rpb24gQ28oQSxlLHQscixvKXtpZighYXdhaXQgY3QoKSl7bGV0IHU9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KHUpLG5ldyBFcnJvcih1KX1sZXQgbj1vPy53ZWJXb3JrZXI/P251bGw7aWYobj09PSExKXtsZXQgdT1hd2FpdCBnbyhBLnRvU3RyaW5nKCksbz8ucGlwZWxpbmVCYXNlVXJsLG8/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1JBKCkpO3JldHVybiBwdCh1LGUsdCxyKX1sZXQgaT1uLGc9bz8ucGlwZWxpbmVXb3JrZXJVcmw/P0lvKCksbD10eXBlb2YgZyE9InN0cmluZyImJnR5cGVvZiBnPy5ocmVmPCJ1Ij9nLmhyZWY6Zyx7d29ya2VyUHJveHk6Qix3b3JrZXI6SX09YXdhaXQgQnQoaSxsLG8/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1JBKCkpO2k9STtsZXQgcz1bXTtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24odSl7aWYodS50eXBlPT09cC5CaW5hcnlTdHJlYW0pe2xldCBkPXUuZGF0YS5kYXRhO3MucHVzaChkKX1lbHNlIGlmKHUudHlwZT09PXAuQmluYXJ5RmlsZSl7bGV0IGQ9dS5kYXRhLmRhdGE7cy5wdXNoKGQpfWVsc2UgaWYodS50eXBlPT09cC5JbWFnZSl7bGV0IGQ9dS5kYXRhO2QuZGF0YSE9PW51bGwmJnMucHVzaCguLi5tdChkKSl9ZWxzZSBpZih1LnR5cGU9PT1wLk1lc2gpe2xldCBkPXUuZGF0YTtzLnB1c2goLi4ueXQoZCkpfWVsc2UgaWYodS50eXBlPT09cC5Qb2x5RGF0YSl7bGV0IGQ9dS5kYXRhO3MucHVzaCguLi5odChkKSl9fSk7bGV0IFE9bz8ucGlwZWxpbmVCYXNlVXJsPz9EdCgpLEM9dHlwZW9mIFEhPSJzdHJpbmciJiZ0eXBlb2YgUT8uaHJlZjwidSI/US5ocmVmOlEsYz1yIT1udWxsP3ZBKHIsZHQocyxvPy5ub0NvcHkpKTpudWxsLEU9YXdhaXQgQi5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCksQyxlLHQsYyxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9SQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6RS5yZXR1cm5WYWx1ZSxzdGRvdXQ6RS5zdGRvdXQsc3RkZXJyOkUuc3RkZXJyLG91dHB1dHM6RS5vdXRwdXRzLHdlYldvcmtlcjppfX12YXIgc0E9Q287dmFyIEJvPW51bGw7ZnVuY3Rpb24gU3QoKXtyZXR1cm4gQm99dmFyIEVlLGxvPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9jb21wcmVzcy1zdHJpbmdpZnlAJHtOQX0vZGlzdC9waXBlbGluZXNgO2Z1bmN0aW9uIFdhKEEpe0VlPUF9ZnVuY3Rpb24gRkEoKXtpZih0eXBlb2YgRWU8InUiKXJldHVybiBFZTtsZXQgQT1iQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpsb312YXIgUWUsY289bnVsbDtmdW5jdGlvbiBidChBKXtRZT1BfWZ1bmN0aW9uIGooKXtpZih0eXBlb2YgUWU8InUiKXJldHVybiBRZTtsZXQgQT1rQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpjb312YXIgXz1udWxsO2FzeW5jIGZ1bmN0aW9uIGt0KCl7bGV0IEE9aigpLGU9dHlwZW9mIEEhPSJzdHJpbmciJiZ0eXBlb2YgQT8uaHJlZjwidSI/QS5ocmVmOkE7Xz1hd2FpdCBpQShlKX1mdW5jdGlvbiBYYShBKXtfPUF9YXN5bmMgZnVuY3Rpb24gVUEoKXtpZihfIT09bnVsbClyZXR1cm4gXy50ZXJtaW5hdGVkJiZhd2FpdCBrdCgpLF87bGV0IEE9U3QoKTtyZXR1cm4gQSE9PW51bGw/QTooYXdhaXQga3QoKSxfKX1hc3luYyBmdW5jdGlvbiBFbyhBLGU9e30pe2xldCB0PVt7dHlwZTpwLkJpbmFyeVN0cmVhbX1dLHI9W3t0eXBlOnAuQmluYXJ5U3RyZWFtLGRhdGE6e2RhdGE6QX19XSxvPVtdO28ucHVzaCgiMCIpLG8ucHVzaCgiMCIpLG8ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnN0cmluZ2lmeSYmZS5zdHJpbmdpZnkmJm8ucHVzaCgiLS1zdHJpbmdpZnkiKSxlLmNvbXByZXNzaW9uTGV2ZWwmJm8ucHVzaCgiLS1jb21wcmVzc2lvbi1sZXZlbCIsZS5jb21wcmVzc2lvbkxldmVsLnRvU3RyaW5nKCkpLGUuZGF0YVVybFByZWZpeCYmby5wdXNoKCItLWRhdGEtdXJsLXByZWZpeCIsZS5kYXRhVXJsUHJlZml4LnRvU3RyaW5nKCkpO2xldCBnPSJjb21wcmVzcy1zdHJpbmdpZnkiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IFVBKCkpO2xldHt3ZWJXb3JrZXI6QixyZXR1cm5WYWx1ZTpJLHN0ZGVycjpzLG91dHB1dHM6UX09YXdhaXQgc0EoZyxvLHQscix7cGlwZWxpbmVCYXNlVXJsOkZBKCkscGlwZWxpbmVXb3JrZXJVcmw6aigpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihJIT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkIsb3V0cHV0OihRWzBdPy5kYXRhKS5kYXRhfX12YXIgej1Fbzthc3luYyBmdW5jdGlvbiBRbyhBLGU9e30pe2xldCB0PVt7dHlwZTpwLkJpbmFyeVN0cmVhbX1dLHI9W3t0eXBlOnAuQmluYXJ5U3RyZWFtLGRhdGE6e2RhdGE6QX19XSxvPVtdO28ucHVzaCgiMCIpLG8ucHVzaCgiMCIpLG8ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnBhcnNlU3RyaW5nJiZlLnBhcnNlU3RyaW5nJiZvLnB1c2goIi0tcGFyc2Utc3RyaW5nIik7bGV0IGc9InBhcnNlLXN0cmluZy1kZWNvbXByZXNzIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBVQSgpKTtsZXR7d2ViV29ya2VyOkIscmV0dXJuVmFsdWU6SSxzdGRlcnI6cyxvdXRwdXRzOlF9PWF3YWl0IHNBKGcsbyx0LHIse3BpcGVsaW5lQmFzZVVybDpGQSgpLHBpcGVsaW5lV29ya2VyVXJsOmooKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoSSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpCLG91dHB1dDooUVswXT8uZGF0YSkuZGF0YX19dmFyIFY9UW87YXN5bmMgZnVuY3Rpb24gdW8oQSxlPXt9KXtsZXQgcj1uZXcgUEEoQS5pbWFnZVR5cGUpO3Iub3JpZ2luPUEub3JpZ2luLHIuc3BhY2luZz1BLnNwYWNpbmcsci5zaXplPUEuc2l6ZSxyLm1ldGFkYXRhPUEubWV0YWRhdGE7bGV0IG89bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpLG49bmV3IFVpbnQ4QXJyYXkoQS5kaXJlY3Rpb24uYnVmZmVyKSxpPWF3YWl0IHoobix7Y29tcHJlc3Npb25MZXZlbDo1LHN0cmluZ2lmeTohMCx3ZWJXb3JrZXI6ZS53ZWJXb3JrZXIsbm9Db3B5OmUubm9Db3B5fSksZz1pLndlYldvcmtlcjtpZihyLmRpcmVjdGlvbj1vLmRlY29kZShpLm91dHB1dC5idWZmZXIpLEEuZGF0YT09PW51bGwpci5kYXRhPW51bGw7ZWxzZXtsZXQgbD1uZXcgVWludDhBcnJheShBLmRhdGEuYnVmZmVyKSxCPWF3YWl0IHoobCx7Y29tcHJlc3Npb25MZXZlbDo1LHN0cmluZ2lmeTohMCx3ZWJXb3JrZXI6Zyxub0NvcHk6ZS5ub0NvcHl9KTtyLmRhdGE9by5kZWNvZGUoQi5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZW5jb2RlZDpyLHdlYldvcmtlcjpnfX1hc3luYyBmdW5jdGlvbiBmbyhBLGU9e30pe2xldCB0PUEscj1uZXcgVGV4dEVuY29kZXIsbz1uZXcgVWludDhBcnJheShyLmVuY29kZShBLmRpcmVjdGlvbikpLG49YXdhaXQgVihvLHtwYXJzZVN0cmluZzohMCx3ZWJXb3JrZXI6ZS53ZWJXb3JrZXIsbm9Db3B5OiEwfSksaT1uLndlYldvcmtlcjtpZih0LmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KG4ub3V0cHV0LmJ1ZmZlciksIXQuZGF0YSl0LmRhdGE9bnVsbDtlbHNle2xldCBnPW5ldyBVaW50OEFycmF5KHIuZW5jb2RlKEEuZGF0YSkpLGw9YXdhaXQgVihnLHtwYXJzZVN0cmluZzohMCx3ZWJXb3JrZXI6aSxub0NvcHk6ITB9KTt0LmRhdGE9dyh0LmltYWdlVHlwZS5jb21wb25lbnRUeXBlLGwub3V0cHV0LmJ1ZmZlcil9cmV0dXJue2RlY29kZWQ6dCx3ZWJXb3JrZXI6aX19YXN5bmMgZnVuY3Rpb24gcG8oQSxlPXt9KXtsZXQgcj1uZXcgT0EoQS5tZXNoVHlwZSk7ci5uYW1lPUEubmFtZSxyLm51bWJlck9mUG9pbnRzPUEubnVtYmVyT2ZQb2ludHMsci5udW1iZXJPZkNlbGxzPUEubnVtYmVyT2ZDZWxscyxyLm51bWJlck9mUG9pbnRQaXhlbHM9QS5udW1iZXJPZlBvaW50UGl4ZWxzLHIubnVtYmVyT2ZDZWxsUGl4ZWxzPUEubnVtYmVyT2ZDZWxsUGl4ZWxzLHIuY2VsbEJ1ZmZlclNpemU9QS5jZWxsQnVmZmVyU2l6ZTtsZXQgbz1lLndlYldvcmtlcixuPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmb3IobGV0IGkgb2ZbInBvaW50cyIsInBvaW50RGF0YSIsImNlbGxzIiwiY2VsbERhdGEiXSlpZihBW2ldPT09bnVsbClyW2ldPW51bGw7ZWxzZXtsZXQgZz1uZXcgVWludDhBcnJheShBW2ldLmJ1ZmZlciksbD1hd2FpdCB6KGcse2NvbXByZXNzaW9uTGV2ZWw6NSxzdHJpbmdpZnk6ITAsd2ViV29ya2VyOm8sbm9Db3B5OmUubm9Db3B5fSk7bz1sLndlYldvcmtlcixyW2ldPW4uZGVjb2RlKGwub3V0cHV0LmJ1ZmZlcil9cmV0dXJue2VuY29kZWQ6cix3ZWJXb3JrZXI6b319YXN5bmMgZnVuY3Rpb24gbW8oQSxlPXt9KXtsZXQgdD1BLHI9bmV3IE1hcChbWyJwb2ludHMiLCJwb2ludENvbXBvbmVudFR5cGUiXSxbInBvaW50RGF0YSIsInBvaW50UGl4ZWxDb21wb25lbnRUeXBlIl0sWyJjZWxscyIsImNlbGxDb21wb25lbnRUeXBlIl0sWyJjZWxsRGF0YSIsImNlbGxQaXhlbENvbXBvbmVudFR5cGUiXV0pLG89bmV3IFRleHRFbmNvZGVyLG49ZS53ZWJXb3JrZXI7Zm9yKGxldCBpIG9mWyJwb2ludHMiLCJwb2ludERhdGEiLCJjZWxscyIsImNlbGxEYXRhIl0paWYodFtpXT09PW51bGwpdFtpXT1udWxsO2Vsc2V7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoby5lbmNvZGUodFtpXSkpLGw9YXdhaXQgVihnLHtwYXJzZVN0cmluZzohMCx3ZWJXb3JrZXI6bixub0NvcHk6ITB9KTtuPWwud2ViV29ya2VyLHRbaV09dyh0Lm1lc2hUeXBlW3IuZ2V0KGkpXSxsLm91dHB1dC5idWZmZXIpfXJldHVybntkZWNvZGVkOnQsd2ViV29ya2VyOm59fWFzeW5jIGZ1bmN0aW9uIHlvKEEsZT17fSl7bGV0IHI9bmV3IEhBKEEucG9seURhdGFUeXBlKTtyLm5hbWU9QS5uYW1lLHIubnVtYmVyT2ZQb2ludHM9QS5udW1iZXJPZlBvaW50cyxyLnZlcnRpY2VzQnVmZmVyU2l6ZT1BLnZlcnRpY2VzQnVmZmVyU2l6ZSxyLmxpbmVzQnVmZmVyU2l6ZT1BLmxpbmVzQnVmZmVyU2l6ZSxyLnBvbHlnb25zQnVmZmVyU2l6ZT1BLnBvbHlnb25zQnVmZmVyU2l6ZSxyLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT1BLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSxyLm51bWJlck9mUG9pbnRQaXhlbHM9QS5udW1iZXJPZlBvaW50UGl4ZWxzLHIubnVtYmVyT2ZDZWxsUGl4ZWxzPUEubnVtYmVyT2ZDZWxsUGl4ZWxzO2xldCBvPWUud2ViV29ya2VyLG49bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2ZvcihsZXQgaSBvZlsicG9pbnRzIiwidmVydGljZXMiLCJsaW5lcyIsInBvbHlnb25zIiwidHJpYW5nbGVTdHJpcHMiLCJwb2ludERhdGEiLCJjZWxsRGF0YSJdKWlmKEFbaV09PT1udWxsKXJbaV09bnVsbDtlbHNle2xldCBnPW5ldyBVaW50OEFycmF5KEFbaV0uYnVmZmVyKSxsPWF3YWl0IHooZyx7Y29tcHJlc3Npb25MZXZlbDo1LHN0cmluZ2lmeTohMCx3ZWJXb3JrZXI6byxub0NvcHk6ZS5ub0NvcHl9KTtvPWwud2ViV29ya2VyLHJbaV09bi5kZWNvZGUobC5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZW5jb2RlZDpyLHdlYldvcmtlcjpvfX1hc3luYyBmdW5jdGlvbiBobyhBLGU9e30pe2xldCB0PUEscj1uZXcgTWFwKFtbInBvaW50cyIsImZsb2F0MzIiXSxbInZlcnRpY2VzIiwidWludDMyIl0sWyJsaW5lcyIsInVpbnQzMiJdLFsicG9seWdvbnMiLCJ1aW50MzIiXSxbInRyaWFuZ2xlU3RyaXBzIiwidWludDMyIl0sWyJwb2ludERhdGEiLHQucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlXSxbImNlbGxEYXRhIix0LnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlXV0pLG89bmV3IFRleHRFbmNvZGVyLG49ZS53ZWJXb3JrZXI7Zm9yKGxldCBpIG9mWyJwb2ludHMiLCJ2ZXJ0aWNlcyIsImxpbmVzIiwicG9seWdvbnMiLCJ0cmlhbmdsZVN0cmlwcyIsInBvaW50RGF0YSIsImNlbGxEYXRhIl0paWYodFtpXT09PW51bGwpdFtpXT1udWxsO2Vsc2V7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoby5lbmNvZGUodFtpXSkpLGw9YXdhaXQgVihnLHtwYXJzZVN0cmluZzohMCx3ZWJXb3JrZXI6bixub0NvcHk6ITB9KTtuPWwud2ViV29ya2VyLHRbaV09dyhyLmdldChpKSxsLm91dHB1dC5idWZmZXIpfXJldHVybntkZWNvZGVkOnQsd2ViV29ya2VyOm59fXZhciBSdD0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgSUk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBlST0oQSx0KT0+e2Zvcih2YXIgSSBpbiB0KUlJKEEsSSx7Z2V0OnRbSV0sZW51bWVyYWJsZTohMH0pfTt2YXIgdkE9U3ltYm9sKCJDb21saW5rLnByb3h5IiksZ0k9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50Iiksckk9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLHBBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxlQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksJEE9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsb0k9e2NhbkhhbmRsZTpBPT4kQShBKSYmQVt2QV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTp0LHBvcnQyOkl9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gaUEoQSx0KSxbSSxbSV1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLG5JKEEpfX0saUk9e2NhbkhhbmRsZTpBPT4kQShBKSYmZUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgdDtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOkF9LFt0LFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LEF0PW5ldyBNYXAoW1sicHJveHkiLG9JXSxbInRocm93IixpSV1dKTtmdW5jdGlvbiBDSShBLHQpe2ZvcihsZXQgSSBvZiBBKWlmKHQ9PT1JfHxJPT09IioifHxJIGluc3RhbmNlb2YgUmVnRXhwJiZJLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaUEoQSx0PWdsb2JhbFRoaXMsST1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBlKGcpe2lmKCFnfHwhZy5kYXRhKXJldHVybjtpZighQ0koSSxnLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke2cub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpyLHR5cGU6byxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGcuZGF0YSksYT0oZy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChiKSxRO3RyeXtsZXQgQj1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixzKT0+ZltzXSxBKSxpPW4ucmVkdWNlKChmLHMpPT5mW3NdLEEpO3N3aXRjaChvKXtjYXNlIkdFVCI6UT1pO2JyZWFrO2Nhc2UiU0VUIjpCW24uc2xpY2UoLTEpWzBdXT1iKGcuZGF0YS52YWx1ZSksUT0hMDticmVhaztjYXNlIkFQUExZIjpRPWkuYXBwbHkoQixhKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBpKC4uLmEpO1E9YUkoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOnN9PW5ldyBNZXNzYWdlQ2hhbm5lbDtpQShBLHMpLFE9RkEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6UT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEIpe1E9e3ZhbHVlOkIsW2VBXTowfX1Qcm9taXNlLnJlc29sdmUoUSkuY2F0Y2goQj0+KHt2YWx1ZTpCLFtlQV06MH0pKS50aGVuKEI9PntsZXRbaSxmXT1vQShCKTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpLG89PT0iUkVMRUFTRSImJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGUpLHR0KHQpLHBBIGluIEEmJnR5cGVvZiBBW3BBXT09ImZ1bmN0aW9uIiYmQVtwQV0oKSl9KS5jYXRjaChCPT57bGV0W2ksZl09b0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtlQV06MH0pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZil9KX0pLHQuc3RhcnQmJnQuc3RhcnQoKX1mdW5jdGlvbiBCSShBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiB0dChBKXtCSShBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIG5JKEEsdCl7cmV0dXJuIFNBKEEsW10sdCl9ZnVuY3Rpb24gSUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIEl0KEEpe3JldHVybiBxKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3R0KEEpfSl9dmFyIGdBPW5ldyBXZWFrTWFwLHJBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCB0PShnQS5nZXQoQSl8fDApLTE7Z0Euc2V0KEEsdCksdD09PTAmJkl0KEEpfSk7ZnVuY3Rpb24gc0koQSx0KXtsZXQgST0oZ0EuZ2V0KHQpfHwwKSsxO2dBLnNldCh0LEkpLHJBJiZyQS5yZWdpc3RlcihBLHQsQSl9ZnVuY3Rpb24gUUkoQSl7ckEmJnJBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gU0EoQSx0PVtdLEk9ZnVuY3Rpb24oKXt9KXtsZXQgZT0hMSxnPW5ldyBQcm94eShJLHtnZXQocixvKXtpZihJQShlKSxvPT09ckkpcmV0dXJuKCk9PntRSShnKSxJdChBKSxlPSEwfTtpZihvPT09InRoZW4iKXtpZih0Lmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pmd9O2xldCBuPXEoQSx7dHlwZToiR0VUIixwYXRoOnQubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKGIpO3JldHVybiBuLnRoZW4uYmluZChuKX1yZXR1cm4gU0EoQSxbLi4udCxvXSl9LHNldChyLG8sbil7SUEoZSk7bGV0W2EsUV09b0Eobik7cmV0dXJuIHEoQSx7dHlwZToiU0VUIixwYXRoOlsuLi50LG9dLm1hcChCPT5CLnRvU3RyaW5nKCkpLHZhbHVlOmF9LFEpLnRoZW4oYil9LGFwcGx5KHIsbyxuKXtJQShlKTtsZXQgYT10W3QubGVuZ3RoLTFdO2lmKGE9PT1nSSlyZXR1cm4gcShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKGIpO2lmKGE9PT0iYmluZCIpcmV0dXJuIFNBKEEsdC5zbGljZSgwLC0xKSk7bGV0W1EsQl09X0Eobik7cmV0dXJuIHEoQSx7dHlwZToiQVBQTFkiLHBhdGg6dC5tYXAoaT0+aS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6UX0sQikudGhlbihiKX0sY29uc3RydWN0KHIsbyl7SUEoZSk7bGV0W24sYV09X0Eobyk7cmV0dXJuIHEoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOnQubWFwKFE9PlEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Om59LGEpLnRoZW4oYil9fSk7cmV0dXJuIHNJKGcsQSksZ31mdW5jdGlvbiBFSShBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBfQShBKXtsZXQgdD1BLm1hcChvQSk7cmV0dXJuW3QubWFwKEk9PklbMF0pLEVJKHQubWFwKEk9PklbMV0pKV19dmFyIGV0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEZBKEEsdCl7cmV0dXJuIGV0LnNldChBLHQpLEF9ZnVuY3Rpb24gYUkoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3ZBXTohMH0pfWZ1bmN0aW9uIG9BKEEpe2ZvcihsZXRbdCxJXW9mIEF0KWlmKEkuY2FuSGFuZGxlKEEpKXtsZXRbZSxnXT1JLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6dCx2YWx1ZTplfSxnXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZXQuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gYihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBBdC5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIHEoQSx0LEkpe3JldHVybiBuZXcgUHJvbWlzZShlPT57bGV0IGc9Y0koKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobyl7IW8uZGF0YXx8IW8uZGF0YS5pZHx8by5kYXRhLmlkIT09Z3x8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZShvLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmd9LHQpLEkpfSl9ZnVuY3Rpb24gY0koKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFcoQSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseSh0LGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpmSX09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6VUF9PU9iamVjdCxCQT0oQT0+dD0+e2xldCBJPWZJLmNhbGwodCk7cmV0dXJuIEFbSV18fChBW0ldPUkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxVPUE9PihBPUEudG9Mb3dlckNhc2UoKSx0PT5CQSh0KT09PUEpLG5BPUE9PnQ9PnR5cGVvZiB0PT09QSx7aXNBcnJheTpLfT1BcnJheSxaPW5BKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBsSShBKXtyZXR1cm4gQSE9PW51bGwmJiFaKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIVooQS5jb25zdHJ1Y3RvcikmJkYoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIGl0PVUoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gREkoQSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz90PUFycmF5QnVmZmVyLmlzVmlldyhBKTp0PUEmJkEuYnVmZmVyJiZpdChBLmJ1ZmZlciksdH12YXIgdUk9bkEoInN0cmluZyIpLEY9bkEoImZ1bmN0aW9uIiksQ3Q9bkEoIm51bWJlciIpLHNBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsaEk9QT0+QT09PSEwfHxBPT09ITEsQ0E9QT0+e2lmKEJBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IHQ9VUEoQSk7cmV0dXJuKHQ9PT1udWxsfHx0PT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZEk9VSgiRGF0ZSIpLHlJPVUoIkZpbGUiKSx3ST1VKCJCbG9iIiksbUk9VSgiRmlsZUxpc3QiKSxwST1BPT5zQShBKSYmRihBLnBpcGUpLFNJPUE9PntsZXQgdDtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxGKEEuYXBwZW5kKSYmKCh0PUJBKEEpKT09PSJmb3JtZGF0YSJ8fHQ9PT0ib2JqZWN0IiYmRihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxGST1VKCJVUkxTZWFyY2hQYXJhbXMiKSxSST1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gVihBLHQse2FsbE93bktleXM6ST0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBlLGc7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEsoQSkpZm9yKGU9MCxnPUEubGVuZ3RoO2U8ZztlKyspdC5jYWxsKG51bGwsQVtlXSxlLEEpO2Vsc2V7bGV0IHI9ST9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxvPXIubGVuZ3RoLG47Zm9yKGU9MDtlPG87ZSsrKW49cltlXSx0LmNhbGwobnVsbCxBW25dLG4sQSl9fWZ1bmN0aW9uIEJ0KEEsdCl7dD10LnRvTG93ZXJDYXNlKCk7bGV0IEk9T2JqZWN0LmtleXMoQSksZT1JLmxlbmd0aCxnO2Zvcig7ZS0tID4wOylpZihnPUlbZV0sdD09PWcudG9Mb3dlckNhc2UoKSlyZXR1cm4gZztyZXR1cm4gbnVsbH12YXIgbnQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxzdD1BPT4hWihBKSYmQSE9PW50O2Z1bmN0aW9uIE5BKCl7bGV0e2Nhc2VsZXNzOkF9PXN0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LEk9KGUsZyk9PntsZXQgcj1BJiZCdCh0LGcpfHxnO0NBKHRbcl0pJiZDQShlKT90W3JdPU5BKHRbcl0sZSk6Q0EoZSk/dFtyXT1OQSh7fSxlKTpLKGUpP3Rbcl09ZS5zbGljZSgpOnRbcl09ZX07Zm9yKGxldCBlPTAsZz1hcmd1bWVudHMubGVuZ3RoO2U8ZztlKyspYXJndW1lbnRzW2VdJiZWKGFyZ3VtZW50c1tlXSxJKTtyZXR1cm4gdH12YXIgTkk9KEEsdCxJLHthbGxPd25LZXlzOmV9PXt9KT0+KFYodCwoZyxyKT0+e0kmJkYoZyk/QVtyXT1XKGcsSSk6QVtyXT1nfSx7YWxsT3duS2V5czplfSksQSksVUk9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxHST0oQSx0LEksZSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6dC5wcm90b3R5cGV9KSxJJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLEkpfSxrST0oQSx0LEksZSk9PntsZXQgZyxyLG8sbj17fTtpZih0PXR8fHt9LEE9PW51bGwpcmV0dXJuIHQ7ZG97Zm9yKGc9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSkscj1nLmxlbmd0aDtyLS0gPjA7KW89Z1tyXSwoIWV8fGUobyxBLHQpKSYmIW5bb10mJih0W29dPUFbb10sbltvXT0hMCk7QT1JIT09ITEmJlVBKEEpfXdoaWxlKEEmJighSXx8SShBLHQpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB0fSxMST0oQSx0LEkpPT57QT1TdHJpbmcoQSksKEk9PT12b2lkIDB8fEk+QS5sZW5ndGgpJiYoST1BLmxlbmd0aCksSS09dC5sZW5ndGg7bGV0IGU9QS5pbmRleE9mKHQsSSk7cmV0dXJuIGUhPT0tMSYmZT09PUl9LEpJPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihLKEEpKXJldHVybiBBO2xldCB0PUEubGVuZ3RoO2lmKCFDdCh0KSlyZXR1cm4gbnVsbDtsZXQgST1uZXcgQXJyYXkodCk7Zm9yKDt0LS0gPjA7KUlbdF09QVt0XTtyZXR1cm4gSX0sSEk9KEE9PnQ9PkEmJnQgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJlVBKFVpbnQ4QXJyYXkpKSxZST0oQSx0KT0+e2xldCBlPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksZztmb3IoOyhnPWUubmV4dCgpKSYmIWcuZG9uZTspe2xldCByPWcudmFsdWU7dC5jYWxsKEEsclswXSxyWzFdKX19LGJJPShBLHQpPT57bGV0IEksZT1bXTtmb3IoOyhJPUEuZXhlYyh0KSkhPT1udWxsOyllLnB1c2goSSk7cmV0dXJuIGV9LE1JPVUoIkhUTUxGb3JtRWxlbWVudCIpLHFJPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKEksZSxnKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK2d9KSxydD0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9Pih0LEkpPT5BLmNhbGwodCxJKSkoT2JqZWN0LnByb3RvdHlwZSksS0k9VSgiUmVnRXhwIiksUXQ9KEEsdCk9PntsZXQgST1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxlPXt9O1YoSSwoZyxyKT0+e2xldCBvOyhvPXQoZyxyLEEpKSE9PSExJiYoZVtyXT1vfHxnKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsZSl9LE9JPUE9PntRdChBLCh0LEkpPT57aWYoRihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKEkpIT09LTEpcmV0dXJuITE7bGV0IGU9QVtJXTtpZihGKGUpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK0krIlwnIil9KX19KX0sVEk9KEEsdCk9PntsZXQgST17fSxlPWc9PntnLmZvckVhY2gocj0+e0lbcl09ITB9KX07cmV0dXJuIEsoQSk/ZShBKTplKFN0cmluZyhBKS5zcGxpdCh0KSksSX0sUEk9KCk9Pnt9LHhJPShBLHQpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTp0KSxSQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLG90PSIwMTIzNDU2Nzg5IixFdD17RElHSVQ6b3QsQUxQSEE6UkEsQUxQSEFfRElHSVQ6UkErUkEudG9VcHBlckNhc2UoKStvdH0sakk9KEE9MTYsdD1FdC5BTFBIQV9ESUdJVCk9PntsZXQgST0iIix7bGVuZ3RoOmV9PXQ7Zm9yKDtBLS07KUkrPXRbTWF0aC5yYW5kb20oKSplfDBdO3JldHVybiBJfTtmdW5jdGlvbiBXSShBKXtyZXR1cm4hIShBJiZGKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgWkk9QT0+e2xldCB0PW5ldyBBcnJheSgxMCksST0oZSxnKT0+e2lmKHNBKGUpKXtpZih0LmluZGV4T2YoZSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBlKSl7dFtnXT1lO2xldCByPUsoZSk/W106e307cmV0dXJuIFYoZSwobyxuKT0+e2xldCBhPUkobyxnKzEpOyFaKGEpJiYocltuXT1hKX0pLHRbZ109dm9pZCAwLHJ9fXJldHVybiBlfTtyZXR1cm4gSShBLDApfSxWST1VKCJBc3luY0Z1bmN0aW9uIiksWEk9QT0+QSYmKHNBKEEpfHxGKEEpKSYmRihBLnRoZW4pJiZGKEEuY2F0Y2gpLEM9e2lzQXJyYXk6Syxpc0FycmF5QnVmZmVyOml0LGlzQnVmZmVyOmxJLGlzRm9ybURhdGE6U0ksaXNBcnJheUJ1ZmZlclZpZXc6REksaXNTdHJpbmc6dUksaXNOdW1iZXI6Q3QsaXNCb29sZWFuOmhJLGlzT2JqZWN0OnNBLGlzUGxhaW5PYmplY3Q6Q0EsaXNVbmRlZmluZWQ6Wixpc0RhdGU6ZEksaXNGaWxlOnlJLGlzQmxvYjp3SSxpc1JlZ0V4cDpLSSxpc0Z1bmN0aW9uOkYsaXNTdHJlYW06cEksaXNVUkxTZWFyY2hQYXJhbXM6RkksaXNUeXBlZEFycmF5OkhJLGlzRmlsZUxpc3Q6bUksZm9yRWFjaDpWLG1lcmdlOk5BLGV4dGVuZDpOSSx0cmltOlJJLHN0cmlwQk9NOlVJLGluaGVyaXRzOkdJLHRvRmxhdE9iamVjdDprSSxraW5kT2Y6QkEsa2luZE9mVGVzdDpVLGVuZHNXaXRoOkxJLHRvQXJyYXk6SkksZm9yRWFjaEVudHJ5OllJLG1hdGNoQWxsOmJJLGlzSFRNTEZvcm06TUksaGFzT3duUHJvcGVydHk6cnQsaGFzT3duUHJvcDpydCxyZWR1Y2VEZXNjcmlwdG9yczpRdCxmcmVlemVNZXRob2RzOk9JLHRvT2JqZWN0U2V0OlRJLHRvQ2FtZWxDYXNlOnFJLG5vb3A6UEksdG9GaW5pdGVOdW1iZXI6eEksZmluZEtleTpCdCxnbG9iYWw6bnQsaXNDb250ZXh0RGVmaW5lZDpzdCxBTFBIQUJFVDpFdCxnZW5lcmF0ZVN0cmluZzpqSSxpc1NwZWNDb21wbGlhbnRGb3JtOldJLHRvSlNPTk9iamVjdDpaSSxpc0FzeW5jRm46VkksaXNUaGVuYWJsZTpYSX07ZnVuY3Rpb24gTyhBLHQsSSxlLGcpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxJJiYodGhpcy5jb25maWc9SSksZSYmKHRoaXMucmVxdWVzdD1lKSxnJiYodGhpcy5yZXNwb25zZT1nKX1DLmluaGVyaXRzKE8sRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpDLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBhdD1PLnByb3RvdHlwZSxjdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntjdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLGN0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXQsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Ty5mcm9tPShBLHQsSSxlLGcscik9PntsZXQgbz1PYmplY3QuY3JlYXRlKGF0KTtyZXR1cm4gQy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGEpe3JldHVybiBhIT09RXJyb3IucHJvdG90eXBlfSxuPT5uIT09ImlzQXhpb3NFcnJvciIpLE8uY2FsbChvLEEubWVzc2FnZSx0LEksZSxnKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxyJiZPYmplY3QuYXNzaWduKG8sciksb307dmFyIGw9Tzt2YXIgUUE9bnVsbDtmdW5jdGlvbiBHQShBKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KEEpfHxDLmlzQXJyYXkoQSl9ZnVuY3Rpb24gbHQoQSl7cmV0dXJuIEMuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gZnQoQSx0LEkpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihnLHIpe3JldHVybiBnPWx0KGcpLCFJJiZyPyJbIitnKyJdIjpnfSkuam9pbihJPyIuIjoiIik6dH1mdW5jdGlvbiB6SShBKXtyZXR1cm4gQy5pc0FycmF5KEEpJiYhQS5zb21lKEdBKX12YXIgX0k9Qy50b0ZsYXRPYmplY3QoQyx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHZJKEEsdCxJKXtpZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhRQXx8Rm9ybURhdGEpLEk9Qy50b0ZsYXRPYmplY3QoSSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIUMuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgZT1JLm1ldGFUb2tlbnMsZz1JLnZpc2l0b3J8fEIscj1JLmRvdHMsbz1JLmluZGV4ZXMsYT0oSS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZDLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIUMuaXNGdW5jdGlvbihnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIFEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoQy5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYSYmQy5pc0Jsb2IoRSkpdGhyb3cgbmV3IGwoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEMuaXNBcnJheUJ1ZmZlcihFKXx8Qy5pc1R5cGVkQXJyYXkoRSk/YSYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEIoRSxjLHUpe2xldCB5PUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoQy5lbmRzV2l0aChjLCJ7fSIpKWM9ZT9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKEMuaXNBcnJheShFKSYmekkoRSl8fChDLmlzRmlsZUxpc3QoRSl8fEMuZW5kc1dpdGgoYywiW10iKSkmJih5PUMudG9BcnJheShFKSkpcmV0dXJuIGM9bHQoYykseS5mb3JFYWNoKGZ1bmN0aW9uKE4sdEkpeyEoQy5pc1VuZGVmaW5lZChOKXx8Tj09PW51bGwpJiZ0LmFwcGVuZChvPT09ITA/ZnQoW2NdLHRJLHIpOm89PT1udWxsP2M6YysiW10iLFEoTikpfSksITF9cmV0dXJuIEdBKEUpPyEwOih0LmFwcGVuZChmdCh1LGMsciksUShFKSksITEpfWxldCBpPVtdLGY9T2JqZWN0LmFzc2lnbihfSSx7ZGVmYXVsdFZpc2l0b3I6Qixjb252ZXJ0VmFsdWU6USxpc1Zpc2l0YWJsZTpHQX0pO2Z1bmN0aW9uIHMoRSxjKXtpZighQy5pc1VuZGVmaW5lZChFKSl7aWYoaS5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTtpLnB1c2goRSksQy5mb3JFYWNoKEUsZnVuY3Rpb24oeSxSKXsoIShDLmlzVW5kZWZpbmVkKHkpfHx5PT09bnVsbCkmJmcuY2FsbCh0LHksQy5pc1N0cmluZyhSKT9SLnRyaW0oKTpSLGMsZikpPT09ITAmJnMoeSxjP2MuY29uY2F0KFIpOltSXSl9KSxpLnBvcCgpfX1pZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIHMoQSksdH12YXIgSj12STtmdW5jdGlvbiBEdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIHV0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmSihBLHRoaXMsdCl9dmFyIGh0PXV0LnByb3RvdHlwZTtodC5hcHBlbmQ9ZnVuY3Rpb24odCxJKXt0aGlzLl9wYWlycy5wdXNoKFt0LEldKX07aHQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IEk9dD9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxEdCl9OkR0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIEkoZ1swXSkrIj0iK0koZ1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciBFQT11dDtmdW5jdGlvbiAkSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiBYKEEsdCxJKXtpZighdClyZXR1cm4gQTtsZXQgZT1JJiZJLmVuY29kZXx8JEksZz1JJiZJLnNlcmlhbGl6ZSxyO2lmKGc/cj1nKHQsSSk6cj1DLmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcgRUEodCxJKS50b1N0cmluZyhlKSxyKXtsZXQgbz1BLmluZGV4T2YoIiUyMyIpO28hPT0tMSYmKEE9QS5zbGljZSgwLG8pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStyfXJldHVybiBBfXZhciBrQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsSSxlKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDpJLHN5bmNocm9ub3VzOmU/ZS5zeW5jaHJvbm91czohMSxydW5XaGVuOmU/ZS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7Qy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oZSl7ZSE9PW51bGwmJnQoZSl9KX19LExBPWtBO3ZhciBhQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGR0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpFQTt2YXIgeXQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciB3dD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBtdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpkdCxGb3JtRGF0YTp5dCxCbG9iOnd0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIEpBPXt9O2VJKEpBLHtoYXNCcm93c2VyRW52OigpPT5wdCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFlLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+dGV9KTt2YXIgcHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsQWU9KEE9PnB0JiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksdGU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciB3PXsuLi5KQSwuLi5tdH07ZnVuY3Rpb24gSEEoQSx0KXtyZXR1cm4gSihBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oSSxlLGcscil7cmV0dXJuIHcuaXNOb2RlJiZDLmlzQnVmZmVyKEkpPyh0aGlzLmFwcGVuZChlLEkudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6ci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gSWUoQSl7cmV0dXJuIEMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBlZShBKXtsZXQgdD17fSxJPU9iamVjdC5rZXlzKEEpLGUsZz1JLmxlbmd0aCxyO2ZvcihlPTA7ZTxnO2UrKylyPUlbZV0sdFtyXT1BW3JdO3JldHVybiB0fWZ1bmN0aW9uIGdlKEEpe2Z1bmN0aW9uIHQoSSxlLGcscil7bGV0IG89SVtyKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgbj1OdW1iZXIuaXNGaW5pdGUoK28pLGE9cj49SS5sZW5ndGg7cmV0dXJuIG89IW8mJkMuaXNBcnJheShnKT9nLmxlbmd0aDpvLGE/KEMuaGFzT3duUHJvcChnLG8pP2dbb109W2dbb10sZV06Z1tvXT1lLCFuKTooKCFnW29dfHwhQy5pc09iamVjdChnW29dKSkmJihnW29dPVtdKSx0KEksZSxnW29dLHIpJiZDLmlzQXJyYXkoZ1tvXSkmJihnW29dPWVlKGdbb10pKSwhbil9aWYoQy5pc0Zvcm1EYXRhKEEpJiZDLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IEk9e307cmV0dXJuIEMuZm9yRWFjaEVudHJ5KEEsKGUsZyk9Pnt0KEllKGUpLGcsSSwwKX0pLEl9cmV0dXJuIG51bGx9dmFyIGNBPWdlO2Z1bmN0aW9uIHJlKEEsdCxJKXtpZihDLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksQy50cmltKEEpfWNhdGNoKGUpe2lmKGUubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgZX1yZXR1cm4oSXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBZQT17dHJhbnNpdGlvbmFsOmFBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxJKXtsZXQgZT1JLmdldENvbnRlbnRUeXBlKCl8fCIiLGc9ZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEscj1DLmlzT2JqZWN0KHQpO2lmKHImJkMuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxDLmlzRm9ybURhdGEodCkpcmV0dXJuIGc/SlNPTi5zdHJpbmdpZnkoY0EodCkpOnQ7aWYoQy5pc0FycmF5QnVmZmVyKHQpfHxDLmlzQnVmZmVyKHQpfHxDLmlzU3RyZWFtKHQpfHxDLmlzRmlsZSh0KXx8Qy5pc0Jsb2IodCkpcmV0dXJuIHQ7aWYoQy5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoQy5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IG47aWYocil7aWYoZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gSEEodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChuPUMuaXNGaWxlTGlzdCh0KSl8fGUuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEoobj97ImZpbGVzW10iOnR9OnQsYSYmbmV3IGEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiByfHxnPyhJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSkscmUodCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IEk9dGhpcy50cmFuc2l0aW9uYWx8fFlBLnRyYW5zaXRpb25hbCxlPUkmJkkuZm9yY2VkSlNPTlBhcnNpbmcsZz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZih0JiZDLmlzU3RyaW5nKHQpJiYoZSYmIXRoaXMucmVzcG9uc2VUeXBlfHxnKSl7bGV0IG89IShJJiZJLnNpbGVudEpTT05QYXJzaW5nKSYmZzt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2gobil7aWYobyl0aHJvdyBuLm5hbWU9PT0iU3ludGF4RXJyb3IiP2wuZnJvbShuLGwuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bn19cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57WUEuaGVhZGVyc1tBXT17fX0pO3ZhciBUPVlBO3ZhciBvZT1DLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLFN0PUE9PntsZXQgdD17fSxJLGUsZztyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihvKXtnPW8uaW5kZXhPZigiOiIpLEk9by5zdWJzdHJpbmcoMCxnKS50cmltKCkudG9Mb3dlckNhc2UoKSxlPW8uc3Vic3RyaW5nKGcrMSkudHJpbSgpLCEoIUl8fHRbSV0mJm9lW0ldKSYmKEk9PT0ic2V0LWNvb2tpZSI/dFtJXT90W0ldLnB1c2goZSk6dFtJXT1bZV06dFtJXT10W0ldP3RbSV0rIiwgIitlOmUpfSksdH07dmFyIEZ0PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24geihBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpDLmlzQXJyYXkoQSk/QS5tYXAoZkEpOlN0cmluZyhBKX1mdW5jdGlvbiBpZShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLEk9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxlO2Zvcig7ZT1JLmV4ZWMoQSk7KXRbZVsxXV09ZVsyXTtyZXR1cm4gdH12YXIgQ2U9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gYkEoQSx0LEksZSxnKXtpZihDLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHQsSSk7aWYoZyYmKHQ9SSksISFDLmlzU3RyaW5nKHQpKXtpZihDLmlzU3RyaW5nKGUpKXJldHVybiB0LmluZGV4T2YoZSkhPT0tMTtpZihDLmlzUmVnRXhwKGUpKXJldHVybiBlLnRlc3QodCl9fWZ1bmN0aW9uIEJlKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxJLGUpPT5JLnRvVXBwZXJDYXNlKCkrZSl9ZnVuY3Rpb24gbmUoQSx0KXtsZXQgST1DLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGUrSSx7dmFsdWU6ZnVuY3Rpb24oZyxyLG8pe3JldHVybiB0aGlzW2VdLmNhbGwodGhpcyx0LGcscixvKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxJLGUpe2xldCBnPXRoaXM7ZnVuY3Rpb24gcihuLGEsUSl7bGV0IEI9eihhKTtpZighQil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGk9Qy5maW5kS2V5KGcsQik7KCFpfHxnW2ldPT09dm9pZCAwfHxRPT09ITB8fFE9PT12b2lkIDAmJmdbaV0hPT0hMSkmJihnW2l8fGFdPWZBKG4pKX1sZXQgbz0obixhKT0+Qy5mb3JFYWNoKG4sKFEsQik9PnIoUSxCLGEpKTtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKHQsSSk6Qy5pc1N0cmluZyh0KSYmKHQ9dC50cmltKCkpJiYhQ2UodCk/byhTdCh0KSxJKTp0IT1udWxsJiZyKEksdCxlKSx0aGlzfWdldCh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtpZihlKXtsZXQgZz10aGlzW2VdO2lmKCFJKXJldHVybiBnO2lmKEk9PT0hMClyZXR1cm4gaWUoZyk7aWYoQy5pc0Z1bmN0aW9uKEkpKXJldHVybiBJLmNhbGwodGhpcyxnLGUpO2lmKEMuaXNSZWdFeHAoSSkpcmV0dXJuIEkuZXhlYyhnKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKGUmJnRoaXNbZV0hPT12b2lkIDAmJighSXx8YkEodGhpcyx0aGlzW2VdLGUsSSkpKX1yZXR1cm4hMX1kZWxldGUodCxJKXtsZXQgZT10aGlzLGc9ITE7ZnVuY3Rpb24gcihvKXtpZihvPXoobyksbyl7bGV0IG49Qy5maW5kS2V5KGUsbyk7biYmKCFJfHxiQShlLGVbbl0sbixJKSkmJihkZWxldGUgZVtuXSxnPSEwKX19cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSxnfWNsZWFyKHQpe2xldCBJPU9iamVjdC5rZXlzKHRoaXMpLGU9SS5sZW5ndGgsZz0hMTtmb3IoO2UtLTspe2xldCByPUlbZV07KCF0fHxiQSh0aGlzLHRoaXNbcl0scix0LCEwKSkmJihkZWxldGUgdGhpc1tyXSxnPSEwKX1yZXR1cm4gZ31ub3JtYWxpemUodCl7bGV0IEk9dGhpcyxlPXt9O3JldHVybiBDLmZvckVhY2godGhpcywoZyxyKT0+e2xldCBvPUMuZmluZEtleShlLHIpO2lmKG8pe0lbb109ZkEoZyksZGVsZXRlIElbcl07cmV0dXJufWxldCBuPXQ/QmUocik6U3RyaW5nKHIpLnRyaW0oKTtuIT09ciYmZGVsZXRlIElbcl0sSVtuXT1mQShnKSxlW25dPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChlLGcpPT57ZSE9bnVsbCYmZSE9PSExJiYoSVtnXT10JiZDLmlzQXJyYXkoZSk/ZS5qb2luKCIsICIpOmUpfSksSX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxJXSk9PnQrIjogIitJKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5JKXtsZXQgZT1uZXcgdGhpcyh0KTtyZXR1cm4gSS5mb3JFYWNoKGc9PmUuc2V0KGcpKSxlfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgZT0odGhpc1tGdF09dGhpc1tGdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxnPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIobyl7bGV0IG49eihvKTtlW25dfHwobmUoZyxvKSxlW25dPSEwKX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLHRoaXN9fTtQLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtDLnJlZHVjZURlc2NyaXB0b3JzKFAucHJvdG90eXBlLCh7dmFsdWU6QX0sdCk9PntsZXQgST10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChlKXt0aGlzW0ldPWV9fX0pO0MuZnJlZXplTWV0aG9kcyhQKTt2YXIgbT1QO2Z1bmN0aW9uIF8oQSx0KXtsZXQgST10aGlzfHxULGU9dHx8SSxnPW0uZnJvbShlLmhlYWRlcnMpLHI9ZS5kYXRhO3JldHVybiBDLmZvckVhY2goQSxmdW5jdGlvbihuKXtyPW4uY2FsbChJLHIsZy5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxnLm5vcm1hbGl6ZSgpLHJ9ZnVuY3Rpb24gdihBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFJ0KEEsdCxJKXtsLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGwuRVJSX0NBTkNFTEVELHQsSSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1DLmluaGVyaXRzKFJ0LGwse19fQ0FOQ0VMX186ITB9KTt2YXIgSD1SdDtmdW5jdGlvbiBNQShBLHQsSSl7bGV0IGU9SS5jb25maWcudmFsaWRhdGVTdGF0dXM7IUkuc3RhdHVzfHwhZXx8ZShJLnN0YXR1cyk/QShJKTp0KG5ldyBsKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrSS5zdGF0dXMsW2wuRVJSX0JBRF9SRVFVRVNULGwuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihJLnN0YXR1cy8xMDApLTRdLEkuY29uZmlnLEkucmVxdWVzdCxJKSl9dmFyIE50PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsSSxlLGcscil7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07Qy5pc051bWJlcihJKSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoSSkudG9HTVRTdHJpbmcoKSksQy5pc1N0cmluZyhlKSYmby5wdXNoKCJwYXRoPSIrZSksQy5pc1N0cmluZyhnKSYmby5wdXNoKCJkb21haW49IitnKSxyPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gcUEoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gS0EoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uICQoQSx0KXtyZXR1cm4gQSYmIXFBKHQpP0tBKEEsdCk6dH12YXIgVXQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLGU7ZnVuY3Rpb24gZyhyKXtsZXQgbz1yO3JldHVybiB0JiYoSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLG89SS5ocmVmKSxJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbykse2hyZWY6SS5ocmVmLHByb3RvY29sOkkucHJvdG9jb2w/SS5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6SS5ob3N0LHNlYXJjaDpJLnNlYXJjaD9JLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDpJLmhhc2g/SS5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTpJLmhvc3RuYW1lLHBvcnQ6SS5wb3J0LHBhdGhuYW1lOkkucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP0kucGF0aG5hbWU6Ii8iK0kucGF0aG5hbWV9fXJldHVybiBlPWcod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG8pe2xldCBuPUMuaXNTdHJpbmcobyk/ZyhvKTpvO3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiBPQShBKXtsZXQgdD0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gdCYmdFsxXXx8IiJ9ZnVuY3Rpb24gc2UoQSx0KXtBPUF8fDEwO2xldCBJPW5ldyBBcnJheShBKSxlPW5ldyBBcnJheShBKSxnPTAscj0wLG87cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjFlMyxmdW5jdGlvbihhKXtsZXQgUT1EYXRlLm5vdygpLEI9ZVtyXTtvfHwobz1RKSxJW2ddPWEsZVtnXT1RO2xldCBpPXIsZj0wO2Zvcig7aSE9PWc7KWYrPUlbaSsrXSxpPWklQTtpZihnPShnKzEpJUEsZz09PXImJihyPShyKzEpJUEpLFEtbzx0KXJldHVybjtsZXQgcz1CJiZRLUI7cmV0dXJuIHM/TWF0aC5yb3VuZChmKjFlMy9zKTp2b2lkIDB9fXZhciBHdD1zZTtmdW5jdGlvbiBrdChBLHQpe2xldCBJPTAsZT1HdCg1MCwyNTApO3JldHVybiBnPT57bGV0IHI9Zy5sb2FkZWQsbz1nLmxlbmd0aENvbXB1dGFibGU/Zy50b3RhbDp2b2lkIDAsbj1yLUksYT1lKG4pLFE9cjw9bztJPXI7bGV0IEI9e2xvYWRlZDpyLHRvdGFsOm8scHJvZ3Jlc3M6bz9yL286dm9pZCAwLGJ5dGVzOm4scmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJm8mJlE/KG8tcikvYTp2b2lkIDAsZXZlbnQ6Z307Qlt0PyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEoQil9fXZhciBRZT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLEx0PVFlJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSSxlKXtsZXQgZz1BLmRhdGEscj1tLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm8sd2l0aFhTUkZUb2tlbjpufT1BLGE7ZnVuY3Rpb24gUSgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQjtpZihDLmlzRm9ybURhdGEoZykpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilyLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChCPXIuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4udV09Qj9CLnNwbGl0KCI7IikubWFwKHk9PnkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107ci5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLnVdLmpvaW4oIjsgIikpfX1sZXQgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgYz1BLmF1dGgudXNlcm5hbWV8fCIiLHU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShjKyI6Iit1KSl9bGV0IGY9JChBLmJhc2VVUkwsQS51cmwpO2kub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoZixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxpLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIHMoKXtpZighaSlyZXR1cm47bGV0IGM9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gaSYmaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkseT17ZGF0YTohb3x8bz09PSJ0ZXh0Inx8bz09PSJqc29uIj9pLnJlc3BvbnNlVGV4dDppLnJlc3BvbnNlLHN0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDppfTtNQShmdW5jdGlvbihOKXtJKE4pLFEoKX0sZnVuY3Rpb24oTil7ZShOKSxRKCl9LHkpLGk9bnVsbH1pZigib25sb2FkZW5kImluIGk/aS5vbmxvYWRlbmQ9czppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFpfHxpLnJlYWR5U3RhdGUhPT00fHxpLnN0YXR1cz09PTAmJiEoaS5yZXNwb25zZVVSTCYmaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocyl9LGkub25hYm9ydD1mdW5jdGlvbigpe2kmJihlKG5ldyBsKCJSZXF1ZXN0IGFib3J0ZWQiLGwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbCl9LGkub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IGwoIk5ldHdvcmsgRXJyb3IiLGwuRVJSX05FVFdPUkssQSxpKSksaT1udWxsfSxpLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIix5PUEudHJhbnNpdGlvbmFsfHxhQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksZShuZXcgbCh1LHkuY2xhcmlmeVRpbWVvdXRFcnJvcj9sLkVUSU1FRE9VVDpsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobiYmQy5pc0Z1bmN0aW9uKG4pJiYobj1uKEEpKSxufHxuIT09ITEmJlV0KGYpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmTnQucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfWc9PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gaSYmQy5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24odSx5KXtpLnNldFJlcXVlc3RIZWFkZXIoeSx1KX0pLEMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoaS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksbyYmbyE9PSJqc29uIiYmKGkucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS51cGxvYWQmJmkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYT1jPT57aSYmKGUoIWN8fGMudHlwZT9uZXcgSChudWxsLEEsaSk6YyksaS5hYm9ydCgpLGk9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9hKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IEU9T0EoZik7aWYoRSYmdy5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtlKG5ldyBsKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGwuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59aS5zZW5kKGd8fG51bGwpfSl9O3ZhciBUQT17aHR0cDpRQSx4aHI6THR9O0MuZm9yRWFjaChUQSwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBKdD1BPT5gLSAke0F9YCxFZT1BPT5DLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbEE9e2dldEFkYXB0ZXI6QT0+e0E9Qy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxJLGUsZz17fTtmb3IobGV0IHI9MDtyPHQ7cisrKXtJPUFbcl07bGV0IG87aWYoZT1JLCFFZShJKSYmKGU9VEFbKG89U3RyaW5nKEkpKS50b0xvd2VyQ2FzZSgpXSxlPT09dm9pZCAwKSl0aHJvdyBuZXcgbChgVW5rbm93biBhZGFwdGVyIFwnJHtvfVwnYCk7aWYoZSlicmVhaztnW298fCIlMjMiK3JdPWV9aWYoIWUpe2xldCByPU9iamVjdC5lbnRyaWVzKGcpLm1hcCgoW24sYV0pPT5gYWRhcHRlciAke259IGArKGE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPXQ/ci5sZW5ndGg+MT9gc2luY2UgOiUwQWArci5tYXAoSnQpLmpvaW4oYCUwQWApOiIgIitKdChyWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBsKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIGV9LGFkYXB0ZXJzOlRBfTtmdW5jdGlvbiBQQShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSChudWxsLEEpfWZ1bmN0aW9uIERBKEEpe3JldHVybiBQQShBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGxBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxULmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFBBKEEpLGUuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUpLGUuaGVhZGVycz1tLmZyb20oZS5oZWFkZXJzKSxlfSxmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8KFBBKEEpLGUmJmUucmVzcG9uc2UmJihlLnJlc3BvbnNlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlLnJlc3BvbnNlKSxlLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKGUucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChlKX0pfXZhciBIdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgST17fTtmdW5jdGlvbiBlKFEsQixpKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KFEpJiZDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZS5jYWxsKHtjYXNlbGVzczppfSxRLEIpOkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlKHt9LEIpOkMuaXNBcnJheShCKT9CLnNsaWNlKCk6Qn1mdW5jdGlvbiBnKFEsQixpKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSxpKX1lbHNlIHJldHVybiBlKFEsQixpKX1mdW5jdGlvbiByKFEsQil7aWYoIUMuaXNVbmRlZmluZWQoQikpcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG8oUSxCKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSl9ZWxzZSByZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbihRLEIsaSl7aWYoaSBpbiB0KXJldHVybiBlKFEsQik7aWYoaSBpbiBBKXJldHVybiBlKHZvaWQgMCxRKX1sZXQgYT17dXJsOnIsbWV0aG9kOnIsZGF0YTpyLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpuLGhlYWRlcnM6KFEsQik9PmcoSHQoUSksSHQoQiksITApfTtyZXR1cm4gQy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24oQil7bGV0IGk9YVtCXXx8ZyxmPWkoQVtCXSx0W0JdLEIpO0MuaXNVbmRlZmluZWQoZikmJmkhPT1ufHwoSVtCXT1mKX0pLEl9dmFyIHVBPSIxLjYuOCI7dmFyIHhBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSx0KT0+e3hBW0FdPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09PUF8fCJhIisodDwxPyJuICI6IiAiKStBfX0pO3ZhciBZdD17fTt4QS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxJLGUpe2Z1bmN0aW9uIGcocixvKXtyZXR1cm4iW0F4aW9zIHYiK3VBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK3IrIlwnIitvKyhlPyIuICIrZToiIil9cmV0dXJuKHIsbyxuKT0+e2lmKHQ9PT0hMSl0aHJvdyBuZXcgbChnKG8sIiBoYXMgYmVlbiByZW1vdmVkIisoST8iIGluICIrSToiIikpLGwuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBJJiYhWXRbb10mJihZdFtvXT0hMCxjb25zb2xlLndhcm4oZyhvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitJKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLHQ/dChyLG8sbik6ITB9fTtmdW5jdGlvbiBhZShBLHQsSSl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBsKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxnPWUubGVuZ3RoO2Zvcig7Zy0tID4wOyl7bGV0IHI9ZVtnXSxvPXRbcl07aWYobyl7bGV0IG49QVtyXSxhPW49PT12b2lkIDB8fG8obixyLEEpO2lmKGEhPT0hMCl0aHJvdyBuZXcgbCgib3B0aW9uICIrcisiIG11c3QgYmUgIithLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKEkhPT0hMCl0aHJvdyBuZXcgbCgiVW5rbm93biBvcHRpb24gIityLGwuRVJSX0JBRF9PUFRJT04pfX12YXIgaEE9e2Fzc2VydE9wdGlvbnM6YWUsdmFsaWRhdG9yczp4QX07dmFyIFk9aEEudmFsaWRhdG9ycyx4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdHM9dCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgTEEscmVzcG9uc2U6bmV3IExBfX1hc3luYyByZXF1ZXN0KHQsSSl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KHQsSSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgZztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShnPXt9KTpnPW5ldyBFcnJvcjtsZXQgcj1nLnN0YWNrP2cuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7ZS5zdGFjaz9yJiYhU3RyaW5nKGUuc3RhY2spLmVuZHNXaXRoKHIucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihlLnN0YWNrKz1gJTBBYCtyKTplLnN0YWNrPXJ9dGhyb3cgZX19X3JlcXVlc3QodCxJKXt0eXBlb2YgdD09InN0cmluZyI/KEk9SXx8e30sSS51cmw9dCk6ST10fHx7fSxJPWsodGhpcy5kZWZhdWx0cyxJKTtsZXR7dHJhbnNpdGlvbmFsOmUscGFyYW1zU2VyaWFsaXplcjpnLGhlYWRlcnM6cn09STtlIT09dm9pZCAwJiZoQS5hc3NlcnRPcHRpb25zKGUse3NpbGVudEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbil9LCExKSxnIT1udWxsJiYoQy5pc0Z1bmN0aW9uKGcpP0kucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOmd9OmhBLmFzc2VydE9wdGlvbnMoZyx7ZW5jb2RlOlkuZnVuY3Rpb24sc2VyaWFsaXplOlkuZnVuY3Rpb259LCEwKSksSS5tZXRob2Q9KEkubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89ciYmQy5tZXJnZShyLmNvbW1vbixyW0kubWV0aG9kXSk7ciYmQy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgcltFXX0pLEkuaGVhZGVycz1tLmNvbmNhdChvLHIpO2xldCBuPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3R5cGVvZiBjLnJ1bldoZW49PSJmdW5jdGlvbiImJmMucnVuV2hlbihJKT09PSExfHwoYT1hJiZjLnN5bmNocm9ub3VzLG4udW5zaGlmdChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKSl9KTtsZXQgUT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGMpe1EucHVzaChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKX0pO2xldCBCLGk9MCxmO2lmKCFhKXtsZXQgRT1bREEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxuKSxFLnB1c2guYXBwbHkoRSxRKSxmPUUubGVuZ3RoLEI9UHJvbWlzZS5yZXNvbHZlKEkpO2k8ZjspQj1CLnRoZW4oRVtpKytdLEVbaSsrXSk7cmV0dXJuIEJ9Zj1uLmxlbmd0aDtsZXQgcz1JO2ZvcihpPTA7aTxmOyl7bGV0IEU9bltpKytdLGM9bltpKytdO3RyeXtzPUUocyl9Y2F0Y2godSl7Yy5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXtCPURBLmNhbGwodGhpcyxzKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKGk9MCxmPVEubGVuZ3RoO2k8ZjspQj1CLnRoZW4oUVtpKytdLFFbaSsrXSk7cmV0dXJuIEJ9Z2V0VXJpKHQpe3Q9ayh0aGlzLmRlZmF1bHRzLHQpO2xldCBJPSQodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gWChJLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe3gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKEksZSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKGV8fHt9LHttZXRob2Q6dCx1cmw6SSxkYXRhOihlfHx7fSkuZGF0YX0pKX19KTtDLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBJKGUpe3JldHVybiBmdW5jdGlvbihyLG8sbil7cmV0dXJuIHRoaXMucmVxdWVzdChrKG58fHt9LHttZXRob2Q6dCxoZWFkZXJzOmU/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTpvfSkpfX14LnByb3RvdHlwZVt0XT1JKCkseC5wcm90b3R5cGVbdCsiRm9ybSJdPUkoITApfSk7dmFyIEFBPXg7dmFyIGpBPWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBJO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXtJPXJ9KTtsZXQgZT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGc9PntpZighZS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1lLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOyllLl9saXN0ZW5lcnNbcl0oZyk7ZS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1nPT57bGV0IHIsbz1uZXcgUHJvbWlzZShuPT57ZS5zdWJzY3JpYmUobikscj1ufSkudGhlbihnKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKHIpfSxvfSx0KGZ1bmN0aW9uKHIsbyxuKXtlLnJlYXNvbnx8KGUucmVhc29uPW5ldyBIKHIsbyxuKSxJKGUucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IEk9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7SSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEksMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihnKXt0PWd9KSxjYW5jZWw6dH19fSxidD1qQTtmdW5jdGlvbiBXQShBKXtyZXR1cm4gZnVuY3Rpb24oSSl7cmV0dXJuIEEuYXBwbHkobnVsbCxJKX19ZnVuY3Rpb24gWkEoQSl7cmV0dXJuIEMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFZBPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhWQSkuZm9yRWFjaCgoW0EsdF0pPT57VkFbdF09QX0pO3ZhciBNdD1WQTtmdW5jdGlvbiBxdChBKXtsZXQgdD1uZXcgQUEoQSksST1XKEFBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBDLmV4dGVuZChJLEFBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksQy5leHRlbmQoSSx0LG51bGwse2FsbE93bktleXM6ITB9KSxJLmNyZWF0ZT1mdW5jdGlvbihnKXtyZXR1cm4gcXQoayhBLGcpKX0sSX12YXIgaD1xdChUKTtoLkF4aW9zPUFBO2guQ2FuY2VsZWRFcnJvcj1IO2guQ2FuY2VsVG9rZW49YnQ7aC5pc0NhbmNlbD12O2guVkVSU0lPTj11QTtoLnRvRm9ybURhdGE9SjtoLkF4aW9zRXJyb3I9bDtoLkNhbmNlbD1oLkNhbmNlbGVkRXJyb3I7aC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtoLnNwcmVhZD1XQTtoLmlzQXhpb3NFcnJvcj1aQTtoLm1lcmdlQ29uZmlnPWs7aC5BeGlvc0hlYWRlcnM9bTtoLmZvcm1Ub0pTT049QT0+Y0EoQy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtoLmdldEFkYXB0ZXI9bEEuZ2V0QWRhcHRlcjtoLkh0dHBTdGF0dXNDb2RlPU10O2guZGVmYXVsdD1oO3ZhciBkQT1oO3ZhcntBeGlvczppbyxBeGlvc0Vycm9yOkNvLENhbmNlbGVkRXJyb3I6Qm8saXNDYW5jZWw6bm8sQ2FuY2VsVG9rZW46c28sVkVSU0lPTjpRbyxhbGw6RW8sQ2FuY2VsOmFvLGlzQXhpb3NFcnJvcjpjbyxzcHJlYWQ6Zm8sdG9Gb3JtRGF0YTpsbyxBeGlvc0hlYWRlcnM6RG8sSHR0cFN0YXR1c0NvZGU6dW8sZm9ybVRvSlNPTjpobyxnZXRBZGFwdGVyOnlvLG1lcmdlQ29uZmlnOndvfT1kQTt2YXIgdEEsTCx6QSxYQT17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe3pBPW5ldyBVaW50OEFycmF5KEwuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSx5QT1jbGFzc3tpbml0KCl7cmV0dXJuIHRBfHwodHlwZW9mIGZldGNoPCJ1Ij90QT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK0t0KS50aGVuKHQ9PnQuYXJyYXlCdWZmZXIoKSkudGhlbih0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0LFhBKSkudGhlbih0aGlzLl9pbml0KTp0QT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShLdCwiYmFzZTY0IiksWEEpLnRoZW4odGhpcy5faW5pdCksdEEpfV9pbml0KHQpe0w9dC5pbnN0YW5jZSxYQS5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUodCxJPTApe2lmKCFMKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBlPXQuYnl0ZUxlbmd0aCxnPUwuZXhwb3J0cy5tYWxsb2MoZSk7ekEuc2V0KHQsZyksST1JfHxOdW1iZXIoTC5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUoZyxlKSk7bGV0IHI9TC5leHBvcnRzLm1hbGxvYyhJKSxvPUwuZXhwb3J0cy5aU1REX2RlY29tcHJlc3MocixJLGcsZSksbj16QS5zbGljZShyLHIrbyk7cmV0dXJuIEwuZXhwb3J0cy5mcmVlKGcpLEwuZXhwb3J0cy5mcmVlKHIpLG59fSxLdD0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBPdD1uZXcgeUEsVHQ9ITE7YXN5bmMgZnVuY3Rpb24gY2UoQSx0LEkpe2xldCBlPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP2U9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP2U9QTplPWAke3R9LyR7QX1gLGUuZW5kc1dpdGgoIi5qcyIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTMpKSxlLmVuZHNXaXRoKCIud2FzbSIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTUpKTtsZXQgZz1gJHtlfS53YXNtYCxyPWF3YWl0IGRBLmdldChgJHtnfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6SX0pO1R0fHwoYXdhaXQgT3QuaW5pdCgpLFR0PSEwKTtsZXQgbj1PdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7ZX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIFB0PWNlO3ZhciB3QT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGZlKEEsdCxJKXtsZXQgZT1BLGc9QSxyPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKGU9bmV3IFVSTChBLmhyZWYpLGc9ZS5ocmVmKSx3QS5oYXMoZyk/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLFB0KGUsdCxJKSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIHh0PWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9dWU7ZnVuY3Rpb24gaGUoQSx0KXtsZXQgST1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e0k9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDg6e0k9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFMuVUludDE2OntJPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFMuSW50MTY6e0k9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7ST1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDMyOntJPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ0ludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQzMjp7ST1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDY0OntJPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ST1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ST1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIEl9dmFyIEc9aGU7dmFyIFp0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGp0PW5ldyBUZXh0RW5jb2RlcixXdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSx0KXtsZXQgST17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3Blbih0LEkuZmxhZ3MpLHI9QS5mc19zdGF0KHQpLnNpemUsbz1udWxsO1p0P289bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOm89bmV3IEFycmF5QnVmZmVyKHIpO2xldCBuPW5ldyBVaW50OEFycmF5KG8pO3JldHVybiBBLmZzX3JlYWQoZSxuLDAsciwwKSxBLmZzX2Nsb3NlKGUpLG59ZnVuY3Rpb24gVnQoQSx0LEkpe2xldCBlPW51bGw7WnQ/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoSSk6ZT1uZXcgQXJyYXlCdWZmZXIoSSk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxJKTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiBkKEEsdCxJLGUpe2xldCBnPTA7cmV0dXJuIHQhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGUsdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gTShBLHQsSSl7bGV0IGU9SlNPTi5zdHJpbmdpZnkodCksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gcChBLHQsSSxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLG89VnQoQSxnLHIpO3JldHVybiBHKGUsby5idWZmZXIpfWZ1bmN0aW9uIG1BKEEsdCl7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksZT1BLlVURjhUb1N0cmluZyhJKTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLHQsSSxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxCKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IGk9anQuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IGk9anQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IGk9US5kYXRhLmRhdGEsZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IGk9US5kYXRhLGY9ZChBLGkuZGF0YSxCLDApLHM9ZChBLGkuZGlyZWN0aW9uLEIsMSksRT10eXBlb2YgaS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShpLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOmkuaW1hZ2VUeXBlLG5hbWU6aS5uYW1lLG9yaWdpbjppLm9yaWdpbixzcGFjaW5nOmkuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsc2l6ZTppLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtNKEEsYyxCKTticmVha31jYXNlIEQuTWVzaDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5jZWxscyxCLDEpLEU9ZChBLGkucG9pbnREYXRhLEIsMiksYz1kKEEsaS5jZWxsRGF0YSxCLDMpLHU9e21lc2hUeXBlOmkubWVzaFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczppLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsY2VsbEJ1ZmZlclNpemU6aS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsdSxCKTticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkucG9pbnREYXRhLEIsMSksRT17cG9pbnRTZXRUeXBlOmkucG9pbnRTZXRUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YH07TShBLEUsQik7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnZlcnRpY2VzLEIsMSksRT1kKEEsaS5saW5lcyxCLDIpLGM9ZChBLGkucG9seWdvbnMsQiwzKSx1PWQoQSxpLnRyaWFuZ2xlU3RyaXBzLEIsNCkseT1kKEEsaS5wb2ludERhdGEsQiw1KSxSPWQoQSxpLnBvaW50RGF0YSxCLDYpLE49e3BvbHlEYXRhVHlwZTppLnBvbHlEYXRhVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6aS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsbGluZXNCdWZmZXJTaXplOmkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTppLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6aS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07TShBLE4sQik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgbz1BLmdldE1vZHVsZVN0ZG91dCgpLG49QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiBJIT1udWxsJiZJLmxlbmd0aD4wJiZyPT09MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7bGV0IGk9bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9e2RhdGE6V3QuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPUpTT04ucGFyc2UoV3QuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pO2k9e2RhdGE6VnQoQSxzLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgcz1tQShBLEIpO3MuZGF0YT1wKEEsQiwwLHMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLHMuZGlyZWN0aW9uPXAoQSxCLDEsai5GbG9hdDY0KSxzLm1ldGFkYXRhPW5ldyBNYXAocy5tZXRhZGF0YSksaT1zO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxzPjA/cy5jZWxscz1wKEEsQiwxLHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOnMuY2VsbHM9RyhzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMixzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsMyxzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwxLHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxqLkZsb2F0MzIpOnMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXkscy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9zLnZlcnRpY2VzPXAoQSxCLDEsUy5VSW50MzIpOnMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LHMubGluZXNCdWZmZXJTaXplPjA/cy5saW5lcz1wKEEsQiwyLFMuVUludDMyKTpzLmxpbmVzPW5ldyBVaW50MzJBcnJheSxzLnBvbHlnb25zQnVmZmVyU2l6ZT4wP3MucG9seWdvbnM9cChBLEIsMyxTLlVJbnQzMik6cy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXkscy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9zLnRyaWFuZ2xlU3RyaXBzPXAoQSxCLDQsUy5VSW50MzIpOnMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDUscy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsNixzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOlEudHlwZSxkYXRhOml9O2EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpyLHN0ZG91dDpvLHN0ZGVycjpuLG91dHB1dHM6YX19dmFyIFh0PXllO3ZhciB3ZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gbWUoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBJPVtdO2ZvcihsZXQgZT0wO2U8QS5sZW5ndGg7ZSsrKXtsZXQgZz1wZShBW2VdLHQpO2chPT1udWxsJiZJLnB1c2goZyl9cmV0dXJuIEl9ZnVuY3Rpb24gcGUoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBJPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP0k9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoST1BKSx3ZSYmSSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9JOkkuc2xpY2UoMCl9dmFyIHp0PW1lO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBfdD1TZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgdnQ9RmU7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyICR0PVJlO2FzeW5jIGZ1bmN0aW9uIE5lKEEsdCxJLGUpe2xldCBnPVh0KEEsdCxJLGUpLHI9W107cmV0dXJuIGcub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8udHlwZT09PUQuQmluYXJ5U3RyZWFtfHxvLnR5cGU9PT1ELkJpbmFyeUZpbGUpe2xldCBuPW8uZGF0YTtyLnB1c2gobil9ZWxzZSBpZihvLnR5cGU9PT1ELkltYWdlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLl90KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuTWVzaCl7bGV0IG49by5kYXRhO3IucHVzaCguLi52dChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELlBvbHlEYXRhKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLiR0KG4pKX19KSxGQShnLHp0KHIsITApKX12YXIgQUk9TmU7dmFyIFVlPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsSSxlLGcscil7bGV0IG89YXdhaXQgeHQoQSx0LHIpO3JldHVybiBhd2FpdCBBSShvLEksZSxnKX19O2lBKFVlKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO2J0KFJ0KTtleHBvcnR7eiBhcyBjb21wcmVzc1N0cmluZ2lmeSxVQSBhcyBnZXREZWZhdWx0V2ViV29ya2VyLGogYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsRkEgYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCx1byBhcyBpbWFnZVRvSnNvbixmbyBhcyBqc29uVG9JbWFnZSxtbyBhcyBqc29uVG9NZXNoLGhvIGFzIGpzb25Ub1BvbHlEYXRhLHBvIGFzIG1lc2hUb0pzb24sViBhcyBwYXJzZVN0cmluZ0RlY29tcHJlc3MseW8gYXMgcG9seURhdGFUb0pzb24sWGEgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixidCBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxXYSBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLE5BIGFzIHZlcnNpb259OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/_version.py b/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/_version.py index 88c513ea3..ff0416876 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/_version.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/_version.py @@ -1 +1 @@ -__version__ = "3.3.0" +__version__ = "3.3.1" diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify/itkwasm_compress_stringify/_version.py b/packages/compress-stringify/python/itkwasm-compress-stringify/itkwasm_compress_stringify/_version.py index 88c513ea3..ff0416876 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify/itkwasm_compress_stringify/_version.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify/itkwasm_compress_stringify/_version.py @@ -1 +1 @@ -__version__ = "3.3.0" +__version__ = "3.3.1" diff --git a/packages/compress-stringify/typescript/package.json b/packages/compress-stringify/typescript/package.json index d2c27cf56..8487184c7 100644 --- a/packages/compress-stringify/typescript/package.json +++ b/packages/compress-stringify/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compress-stringify", - "version": "3.3.0", + "version": "3.3.1", "description": "Zstandard compression and decompression and base64 encoding and decoding in WebAssembly.", "type": "module", "module": "./dist/index.js", From 4e7bcc262c1195754599485abb456dae831369ef Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 22:04:05 -0400 Subject: [PATCH 20/39] build(compress-stringify): add .npmrc --- packages/compress-stringify/.npmrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/compress-stringify/.npmrc diff --git a/packages/compress-stringify/.npmrc b/packages/compress-stringify/.npmrc new file mode 100644 index 000000000..a4be22c92 --- /dev/null +++ b/packages/compress-stringify/.npmrc @@ -0,0 +1 @@ +git-checks=false From 649ef6b384773b0fd86c5d0e222a245835156a21 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 22:23:42 -0400 Subject: [PATCH 21/39] build(compare-meshes): add pixi python configuration --- packages/compare-meshes/.gitignore | 1 + packages/compare-meshes/.npmrc | 1 + packages/compare-meshes/package.json | 17 +- packages/compare-meshes/pixi.lock | 8235 +++++++++++++++++ packages/compare-meshes/pixi.toml | 140 + packages/compare-meshes/pnpm-workspace.yaml | 2 - .../compare-meshes/typescript/package.json | 3 +- packages/mesh-io/typescript/package.json | 1 - pnpm-lock.yaml | 5 +- 9 files changed, 8385 insertions(+), 20 deletions(-) create mode 100644 packages/compare-meshes/.npmrc create mode 100644 packages/compare-meshes/pixi.lock create mode 100644 packages/compare-meshes/pixi.toml delete mode 100644 packages/compare-meshes/pnpm-workspace.yaml diff --git a/packages/compare-meshes/.gitignore b/packages/compare-meshes/.gitignore index 055027bc2..417541325 100644 --- a/packages/compare-meshes/.gitignore +++ b/packages/compare-meshes/.gitignore @@ -7,3 +7,4 @@ test typescript/src/version.ts typescript/dist typescript/demo-app +pyodide/ diff --git a/packages/compare-meshes/.npmrc b/packages/compare-meshes/.npmrc new file mode 100644 index 000000000..a4be22c92 --- /dev/null +++ b/packages/compare-meshes/.npmrc @@ -0,0 +1 @@ +git-checks=false diff --git a/packages/compare-meshes/package.json b/packages/compare-meshes/package.json index b452f6b70..17ccda8c8 100644 --- a/packages/compare-meshes/package.json +++ b/packages/compare-meshes/package.json @@ -1,9 +1,8 @@ { "name": "@itk-wasm/compare-meshes-build", - "version": "0.1.0", + "version": "0.4.1", "private": true, - "packageManager": "pnpm@9.6.0", - "description": "Scripts to generate compare-meshes itk-wasm artifacts.", + "description": "@itk-wasm/compare-meshes build configuration.", "type": "module", "itk-wasm": { "emscripten-docker-image": "itkwasm/emscripten:latest", @@ -28,22 +27,18 @@ "bindgen:typescript": "itk-wasm pnpm-script bindgen:typescript", "bindgen:python": "itk-wasm pnpm-script bindgen:python", "build:gen:typescript": "itk-wasm pnpm-script build:gen:typescript", - "build:gen:python": "itk-wasm pnpm-script build:gen:python", - "build:micromamba": "itk-wasm pnpm-script build:micromamba", - "build:python:versionSync": "itk-wasm pnpm-script build:python:versionSync", - "publish:python": "itk-wasm pnpm-script publish:python", + "build:gen:python": "pnpm build:wasi && pnpm bindgen:python", "test": "pnpm test:data:download && pnpm build:gen:python && pnpm test:python", "test:data:download": "dam download test/data test/data.tar.gz bafkreidioh62iouwzrrpavx7g72fdjxze7gp4cqpf36t4pdafcpcmx4zye https://github.com/InsightSoftwareConsortium/ITK-Wasm/releases/download/itk-wasm-v1.0.0-b.171/itkwasm-compare-meshes-test-data.tar.gz", "test:data:pack": "dam pack test/data test/data.tar.gz", - "test:python:wasi": "itk-wasm pnpm-script test:python:wasi", - "test:python:emscripten": "itk-wasm pnpm-script test:python:emscripten", - "test:python:dispatch": "itk-wasm pnpm-script test:python:emscripten", + "test:python:wasi": "pnpm test:data:download && pixi run test-wasi", + "test:python:emscripten": "pnpm test:data:download && pixi run test-emscripten", + "test:python:dispatch": "pnpm test:data:download && pixi run test-dispatch", "test:python": "itk-wasm pnpm-script test:python", "test:wasi": "itk-wasm pnpm-script test:wasi" }, "devDependencies": { "@itk-wasm/dam": "^1.1.1", - "@thewtex/setup-micromamba": "^1.9.7", "itk-wasm": "workspace:^", "@itk-wasm/mesh-io-build": "workspace:^", "@itk-wasm/compare-meshes-build": "workspace:^" diff --git a/packages/compare-meshes/pixi.lock b/packages/compare-meshes/pixi.lock new file mode 100644 index 000000000..8b293664b --- /dev/null +++ b/packages/compare-meshes/pixi.lock @@ -0,0 +1,8235 @@ +version: 5 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + python: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: python/itkwasm-compare-meshes + - pypi: python/itkwasm-compare-meshes-wasi + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: python/itkwasm-compare-meshes + - pypi: python/itkwasm-compare-meshes-wasi + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: python/itkwasm-compare-meshes + - pypi: python/itkwasm-compare-meshes-wasi + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: python/itkwasm-compare-meshes + - pypi: python/itkwasm-compare-meshes-wasi +packages: +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + size: 23621 + timestamp: 1650670423406 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23621 + timestamp: 1650670423406 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + size: 23712 + timestamp: 1650670790230 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23712 + timestamp: 1650670790230 +- kind: conda + name: anyio + version: 4.6.2.post1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - uvloop >=0.21.0b1 + - trio >=0.26.1 + license: MIT + license_family: MIT + size: 109864 + timestamp: 1728935803440 +- kind: conda + name: anyio + version: 4.6.2.post1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - uvloop >=0.21.0b1 + - trio >=0.26.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/anyio?source=compressed-mapping + size: 109864 + timestamp: 1728935803440 +- kind: pypi + name: attrs + version: 24.2.0 + url: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + sha256: 81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'benchmark' + - hypothesis ; extra == 'benchmark' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pympler ; extra == 'benchmark' + - pytest-codspeed ; extra == 'benchmark' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pytest-xdist[psutil] ; extra == 'benchmark' + - pytest>=4.3.0 ; extra == 'benchmark' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'cov' + - coverage[toml]>=5.3 ; extra == 'cov' + - hypothesis ; extra == 'cov' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'cov' + - pympler ; extra == 'cov' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'cov' + - pytest-xdist[psutil] ; extra == 'cov' + - pytest>=4.3.0 ; extra == 'cov' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'dev' + - hypothesis ; extra == 'dev' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'dev' + - pre-commit ; extra == 'dev' + - pympler ; extra == 'dev' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'dev' + - pytest-xdist[psutil] ; extra == 'dev' + - pytest>=4.3.0 ; extra == 'dev' + - cogapp ; extra == 'docs' + - furo ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-notfound-page ; extra == 'docs' + - sphinxcontrib-towncrier ; extra == 'docs' + - towncrier<24.7 ; extra == 'docs' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'tests' + - hypothesis ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests' + - pympler ; extra == 'tests' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests' + - pytest-xdist[psutil] ; extra == 'tests' + - pytest>=4.3.0 ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + requires_python: '>=3.7' +- kind: conda + name: backports + version: '1.0' + build: pyhd8ed1ab_4 + build_number: 4 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + sha256: 31b51537ce7d2ba8b5b3d0095f1813711884304ac1701bc55938ca75f6c82e19 + md5: 67bdebbc334513034826e9b63f769d4c + depends: + - python >=3 + license: BSD-3-Clause + license_family: BSD + size: 6989 + timestamp: 1722295637981 +- kind: conda + name: backports + version: '1.0' + build: pyhd8ed1ab_4 + build_number: 4 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + sha256: 31b51537ce7d2ba8b5b3d0095f1813711884304ac1701bc55938ca75f6c82e19 + md5: 67bdebbc334513034826e9b63f769d4c + depends: + - python >=3 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6989 + timestamp: 1722295637981 +- kind: conda + name: backports.tarfile + version: 1.0.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + sha256: 7ba30f32daad2e7ca251508525185ba170eedc14123572611c2acf261c7956b3 + md5: c747b1d79f136013c3b7ebcba876afa6 + depends: + - backports + - python >=3.8 + license: MIT + license_family: MIT + size: 31951 + timestamp: 1712700751335 +- kind: conda + name: backports.tarfile + version: 1.0.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + sha256: 7ba30f32daad2e7ca251508525185ba170eedc14123572611c2acf261c7956b3 + md5: c747b1d79f136013c3b7ebcba876afa6 + depends: + - backports + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/backports-tarfile?source=hash-mapping + size: 31951 + timestamp: 1712700751335 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h2466b09_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: bzip2-1.0.6 + license_family: BSD + size: 54927 + timestamp: 1720974860185 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h2466b09_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 54927 + timestamp: 1720974860185 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h68df207_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb + md5: 56398c28220513b9ea13d7b450acfb20 + depends: + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + size: 189884 + timestamp: 1720974504976 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h68df207_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb + md5: 56398c28220513b9ea13d7b450acfb20 + depends: + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 189884 + timestamp: 1720974504976 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + size: 122909 + timestamp: 1720974522888 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 122909 + timestamp: 1720974522888 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: h56e8100_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 + md5: 4c4fd67c18619be5aa65dc5b6c72e490 + license: ISC + size: 158773 + timestamp: 1725019107649 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: h56e8100_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 + md5: 4c4fd67c18619be5aa65dc5b6c72e490 + license: ISC + purls: [] + size: 158773 + timestamp: 1725019107649 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 + license: ISC + size: 159003 + timestamp: 1725018903918 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 + license: ISC + purls: [] + size: 159003 + timestamp: 1725018903918 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hcefe29a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + sha256: 2a2d827bee3775a85f0f1b2f2089291475c4416336d1b3a8cbce2964db547af8 + md5: 70e57e8f59d2c98f86b49c69e5074be5 + license: ISC + size: 159106 + timestamp: 1725020043153 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hcefe29a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + sha256: 2a2d827bee3775a85f0f1b2f2089291475c4416336d1b3a8cbce2964db547af8 + md5: 70e57e8f59d2c98f86b49c69e5074be5 + license: ISC + purls: [] + size: 159106 + timestamp: 1725020043153 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + size: 158482 + timestamp: 1725019034582 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + purls: [] + size: 158482 + timestamp: 1725019034582 +- kind: conda + name: certifi + version: 2024.8.30 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + size: 163752 + timestamp: 1725278204397 +- kind: conda + name: certifi + version: 2024.8.30 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping + size: 163752 + timestamp: 1725278204397 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h06ac9bb_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 + md5: a861504bbea4161a9170b85d4d2be840 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 294403 + timestamp: 1725560714366 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h06ac9bb_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 + md5: a861504bbea4161a9170b85d4d2be840 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 294403 + timestamp: 1725560714366 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 281206 + timestamp: 1725560813378 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 281206 + timestamp: 1725560813378 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h4389bb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + sha256: ac007bf5fd56d13e16d95eea036433012f2e079dc015505c8a79efebbad1fcbc + md5: 08310c1a22ef957d537e547f8d484f92 + depends: + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 288142 + timestamp: 1725560896359 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h4389bb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + sha256: ac007bf5fd56d13e16d95eea036433012f2e079dc015505c8a79efebbad1fcbc + md5: 08310c1a22ef957d537e547f8d484f92 + depends: + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 288142 + timestamp: 1725560896359 +- kind: conda + name: cffi + version: 1.17.1 + build: py312hac81daf_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + sha256: 1162e3ca039e7ca7c0e78f0a020ed1bde968096841b663e3f393c966eb82f0f0 + md5: 1a256e5581b1099e9295cb84d53db3ea + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 312892 + timestamp: 1725561779888 +- kind: conda + name: cffi + version: 1.17.1 + build: py312hac81daf_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + sha256: 1162e3ca039e7ca7c0e78f0a020ed1bde968096841b663e3f393c966eb82f0f0 + md5: 1a256e5581b1099e9295cb84d53db3ea + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 312892 + timestamp: 1725561779888 +- kind: conda + name: click + version: 8.1.7 + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 84437 + timestamp: 1692311973840 +- kind: conda + name: click + version: 8.1.7 + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 84437 + timestamp: 1692311973840 +- kind: conda + name: click + version: 8.1.7 + build: win_pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 + md5: 3549ecbceb6cd77b91a105511b7d0786 + depends: + - __win + - colorama + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 85051 + timestamp: 1692312207348 +- kind: conda + name: click + version: 8.1.7 + build: win_pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 + md5: 3549ecbceb6cd77b91a105511b7d0786 + depends: + - __win + - colorama + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 85051 + timestamp: 1692312207348 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + sha256: ba9e5aced2e7dc0bbc48f60bf38f514839424a01975fb2aed30e9246c2f82c7c + md5: 2abada8c216dd6e32514535a3fa245d4 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + size: 1488388 + timestamp: 1729286882127 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + sha256: ba9e5aced2e7dc0bbc48f60bf38f514839424a01975fb2aed30e9246c2f82c7c + md5: 2abada8c216dd6e32514535a3fa245d4 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1488388 + timestamp: 1729286882127 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312he723553_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + sha256: bd9cc8410bf31ac8b90d63dda92d5810af16c3841ca6dd09be9b7f9c5c7688ba + md5: bfacbf2e4560c7d6416d40f573961918 + depends: + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + size: 1480456 + timestamp: 1729287055014 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312he723553_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + sha256: bd9cc8410bf31ac8b90d63dda92d5810af16c3841ca6dd09be9b7f9c5c7688ba + md5: bfacbf2e4560c7d6416d40f573961918 + depends: + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1480456 + timestamp: 1729287055014 +- kind: conda + name: dbus + version: 1.13.6 + build: h12b9eeb_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + sha256: 5fe76bdf27a142cfb9da0fb3197c562e528d2622b573765bee5c9904cf5e6b6b + md5: f3d63805602166bac09386741e00935e + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + size: 672759 + timestamp: 1640113663539 +- kind: conda + name: dbus + version: 1.13.6 + build: h12b9eeb_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + sha256: 5fe76bdf27a142cfb9da0fb3197c562e528d2622b573765bee5c9904cf5e6b6b + md5: f3d63805602166bac09386741e00935e + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 672759 + timestamp: 1640113663539 +- kind: conda + name: dbus + version: 1.13.6 + build: h5008d03_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 + md5: ecfff944ba3960ecb334b9a2663d708d + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + size: 618596 + timestamp: 1640112124844 +- kind: conda + name: dbus + version: 1.13.6 + build: h5008d03_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 + md5: ecfff944ba3960ecb334b9a2663d708d + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 618596 + timestamp: 1640112124844 +- kind: conda + name: distlib + version: 0.3.9 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb + md5: fe521c1608280cc2803ebd26dc252212 + depends: + - python 2.7|>=3.6 + license: Apache-2.0 + license_family: APACHE + size: 276214 + timestamp: 1728557312342 +- kind: conda + name: distlib + version: 0.3.9 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb + md5: fe521c1608280cc2803ebd26dc252212 + depends: + - python 2.7|>=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/distlib?source=hash-mapping + size: 276214 + timestamp: 1728557312342 +- kind: conda + name: editables + version: '0.5' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + sha256: de160a7494e7bc72360eea6a29cbddf194d0a79f45ff417a4de20e6858cf79a9 + md5: 9873878e2a069bc358b69e9a29c1ecd5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 10988 + timestamp: 1705857085102 +- kind: conda + name: editables + version: '0.5' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + sha256: de160a7494e7bc72360eea6a29cbddf194d0a79f45ff417a4de20e6858cf79a9 + md5: 9873878e2a069bc358b69e9a29c1ecd5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/editables?source=hash-mapping + size: 10988 + timestamp: 1705857085102 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: expat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + sha256: c827521e080d0f3395655924f1c364d48a1eac1ff3e193a12d0441e9c3b51e91 + md5: 901a44b341632b0c233756ed5abcd78b + depends: + - libexpat 2.6.3 h5ad3122_0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 130283 + timestamp: 1725568848182 +- kind: conda + name: expat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + sha256: c827521e080d0f3395655924f1c364d48a1eac1ff3e193a12d0441e9c3b51e91 + md5: 901a44b341632b0c233756ed5abcd78b + depends: + - libexpat 2.6.3 h5ad3122_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 130283 + timestamp: 1725568848182 +- kind: conda + name: filelock + version: 3.16.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + size: 17357 + timestamp: 1726613593584 +- kind: conda + name: filelock + version: 3.16.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + purls: + - pkg:pypi/filelock?source=hash-mapping + size: 17357 + timestamp: 1726613593584 +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + sha256: 7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + sha256: 4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + sha256: 1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: conda + name: h11 + version: 0.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h11 + version: 0.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/h11?source=hash-mapping + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + size: 46754 + timestamp: 1634280590080 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + size: 46754 + timestamp: 1634280590080 +- kind: conda + name: hatch + version: 1.13.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + sha256: 675b0304b129a4dbc39b8e6f337cea51adebef20508a656f43b6e6b43d9cf458 + md5: b8a6437f94d29aef00decdbe1174be27 + depends: + - click >=8.0.6 + - hatchling >=1.24.2 + - httpx >=0.22.0 + - hyperlink >=21.0.0 + - keyring >=23.5.0 + - packaging >=23.2 + - pexpect >=4.8,<5 + - platformdirs >=2.5.0 + - python >=3.8 + - rich >=11.2.0 + - shellingham >=1.4.0 + - tomli-w >=1.0 + - tomlkit >=0.11.1 + - userpath >=1.7,<2 + - uv >=0.1.35 + - virtualenv >=20.26.1 + - zstandard <1.0 + license: MIT + license_family: MIT + size: 177173 + timestamp: 1728879212263 +- kind: conda + name: hatch + version: 1.13.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + sha256: 675b0304b129a4dbc39b8e6f337cea51adebef20508a656f43b6e6b43d9cf458 + md5: b8a6437f94d29aef00decdbe1174be27 + depends: + - click >=8.0.6 + - hatchling >=1.24.2 + - httpx >=0.22.0 + - hyperlink >=21.0.0 + - keyring >=23.5.0 + - packaging >=23.2 + - pexpect >=4.8,<5 + - platformdirs >=2.5.0 + - python >=3.8 + - rich >=11.2.0 + - shellingham >=1.4.0 + - tomli-w >=1.0 + - tomlkit >=0.11.1 + - userpath >=1.7,<2 + - uv >=0.1.35 + - virtualenv >=20.26.1 + - zstandard <1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatch?source=hash-mapping + size: 177173 + timestamp: 1728879212263 +- kind: conda + name: hatchling + version: 1.25.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + sha256: fb8a16a913f909d8f7d2ae95c18a1aeb7be3eebfb1b7a4246500c06d54498f89 + md5: 7571d6e5561b04aef679a11904dfcebf + depends: + - editables >=0.3 + - importlib-metadata + - packaging >=21.3 + - pathspec >=0.10.1 + - pluggy >=1.0.0 + - python >=3.7 + - tomli >=1.2.2 + - trove-classifiers + license: MIT + license_family: MIT + size: 64580 + timestamp: 1719090878694 +- kind: conda + name: hatchling + version: 1.25.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + sha256: fb8a16a913f909d8f7d2ae95c18a1aeb7be3eebfb1b7a4246500c06d54498f89 + md5: 7571d6e5561b04aef679a11904dfcebf + depends: + - editables >=0.3 + - importlib-metadata + - packaging >=21.3 + - pathspec >=0.10.1 + - pluggy >=1.0.0 + - python >=3.7 + - tomli >=1.2.2 + - trove-classifiers + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatchling?source=hash-mapping + size: 64580 + timestamp: 1719090878694 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: httpcore + version: 1.0.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + sha256: 8952c3f1eb18bf4d7e813176c3b23e0af4e863e8b05087e73f74f371d73077ca + md5: b8e1901ef9a215fc41ecfb6bef7e0943 + depends: + - anyio >=3.0,<5.0 + - certifi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + size: 45711 + timestamp: 1727821031365 +- kind: conda + name: httpcore + version: 1.0.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + sha256: 8952c3f1eb18bf4d7e813176c3b23e0af4e863e8b05087e73f74f371d73077ca + md5: b8e1901ef9a215fc41ecfb6bef7e0943 + depends: + - anyio >=3.0,<5.0 + - certifi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + size: 45711 + timestamp: 1727821031365 +- kind: conda + name: httpx + version: 0.27.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: httpx + version: 0.27.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 14646 + timestamp: 1619110249723 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 14646 + timestamp: 1619110249723 +- kind: conda + name: hyperlink + version: 21.0.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + sha256: 026cb82ada41be9ee2836a2ace526e85c4603e77617887c41c6e62c9bde798b3 + md5: 1303beb57b40f8f4ff6fb1bb23bf0553 + depends: + - idna >=2.6 + - python + license: MIT + license_family: MIT + size: 72732 + timestamp: 1610092261086 +- kind: conda + name: hyperlink + version: 21.0.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + sha256: 026cb82ada41be9ee2836a2ace526e85c4603e77617887c41c6e62c9bde798b3 + md5: 1303beb57b40f8f4ff6fb1bb23bf0553 + depends: + - idna >=2.6 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperlink?source=hash-mapping + size: 72732 + timestamp: 1610092261086 +- kind: pypi + name: hypothesis + version: 6.115.5 + url: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + sha256: b7733459ae9a93020fac3b91b41473c9b85e975139a152a70d88f3a5caa3fa3f + requires_dist: + - attrs>=22.2.0 + - sortedcontainers<3.0.0,>=2.1.0 + - exceptiongroup>=1.0.0 ; python_full_version < '3.11' + - black>=19.10b0 ; extra == 'all' + - click>=7.0 ; extra == 'all' + - crosshair-tool>=0.0.74 ; extra == 'all' + - django>=4.2 ; extra == 'all' + - dpcontracts>=0.4 ; extra == 'all' + - hypothesis-crosshair>=0.0.16 ; extra == 'all' + - lark>=0.10.1 ; extra == 'all' + - libcst>=0.3.16 ; extra == 'all' + - numpy>=1.19.3 ; extra == 'all' + - pandas>=1.1 ; extra == 'all' + - pytest>=4.6 ; extra == 'all' + - python-dateutil>=1.4 ; extra == 'all' + - pytz>=2014.1 ; extra == 'all' + - redis>=3.0.0 ; extra == 'all' + - rich>=9.0.0 ; extra == 'all' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'all') or (sys_platform == 'win32' and extra == 'all') + - click>=7.0 ; extra == 'cli' + - black>=19.10b0 ; extra == 'cli' + - rich>=9.0.0 ; extra == 'cli' + - libcst>=0.3.16 ; extra == 'codemods' + - hypothesis-crosshair>=0.0.16 ; extra == 'crosshair' + - crosshair-tool>=0.0.74 ; extra == 'crosshair' + - python-dateutil>=1.4 ; extra == 'dateutil' + - django>=4.2 ; extra == 'django' + - dpcontracts>=0.4 ; extra == 'dpcontracts' + - black>=19.10b0 ; extra == 'ghostwriter' + - lark>=0.10.1 ; extra == 'lark' + - numpy>=1.19.3 ; extra == 'numpy' + - pandas>=1.1 ; extra == 'pandas' + - pytest>=4.6 ; extra == 'pytest' + - pytz>=2014.1 ; extra == 'pytz' + - redis>=3.0.0 ; extra == 'redis' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'zoneinfo') or (sys_platform == 'win32' and extra == 'zoneinfo') + requires_python: '>=3.9' +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 12129203 + timestamp: 1720853576813 +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12129203 + timestamp: 1720853576813 +- kind: conda + name: icu + version: '75.1' + build: hf9b3779_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 + md5: 268203e8b983fddb6412b36f2024e75c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 12282786 + timestamp: 1720853454991 +- kind: conda + name: icu + version: '75.1' + build: hf9b3779_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 + md5: 268203e8b983fddb6412b36f2024e75c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12282786 + timestamp: 1720853454991 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 11857802 + timestamp: 1720853997952 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 11857802 + timestamp: 1720853997952 +- kind: conda + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=hash-mapping + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: importlib_resources + version: 6.4.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + size: 32725 + timestamp: 1725921462405 +- kind: conda + name: importlib_resources + version: 6.4.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping + size: 32725 + timestamp: 1725921462405 +- kind: conda + name: iniconfig + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 + md5: f800d2da156d08e289b14e87e43c1ae5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=hash-mapping + size: 11101 + timestamp: 1673103208955 +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: a1b4e5511c2274025bffe80d081ef79ee41de580df80311007af1ec05e2774db + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 0f0dcce9df862831e705eebf0ffa95de554b17027f69d67b31b30dcb8d838019 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 88344f4c7e8a74dfdeb98e20232d1a9565eb7c381d8242534588ecc4e745ffb3 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + sha256: e5ffacab2c8609979c78c2d2e02ee7e6abd611261aac0613289d98e7c277cd83 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 21c7b5c451f73c8073eb3b5dd85f7c654399cdc25dd51669bfbbafa611aa4649 + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: b6af0e82dae0efa95ad87f36ccd55a955383b34a6bd8a036894fb96a3933615a + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 8ca83de9c269e6b20648f2391aa2bf96903b8ed645c3d8cd40d90b939dda439e + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + sha256: 6affe6986927fd176c176f5464d9ea9e737b85d8745f5c4129da910fd16235cb + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + sha256: ad59e6066dba25d6b0803023e95c7633a80e7b9c1a9ff89a41c97eae5a60e06f + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 6e8600df87c59233968013d162c5a353ca4c8f843c76117b52347aec20ff1620 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 86026c853f1fd0b13e282f952cff7455df0ac131cc608df8669ce335633eef0a + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: e8d90842d703877c4ce777efece3db478c8ed5e3a18488e277a480f05d61ebb0 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 393d711f9edb248aed402e7fc9613045536dbd6b45fc8db638a28d0a409fe974 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8c0eacb3aa100e4b369a673bb0e65c3c48c411bc4b716069bce4cee8c3f9e1cc + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: d969a2ab2775b2ace36edee274ffe4839b21c7ccd634844082028f9f373dfedb + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 11a34ac45b960aa883e1758ead15c5394814964573c93d736fc04f021c18cd22 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 3c10f157bddbdf86b596ec2742f17bcc35cd6ce7bd64bba712a2a0c0858c2dc7 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 914cae65049842affc820471e149b2cdd55d305ff1a740c34a47e1b1af567361 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + sha256: b8b746f6d5597687d0b50dd81d650da0293f2c3c90f31212baefdf46edb727d6 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 84bd859eeb17aed3de39f0b3357525a4bfac0db17263a8d36cd641e5f8c49b46 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + sha256: 31f24c218c763b2c15953453cc366c5ba09e7a5c7d47d432a24c0b6b12249206 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 5cd8ab0781e08a4022e36094bb60652d0ee2b7cd1912f325e8f32d8bd5501fcf + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 583b665d6b8578ac93691afb796faf69e30b8db8a205754cdc746707f9589fcd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: e2dcda0a07ccb6b9b518d3cc4413387a44c30a313c22e15bf818af06c7da8bfd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 15eab6a72bebeccfb8a0fb291b65c305e46776a18a8f3cb91f199fc8ecd137a1 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8a2d3f2872375a9c2694bb34a2e061a4d2666f8c13390f03d94219ba8370649e + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 3f41cff2136f69ae5c2ce6166191dff86e4722097411aaaba07a74884d36ff73 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: dde112dbb9b695c1908692a0086f60da8d5a123f7e959ebc5aaec2825aaf9793 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: ff2ca7cdf42c8c32b20e1ecf7ee0a0be68e885ce673c565e72a4876b28d2e2f3 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: b3c154e7a92be2ad48e6bf8bd5a8a17610f890bb420abb54dd2bde15b1c9c52c + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + sha256: 45374d3c38884ed02e0dfebf73f363e265184a50f7c46d55d8c9217e690a571f + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 8dd071dbb1ba1c8fcf26a4011fc3b7069d444e10bc56279d7b26fd3193ac58aa + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + sha256: 0b787ee92418a1f965c52eea1fd41a7aef4424eb6e07a290b0e1ddebf50a09e1 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + sha256: ee3defc13dc65f56127e468c145e9249265c275b63ea3c530c1b88f1df4a7033 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 72f82fab54c4ee4c6c579cfd5c963cba9a84ecc9909e61f3641caa9fef94b40c + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: eff3cd27756e96ebd31500ef258d0cc4a56e48c2c25c4533300469246623d7aa + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itkwasm + version: 1.0b179 + url: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + sha256: 43558ccd082f3dc3c9b3b2379cdb197635b33620d41dbc6c1fa9186d03c22a7e + requires_dist: + - importlib-metadata ; python_full_version < '3.10' + - numpy + - platformdirs ; sys_platform != 'emscripten' + - typing-extensions + - wasmtime>=13.0.2 ; sys_platform != 'emscripten' + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-compare-meshes + version: 0.1.0 + path: python/itkwasm-compare-meshes + sha256: 23e481ca99f305bb7938770deb867132ab893d88cd78cbe6721ec93e70931629 + requires_dist: + - itkwasm-compare-meshes-emscripten ; sys_platform == 'emscripten' + - itkwasm-compare-meshes-wasi ; sys_platform != 'emscripten' + - itkwasm>=1.0b171 + requires_python: '>=3.8' + editable: true +- kind: pypi + name: itkwasm-compare-meshes-wasi + version: 0.1.0 + path: python/itkwasm-compare-meshes-wasi + sha256: d923c8c1bdf257bc399a46af38b0120dad7b30b52b75ac220a863b4b6ed2b4fd + requires_dist: + - importlib-resources + - itkwasm>=1.0b171 + requires_python: '>=3.8' + editable: true +- kind: pypi + name: itkwasm-image-io + version: 1.3.0 + url: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + sha256: 121ef7e942f1f6c25ef428a0a39944a0a9eb9bce226d6ee7466df1e2d8fc9a56 + requires_dist: + - itkwasm-image-io-emscripten ; sys_platform == 'emscripten' + - itkwasm-image-io-wasi ; sys_platform != 'emscripten' + - itkwasm>=1.0b145 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-image-io-wasi + version: 1.3.0 + url: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + sha256: 13fe5cad7942dc9fc94ece5711d5b342b5cb90dc93f764558de195674a2b183b + requires_dist: + - importlib-resources + - itkwasm>=1.0b131 + requires_python: '>=3.8' +- kind: conda + name: jaraco.classes + version: 3.4.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + sha256: 538b1c6df537a36c63fd0ed83cb1c1c25b07d8d3b5e401991fdaff261a4b5b4d + md5: 7b756504d362cbad9b73a50a5455cafd + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + size: 12223 + timestamp: 1713939433204 +- kind: conda + name: jaraco.classes + version: 3.4.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + sha256: 538b1c6df537a36c63fd0ed83cb1c1c25b07d8d3b5e401991fdaff261a4b5b4d + md5: 7b756504d362cbad9b73a50a5455cafd + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-classes?source=hash-mapping + size: 12223 + timestamp: 1713939433204 +- kind: conda + name: jaraco.context + version: 5.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + sha256: 9e2aeacb1aed3ab4fc5883a357e8a874e12f687af300f8708ec12de2995e17d2 + md5: 72d7ad2dcd0f37eccb2ee35a1c8f6aaa + depends: + - backports.tarfile + - python >=3.8 + license: MIT + license_family: MIT + size: 12456 + timestamp: 1714372284922 +- kind: conda + name: jaraco.context + version: 5.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + sha256: 9e2aeacb1aed3ab4fc5883a357e8a874e12f687af300f8708ec12de2995e17d2 + md5: 72d7ad2dcd0f37eccb2ee35a1c8f6aaa + depends: + - backports.tarfile + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-context?source=hash-mapping + size: 12456 + timestamp: 1714372284922 +- kind: conda + name: jaraco.functools + version: 4.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + sha256: d2e866fd22a48eaa2f795b6a3b0bf16f066293322ce04dd65cca36267160ead6 + md5: 547670a612fd335eaa5ffbf0fa75cb64 + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + size: 15192 + timestamp: 1701695329516 +- kind: conda + name: jaraco.functools + version: 4.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + sha256: d2e866fd22a48eaa2f795b6a3b0bf16f066293322ce04dd65cca36267160ead6 + md5: 547670a612fd335eaa5ffbf0fa75cb64 + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-functools?source=hash-mapping + size: 15192 + timestamp: 1701695329516 +- kind: conda + name: jeepney + version: 0.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + sha256: 16639759b811866d63315fe1391f6fb45f5478b823972f4d3d9f0392b7dd80b8 + md5: 9800ad1699b42612478755a2d26c722d + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 36895 + timestamp: 1649085298891 +- kind: conda + name: jeepney + version: 0.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + sha256: 16639759b811866d63315fe1391f6fb45f5478b823972f4d3d9f0392b7dd80b8 + md5: 9800ad1699b42612478755a2d26c722d + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jeepney?source=hash-mapping + size: 36895 + timestamp: 1649085298891 +- kind: conda + name: jq + version: 1.7.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + sha256: 53437ca79e28003faac8058f6c025c83a819e122d3a0fb70624e6da0f77ab126 + md5: 397702b2c1e53f0f0312d2b170d2e699 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + size: 334346 + timestamp: 1702502754422 +- kind: conda + name: jq + version: 1.7.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + sha256: 53437ca79e28003faac8058f6c025c83a819e122d3a0fb70624e6da0f77ab126 + md5: 397702b2c1e53f0f0312d2b170d2e699 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 334346 + timestamp: 1702502754422 +- kind: conda + name: jq + version: 1.7.1 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + sha256: e530cf5800e937bce7847a023a998db504e333a928b469c45a1752535593e762 + md5: dbf665694fb28d86d77cca18e5dd530c + depends: + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + size: 317604 + timestamp: 1702501287237 +- kind: conda + name: jq + version: 1.7.1 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + sha256: e530cf5800e937bce7847a023a998db504e333a928b469c45a1752535593e762 + md5: dbf665694fb28d86d77cca18e5dd530c + depends: + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 317604 + timestamp: 1702501287237 +- kind: conda + name: jq + version: 1.7.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d + md5: 80814f94713e35df60aad6c4b235de87 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + size: 318956 + timestamp: 1702500793203 +- kind: conda + name: jq + version: 1.7.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d + md5: 80814f94713e35df60aad6c4b235de87 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 318956 + timestamp: 1702500793203 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh534df25_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + sha256: 8d8fc7d67e9bd387403720447abb1b5539a6f6ca8e3aba8406e0987213bfa0ce + md5: 2099f34ea2f3534f7adc5c21cc199e1b + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + license: MIT + license_family: MIT + size: 37045 + timestamp: 1726971145252 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh534df25_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + sha256: 8d8fc7d67e9bd387403720447abb1b5539a6f6ca8e3aba8406e0987213bfa0ce + md5: 2099f34ea2f3534f7adc5c21cc199e1b + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37045 + timestamp: 1726971145252 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + sha256: 69626899dfac975090032f7af782c143b569f7706e808a4eca67a9a5aa134a15 + md5: 1c74a03431815d5e091585bb04e86f12 + depends: + - __win + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + - pywin32-ctypes >=0.2.0 + license: MIT + license_family: MIT + size: 37407 + timestamp: 1726971355676 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + sha256: 69626899dfac975090032f7af782c143b569f7706e808a4eca67a9a5aa134a15 + md5: 1c74a03431815d5e091585bb04e86f12 + depends: + - __win + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + - pywin32-ctypes >=0.2.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37407 + timestamp: 1726971355676 +- kind: conda + name: keyring + version: 25.4.1 + build: pyha804496_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + sha256: 6deeb4fa0f01447a5e8bd7261044c45d139e27d36df769e5a3a16ce55607da14 + md5: ef6f2de3c8eef0ee9fd31f2267c27bf2 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.8 + - secretstorage >=3.2 + license: MIT + license_family: MIT + size: 36717 + timestamp: 1726971094601 +- kind: conda + name: keyring + version: 25.4.1 + build: pyha804496_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + sha256: 6deeb4fa0f01447a5e8bd7261044c45d139e27d36df769e5a3a16ce55607da14 + md5: ef6f2de3c8eef0ee9fd31f2267c27bf2 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.8 + - secretstorage >=3.2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 36717 + timestamp: 1726971094601 +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe + md5: 048b02e3962f066da18efe3a21b77672 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + size: 669211 + timestamp: 1729655358674 +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe + md5: 048b02e3962f066da18efe3a21b77672 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 669211 + timestamp: 1729655358674 +- kind: conda + name: ld_impl_linux-aarch64 + version: '2.43' + build: h80caac9_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + sha256: 80ec7e8f006196808fac5bd4b3773a652847f97bbf08044cd87731424ac64f8b + md5: fcbde5ea19d55468953bf588770c0501 + constrains: + - binutils_impl_linux-aarch64 2.43 + license: GPL-3.0-only + license_family: GPL + size: 698245 + timestamp: 1729655345825 +- kind: conda + name: ld_impl_linux-aarch64 + version: '2.43' + build: h80caac9_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + sha256: 80ec7e8f006196808fac5bd4b3773a652847f97bbf08044cd87731424ac64f8b + md5: fcbde5ea19d55468953bf588770c0501 + constrains: + - binutils_impl_linux-aarch64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 698245 + timestamp: 1729655345825 +- kind: conda + name: libcxx + version: 19.1.2 + build: ha82da77_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 + md5: ba89ad7c5477e6a9d020020fcdadd37d + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 521199 + timestamp: 1729038190391 +- kind: conda + name: libcxx + version: 19.1.2 + build: ha82da77_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 + md5: ba89ad7c5477e6a9d020020fcdadd37d + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 521199 + timestamp: 1729038190391 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + sha256: 4bb47bb2cd09898737a5211e2992d63c555d63715a07ba56eae0aff31fb89c22 + md5: 59f4c43bb1b5ef1c71946ff2cbf59524 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 73616 + timestamp: 1725568742634 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + sha256: 4bb47bb2cd09898737a5211e2992d63c555d63715a07ba56eae0aff31fb89c22 + md5: 59f4c43bb1b5ef1c71946ff2cbf59524 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 73616 + timestamp: 1725568742634 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + sha256: 02341c9c35128055fd404dfe675832b80f2bf9dbb99539457652c11c06e52757 + md5: 1d2b842bb76e268625e8ee8d0a9fe8c3 + depends: + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 72342 + timestamp: 1725568840022 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + sha256: 02341c9c35128055fd404dfe675832b80f2bf9dbb99539457652c11c06e52757 + md5: 1d2b842bb76e268625e8ee8d0a9fe8c3 + depends: + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 72342 + timestamp: 1725568840022 +- kind: conda + name: libexpat + version: 2.6.3 + build: he0c23c2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + sha256: 9543965d155b8da96fc67dd81705fe5c2571c7c00becc8de5534c850393d4e3c + md5: 21415fbf4d0de6767a621160b43e5dea + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 138992 + timestamp: 1725569106114 +- kind: conda + name: libexpat + version: 2.6.3 + build: he0c23c2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + sha256: 9543965d155b8da96fc67dd81705fe5c2571c7c00becc8de5534c850393d4e3c + md5: 21415fbf4d0de6767a621160b43e5dea + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 138992 + timestamp: 1725569106114 +- kind: conda + name: libexpat + version: 2.6.3 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a + md5: 5f22f07c2ab2dea8c66fe9585a062c96 + depends: + - __osx >=11.0 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 63895 + timestamp: 1725568783033 +- kind: conda + name: libexpat + version: 2.6.3 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a + md5: 5f22f07c2ab2dea8c66fe9585a062c96 + depends: + - __osx >=11.0 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 63895 + timestamp: 1725568783033 +- kind: conda + name: libffi + version: 3.4.2 + build: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + size: 39020 + timestamp: 1636488587153 +- kind: conda + name: libffi + version: 3.4.2 + build: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + purls: [] + size: 39020 + timestamp: 1636488587153 +- kind: conda + name: libffi + version: 3.4.2 + build: h3557bc0_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + size: 59450 + timestamp: 1636488255090 +- kind: conda + name: libffi + version: 3.4.2 + build: h3557bc0_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 59450 + timestamp: 1636488255090 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libffi + version: 3.4.2 + build: h8ffe710_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 + md5: 2c96d1b6915b408893f9472569dee135 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: MIT + license_family: MIT + size: 42063 + timestamp: 1636489106777 +- kind: conda + name: libffi + version: 3.4.2 + build: h8ffe710_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 + md5: 2c96d1b6915b408893f9472569dee135 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: MIT + license_family: MIT + purls: [] + size: 42063 + timestamp: 1636489106777 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 + md5: 511b511c5445e324066c3377481bcab8 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==14.2.0=*_1 + - libgomp 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 535243 + timestamp: 1729089435134 +- kind: conda + name: libgcc + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 + md5: 511b511c5445e324066c3377481bcab8 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==14.2.0=*_1 + - libgomp 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 535243 + timestamp: 1729089435134 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: he9431aa_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 + md5: 0694c249c61469f2c0f7e2990782af21 + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54104 + timestamp: 1729089444587 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: he9431aa_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 + md5: 0694c249c61469f2c0f7e2990782af21 + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54104 + timestamp: 1729089444587 +- kind: conda + name: libglib + version: 2.82.2 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + size: 3931898 + timestamp: 1729191404130 +- kind: conda + name: libglib + version: 2.82.2 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 3931898 + timestamp: 1729191404130 +- kind: conda + name: libglib + version: 2.82.2 + build: hc486b8e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + sha256: 6797d24de7acd298f81a86078c64e4f3fea6d551a3e8892205c9e72a37a7cc3c + md5: 47f6d85fe47b865e56c539f2ba5f4dad + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + size: 4020802 + timestamp: 1729191545578 +- kind: conda + name: libglib + version: 2.82.2 + build: hc486b8e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + sha256: 6797d24de7acd298f81a86078c64e4f3fea6d551a3e8892205c9e72a37a7cc3c + md5: 47f6d85fe47b865e56c539f2ba5f4dad + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 4020802 + timestamp: 1729191545578 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libgomp + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf + md5: 376f0e73abbda6d23c0cb749adc195ef + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 463521 + timestamp: 1729089357313 +- kind: conda + name: libgomp + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf + md5: 376f0e73abbda6d23c0cb749adc195ef + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 463521 + timestamp: 1729089357313 +- kind: conda + name: libiconv + version: '1.17' + build: h31becfc_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + size: 705787 + timestamp: 1702684557134 +- kind: conda + name: libiconv + version: '1.17' + build: h31becfc_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705787 + timestamp: 1702684557134 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + size: 705775 + timestamp: 1702682170569 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705775 + timestamp: 1702682170569 +- kind: conda + name: libnsl + version: 2.0.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + size: 34501 + timestamp: 1697358973269 +- kind: conda + name: libnsl + version: 2.0.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 34501 + timestamp: 1697358973269 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libsqlite + version: 3.47.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + sha256: 4f3cd0477c831eab48fb7fa3ed91d918aeb644fad9b4014726d445339750cdcc + md5: 964bef59135d876c596ae67b3315e812 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Unlicense + size: 884970 + timestamp: 1729592254351 +- kind: conda + name: libsqlite + version: 3.47.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + sha256: 4f3cd0477c831eab48fb7fa3ed91d918aeb644fad9b4014726d445339750cdcc + md5: 964bef59135d876c596ae67b3315e812 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Unlicense + purls: [] + size: 884970 + timestamp: 1729592254351 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + sha256: 76ffc7a5823b51735c11d535f3666b3c9c7d1519f9fbb6fa9cdff79db01960b9 + md5: 540296f0ce9d3352188c15a89b30b9ac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 874704 + timestamp: 1729591931557 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + sha256: 76ffc7a5823b51735c11d535f3666b3c9c7d1519f9fbb6fa9cdff79db01960b9 + md5: 540296f0ce9d3352188c15a89b30b9ac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 874704 + timestamp: 1729591931557 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hbaaea75_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + sha256: 76aa4bbbaa2334689b16048f04ac4c7406e9bfb1f225ac7107fd2a73f85329cf + md5: 5bbe4802d5460b80620411fe1da8fec3 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 837789 + timestamp: 1729592072314 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hbaaea75_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + sha256: 76aa4bbbaa2334689b16048f04ac4c7406e9bfb1f225ac7107fd2a73f85329cf + md5: 5bbe4802d5460b80620411fe1da8fec3 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 837789 + timestamp: 1729592072314 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + sha256: 469ed05e9a1622b0204a2b6cf620c9054bf6904e2ed818a1f91ee96a7bc64517 + md5: ccbe261fb8c1f1cd1a3122592247d3c4 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 1042108 + timestamp: 1729592001716 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + sha256: 469ed05e9a1622b0204a2b6cf620c9054bf6904e2ed818a1f91ee96a7bc64517 + md5: ccbe261fb8c1f1cd1a3122592247d3c4 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 1042108 + timestamp: 1729592001716 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: h3f4de04_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 + md5: 37f489acd39e22b623d2d1e5ac6d195c + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 3816794 + timestamp: 1729089463404 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: h3f4de04_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 + md5: 37f489acd39e22b623d2d1e5ac6d195c + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3816794 + timestamp: 1729089463404 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54105 + timestamp: 1729027780628 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54105 + timestamp: 1729027780628 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: hf1166c9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd + md5: 0e75771b8a03afae5a2c6ce71bc733f5 + depends: + - libstdcxx 14.2.0 h3f4de04_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54133 + timestamp: 1729089498541 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: hf1166c9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd + md5: 0e75771b8a03afae5a2c6ce71bc733f5 + depends: + - libstdcxx 14.2.0 h3f4de04_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54133 + timestamp: 1729089498541 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libuuid + version: 2.38.1 + build: hb4cce97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + size: 35720 + timestamp: 1680113474501 +- kind: conda + name: libuuid + version: 2.38.1 + build: hb4cce97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 35720 + timestamp: 1680113474501 +- kind: conda + name: libuv + version: 1.49.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 + md5: 4bc348e3a1a74d20a3f9beb866d75e0a + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 410500 + timestamp: 1729322654121 +- kind: conda + name: libuv + version: 1.49.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 + md5: 4bc348e3a1a74d20a3f9beb866d75e0a + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 410500 + timestamp: 1729322654121 +- kind: conda + name: libuv + version: 1.49.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 + md5: 1899e1ec2be63386c41c4db31d3056af + depends: + - libgcc >=13 + license: MIT + license_family: MIT + size: 627484 + timestamp: 1729322575379 +- kind: conda + name: libuv + version: 1.49.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 + md5: 1899e1ec2be63386c41c4db31d3056af + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 627484 + timestamp: 1729322575379 +- kind: conda + name: libuv + version: 1.49.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 + md5: 070e3c9ddab77e38799d5c30b109c633 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 884647 + timestamp: 1729322566955 +- kind: conda + name: libuv + version: 1.49.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 + md5: 070e3c9ddab77e38799d5c30b109c633 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 884647 + timestamp: 1729322566955 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + size: 114269 + timestamp: 1702724369203 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 114269 + timestamp: 1702724369203 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libzlib + version: 1.3.1 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + md5: 41fbfac52c601159df6c01f875de31b9 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 55476 + timestamp: 1727963768015 +- kind: conda + name: libzlib + version: 1.3.1 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + md5: 41fbfac52c601159df6c01f875de31b9 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 55476 + timestamp: 1727963768015 +- kind: conda + name: libzlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: libzlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: libzlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 66657 + timestamp: 1727963199518 +- kind: conda + name: libzlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 66657 + timestamp: 1727963199518 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 60963 + timestamp: 1727963148474 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 +- kind: conda + name: m2w64-gcc-libgfortran + version: 5.3.0 + build: '6' + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 + md5: 066552ac6b907ec6d72c0ddab29050dc + depends: + - m2w64-gcc-libs-core + - msys2-conda-epoch ==20160418 + license: GPL, LGPL, FDL, custom + size: 350687 + timestamp: 1608163451316 +- kind: conda + name: m2w64-gcc-libgfortran + version: 5.3.0 + build: '6' + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 + md5: 066552ac6b907ec6d72c0ddab29050dc + depends: + - m2w64-gcc-libs-core + - msys2-conda-epoch ==20160418 + license: GPL, LGPL, FDL, custom + purls: [] + size: 350687 + timestamp: 1608163451316 +- kind: conda + name: m2w64-gcc-libs + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa + md5: fe759119b8b3bfa720b8762c6fdc35de + depends: + - m2w64-gcc-libgfortran + - m2w64-gcc-libs-core + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + size: 532390 + timestamp: 1608163512830 +- kind: conda + name: m2w64-gcc-libs + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa + md5: fe759119b8b3bfa720b8762c6fdc35de + depends: + - m2w64-gcc-libgfortran + - m2w64-gcc-libs-core + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 532390 + timestamp: 1608163512830 +- kind: conda + name: m2w64-gcc-libs-core + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 + md5: 4289d80fb4d272f1f3b56cfe87ac90bd + depends: + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + size: 219240 + timestamp: 1608163481341 +- kind: conda + name: m2w64-gcc-libs-core + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 + md5: 4289d80fb4d272f1f3b56cfe87ac90bd + depends: + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 219240 + timestamp: 1608163481341 +- kind: conda + name: m2w64-gmp + version: 6.1.0 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 + md5: 53a1c73e1e3d185516d7e3af177596d9 + depends: + - msys2-conda-epoch ==20160418 + license: LGPL3 + size: 743501 + timestamp: 1608163782057 +- kind: conda + name: m2w64-gmp + version: 6.1.0 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 + md5: 53a1c73e1e3d185516d7e3af177596d9 + depends: + - msys2-conda-epoch ==20160418 + license: LGPL3 + purls: [] + size: 743501 + timestamp: 1608163782057 +- kind: conda + name: m2w64-jq + version: '1.6' + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + sha256: d722a8c06f44dfb5f357608e6e1d40d1f1c926316bbee5d1e71d93823554646b + md5: 209cbf1b222dc774cb29ce57796500b3 + depends: + - m2w64-gcc-libs + - m2w64-oniguruma + license: MIT + license_family: MIT + size: 424702 + timestamp: 1591860215369 +- kind: conda + name: m2w64-jq + version: '1.6' + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + sha256: d722a8c06f44dfb5f357608e6e1d40d1f1c926316bbee5d1e71d93823554646b + md5: 209cbf1b222dc774cb29ce57796500b3 + depends: + - m2w64-gcc-libs + - m2w64-oniguruma + license: MIT + license_family: MIT + purls: [] + size: 424702 + timestamp: 1591860215369 +- kind: conda + name: m2w64-libwinpthread-git + version: 5.0.0.4634.697f757 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 + md5: 774130a326dee16f1ceb05cc687ee4f0 + depends: + - msys2-conda-epoch ==20160418 + license: MIT, BSD + size: 31928 + timestamp: 1608166099896 +- kind: conda + name: m2w64-libwinpthread-git + version: 5.0.0.4634.697f757 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 + md5: 774130a326dee16f1ceb05cc687ee4f0 + depends: + - msys2-conda-epoch ==20160418 + license: MIT, BSD + purls: [] + size: 31928 + timestamp: 1608166099896 +- kind: conda + name: m2w64-oniguruma + version: 6.9.5 + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + sha256: 523edeac9788aa61243bd2ceb7b8bdb1a86b68c9f7f1aeb933085893d2886cc3 + md5: 61c9b808f92724106a63dd7b50979d6b + depends: + - m2w64-gcc-libs + license: BSD-2-Clause + license_family: BSD + size: 426599 + timestamp: 1591828659130 +- kind: conda + name: m2w64-oniguruma + version: 6.9.5 + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + sha256: 523edeac9788aa61243bd2ceb7b8bdb1a86b68c9f7f1aeb933085893d2886cc3 + md5: 61c9b808f92724106a63dd7b50979d6b + depends: + - m2w64-gcc-libs + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 426599 + timestamp: 1591828659130 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + size: 64356 + timestamp: 1686175179621 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + size: 64356 + timestamp: 1686175179621 +- kind: conda + name: mdurl + version: 0.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 14680 + timestamp: 1704317789138 +- kind: conda + name: mdurl + version: 0.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping + size: 14680 + timestamp: 1704317789138 +- kind: conda + name: more-itertools + version: 10.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + sha256: 2315b7dba237e16b0e1b601725a8e03e062421e0be28d8a25dc35dd9bd93a342 + md5: 3364591bebd600979606791e1dff7cb6 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 57345 + timestamp: 1725630183289 +- kind: conda + name: more-itertools + version: 10.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + sha256: 2315b7dba237e16b0e1b601725a8e03e062421e0be28d8a25dc35dd9bd93a342 + md5: 3364591bebd600979606791e1dff7cb6 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/more-itertools?source=hash-mapping + size: 57345 + timestamp: 1725630183289 +- kind: conda + name: msys2-conda-epoch + version: '20160418' + build: '1' + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 + md5: b0309b72560df66f71a9d5e34a5efdfa + size: 3227 + timestamp: 1608166968312 +- kind: conda + name: msys2-conda-epoch + version: '20160418' + build: '1' + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 + md5: b0309b72560df66f71a9d5e34a5efdfa + purls: [] + size: 3227 + timestamp: 1608166968312 +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + size: 802321 + timestamp: 1724658775723 +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 802321 + timestamp: 1724658775723 +- kind: conda + name: ncurses + version: '6.5' + build: hcccb83c_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 + md5: 91d49c85cacd92caa40cf375ef72a25d + depends: + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + size: 924472 + timestamp: 1724658573518 +- kind: conda + name: ncurses + version: '6.5' + build: hcccb83c_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 + md5: 91d49c85cacd92caa40cf375ef72a25d + depends: + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 924472 + timestamp: 1724658573518 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: nodejs + version: 22.9.0 + build: h08fde81_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + sha256: 736a4738aba32a03401aa25c8f740e4afe4aea02bc06651b59b06f0fdc024fdf + md5: 3771a3a6abe5a8db8910d5ebf144811b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=17 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 14859715 + timestamp: 1726671037225 +- kind: conda + name: nodejs + version: 22.9.0 + build: h08fde81_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + sha256: 736a4738aba32a03401aa25c8f740e4afe4aea02bc06651b59b06f0fdc024fdf + md5: 3771a3a6abe5a8db8910d5ebf144811b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=17 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 14859715 + timestamp: 1726671037225 +- kind: conda + name: nodejs + version: 22.9.0 + build: h57928b3_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + sha256: 6d74f0dbb91eb2049199ba801a3db67965f990aef44084f9ae51a1f70c2996f6 + md5: 6aa54ed90a643a11a005491ff316b1c4 + license: MIT + license_family: MIT + size: 25378221 + timestamp: 1726657153171 +- kind: conda + name: nodejs + version: 22.9.0 + build: h57928b3_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + sha256: 6d74f0dbb91eb2049199ba801a3db67965f990aef44084f9ae51a1f70c2996f6 + md5: 6aa54ed90a643a11a005491ff316b1c4 + license: MIT + license_family: MIT + purls: [] + size: 25378221 + timestamp: 1726657153171 +- kind: conda + name: nodejs + version: 22.9.0 + build: h8374285_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + sha256: ff2186a51d389c18423109af3abf6377d4ef5b1370a81ee5f8fb2e036d79cf4f + md5: 6a9739c1ce3f9714b705a655872b5a4d + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 21653106 + timestamp: 1726665120657 +- kind: conda + name: nodejs + version: 22.9.0 + build: h8374285_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + sha256: ff2186a51d389c18423109af3abf6377d4ef5b1370a81ee5f8fb2e036d79cf4f + md5: 6a9739c1ce3f9714b705a655872b5a4d + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21653106 + timestamp: 1726665120657 +- kind: conda + name: nodejs + version: 22.9.0 + build: hf235a45_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 + md5: 40255c9ffb722d614b02ca7aaee6abcb + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 21198038 + timestamp: 1726661026112 +- kind: conda + name: nodejs + version: 22.9.0 + build: hf235a45_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 + md5: 40255c9ffb722d614b02ca7aaee6abcb + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21198038 + timestamp: 1726661026112 +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + sha256: 456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0 + requires_python: '>=3.10' +- kind: conda + name: oniguruma + version: 6.9.9 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + sha256: e21b1822736959ba434ebce452ee86844a11d918c8b1c48c71f15e9a932fd571 + md5: 475018b8e0b8720c985a185427f5bf13 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 250005 + timestamp: 1697487236819 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + sha256: e21b1822736959ba434ebce452ee86844a11d918c8b1c48c71f15e9a932fd571 + md5: 475018b8e0b8720c985a185427f5bf13 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 250005 + timestamp: 1697487236819 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + sha256: 66632aeef5b74e15746161db8fa8b5150a191ab05823d7d2f1587bdf96674c7b + md5: 770c654e0d5bfa3aa1e6ac5440815cda + license: BSD-2-Clause + license_family: BSD + size: 223231 + timestamp: 1697485732214 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + sha256: 66632aeef5b74e15746161db8fa8b5150a191ab05823d7d2f1587bdf96674c7b + md5: 770c654e0d5bfa3aa1e6ac5440815cda + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 223231 + timestamp: 1697485732214 +- kind: conda + name: oniguruma + version: 6.9.9 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed + md5: 77dab674d16c1525ebe65e67de30de0d + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 246869 + timestamp: 1697485543293 +- kind: conda + name: oniguruma + version: 6.9.9 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed + md5: 77dab674d16c1525ebe65e67de30de0d + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 246869 + timestamp: 1697485543293 +- kind: conda + name: openssl + version: 3.3.2 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + sha256: a45c42f3577294e22ac39ddb6ef5a64fd5322e8a6725afefbf4f2b4109340bf9 + md5: 1dc86753693df5e3326bb8a85b74c589 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 8396053 + timestamp: 1725412961673 +- kind: conda + name: openssl + version: 3.3.2 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + sha256: a45c42f3577294e22ac39ddb6ef5a64fd5322e8a6725afefbf4f2b4109340bf9 + md5: 1dc86753693df5e3326bb8a85b74c589 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 8396053 + timestamp: 1725412961673 +- kind: conda + name: openssl + version: 3.3.2 + build: h8359307_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 + md5: 1773ebccdc13ec603356e8ff1db9e958 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + size: 2882450 + timestamp: 1725410638874 +- kind: conda + name: openssl + version: 3.3.2 + build: h8359307_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 + md5: 1773ebccdc13ec603356e8ff1db9e958 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2882450 + timestamp: 1725410638874 +- kind: conda + name: openssl + version: 3.3.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + sha256: 4669d26dbf81e4d72093d8260f55d19d57204d82b1d9440be83d11d313b5990c + md5: 9e1e477b3f8ee3789297883faffa708b + depends: + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + size: 3428083 + timestamp: 1725412266679 +- kind: conda + name: openssl + version: 3.3.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + sha256: 4669d26dbf81e4d72093d8260f55d19d57204d82b1d9440be83d11d313b5990c + md5: 9e1e477b3f8ee3789297883faffa708b + depends: + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3428083 + timestamp: 1725412266679 +- kind: conda + name: openssl + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + sha256: cee91036686419f6dd6086902acf7142b4916e1c4ba042e9ca23e151da012b6d + md5: 4d638782050ab6faa27275bed57e9b4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + size: 2891789 + timestamp: 1725410790053 +- kind: conda + name: openssl + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + sha256: cee91036686419f6dd6086902acf7142b4916e1c4ba042e9ca23e151da012b6d + md5: 4d638782050ab6faa27275bed57e9b4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2891789 + timestamp: 1725410790053 +- kind: pypi + name: outcome + version: 1.3.0.post0 + url: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + sha256: e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b + requires_dist: + - attrs>=19.2.0 + requires_python: '>=3.7' +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + size: 50290 + timestamp: 1718189540074 +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 50290 + timestamp: 1718189540074 +- kind: conda + name: pathspec + version: 0.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d + md5: 17064acba08d3686f1135b5ec1b32b12 + depends: + - python >=3.7 + license: MPL-2.0 + license_family: MOZILLA + size: 41173 + timestamp: 1702250135032 +- kind: conda + name: pathspec + version: 0.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d + md5: 17064acba08d3686f1135b5ec1b32b12 + depends: + - python >=3.7 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/pathspec?source=hash-mapping + size: 41173 + timestamp: 1702250135032 +- kind: conda + name: pcre2 + version: '10.44' + build: h070dd5b_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + sha256: e9f4b912e48514771d477f2ee955f59d4ff4ef799c3d4d16e4d0f335ce91df67 + md5: 94022de9682cb1a0bb18a99cbc3541b3 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 884590 + timestamp: 1723488793100 +- kind: conda + name: pcre2 + version: '10.44' + build: h070dd5b_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + sha256: e9f4b912e48514771d477f2ee955f59d4ff4ef799c3d4d16e4d0f335ce91df67 + md5: 94022de9682cb1a0bb18a99cbc3541b3 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 884590 + timestamp: 1723488793100 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 952308 + timestamp: 1723488734144 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 952308 + timestamp: 1723488734144 +- kind: conda + name: pexpect + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pexpect + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pip + version: '24.2' + build: pyh8b19718_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + sha256: d820e5358bcb117fa6286e55d4550c60b0332443df62121df839eab2d11c890b + md5: 6c78fbb8ddfd64bcb55b5cbafd2d2c43 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + size: 1237976 + timestamp: 1724954490262 +- kind: conda + name: pip + version: '24.2' + build: pyh8b19718_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + sha256: d820e5358bcb117fa6286e55d4550c60b0332443df62121df839eab2d11c890b + md5: 6c78fbb8ddfd64bcb55b5cbafd2d2c43 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=hash-mapping + size: 1237976 + timestamp: 1724954490262 +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 20625 + timestamp: 1726613611845 +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 20625 + timestamp: 1726613611845 +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 8ff8303409ebed76bed4c3d655340320b768817d900ba208b394fdd7d7939a5c + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + sha256: e0e87b0c4dc8fce83c725dd851aec37bc4e882bb225ec8a96bd83cf32d4f1623 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + sha256: 7da2eb51a19c7f3b523e9faa9d98e7af92e52eb983a099979ea79c9668e3cbf7 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + sha256: 8dabb80e62f667fe2640a8b694e26a7b884c0b4803f7514a3954fc849126227b + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 23815 + timestamp: 1713667175451 +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 23815 + timestamp: 1713667175451 +- kind: conda + name: pnpm + version: 9.12.2 + build: h6417eb3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + sha256: 0caf7ddacb1d8adb16144a93cfaf7a70bff2f83e22cbaae4d3d91b71f28f9caf + md5: 711bc7fb6b870f4b5b180c181786d710 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + size: 3466596 + timestamp: 1729713864150 +- kind: conda + name: pnpm + version: 9.12.2 + build: h6417eb3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + sha256: 0caf7ddacb1d8adb16144a93cfaf7a70bff2f83e22cbaae4d3d91b71f28f9caf + md5: 711bc7fb6b870f4b5b180c181786d710 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + purls: [] + size: 3466596 + timestamp: 1729713864150 +- kind: conda + name: pnpm + version: 9.12.2 + build: haa868a1_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + sha256: ce0c2e4268cd81308b8c069564b9f7885d9c21ddd8b83120f0fabc66d9ab58d3 + md5: c70ffc202c1f5d9223a13a12310c874d + depends: + - nodejs >=22.9.0,<23.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + size: 3319869 + timestamp: 1729714702980 +- kind: conda + name: pnpm + version: 9.12.2 + build: haa868a1_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + sha256: ce0c2e4268cd81308b8c069564b9f7885d9c21ddd8b83120f0fabc66d9ab58d3 + md5: c70ffc202c1f5d9223a13a12310c874d + depends: + - nodejs >=22.9.0,<23.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + purls: [] + size: 3319869 + timestamp: 1729714702980 +- kind: conda + name: pnpm + version: 9.12.2 + build: hbf5023e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + sha256: aa25e9d0085be78115c5104ff905f9930d8585901a7a8d7278083f87ff4f6d25 + md5: 15d1e168a06119b34c9bd39187ce2af3 + depends: + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + size: 3516854 + timestamp: 1729713906302 +- kind: conda + name: pnpm + version: 9.12.2 + build: hbf5023e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + sha256: aa25e9d0085be78115c5104ff905f9930d8585901a7a8d7278083f87ff4f6d25 + md5: 15d1e168a06119b34c9bd39187ce2af3 + depends: + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + purls: [] + size: 3516854 + timestamp: 1729713906302 +- kind: conda + name: pnpm + version: 9.12.2 + build: hef028c3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + sha256: 6fd70df2e5e5a25aede2dfadd17530b2e7ecc0c41da43af89efd09dbbda8ca38 + md5: 8a157c984a8e384507438d62275868d5 + depends: + - __osx >=11.0 + - libcxx >=17 + - nodejs >=22.9.0,<23.0a0 + license: MIT + size: 3473615 + timestamp: 1729714099186 +- kind: conda + name: pnpm + version: 9.12.2 + build: hef028c3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + sha256: 6fd70df2e5e5a25aede2dfadd17530b2e7ecc0c41da43af89efd09dbbda8ca38 + md5: 8a157c984a8e384507438d62275868d5 + depends: + - __osx >=11.0 + - libcxx >=17 + - nodejs >=22.9.0,<23.0a0 + license: MIT + purls: [] + size: 3473615 + timestamp: 1729714099186 +- kind: conda + name: ptyprocess + version: 0.7.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + size: 16546 + timestamp: 1609419417991 +- kind: conda + name: ptyprocess + version: 0.7.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 16546 + timestamp: 1609419417991 +- kind: conda + name: pycparser + version: '2.22' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 105098 + timestamp: 1711811634025 +- kind: conda + name: pycparser + version: '2.22' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=hash-mapping + size: 105098 + timestamp: 1711811634025 +- kind: pypi + name: pyee + version: 12.0.0 + url: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + sha256: 7b14b74320600049ccc7d0e0b1becd3b4bd0a03c745758225e31a59f4095c990 + requires_dist: + - typing-extensions + - build ; extra == 'dev' + - flake8 ; extra == 'dev' + - flake8-black ; extra == 'dev' + - pytest ; extra == 'dev' + - black ; extra == 'dev' + - isort ; extra == 'dev' + - jupyter-console ; extra == 'dev' + - mkdocs ; extra == 'dev' + - mkdocs-include-markdown-plugin ; extra == 'dev' + - mkdocstrings[python] ; extra == 'dev' + - sphinx ; extra == 'dev' + - toml ; extra == 'dev' + - tox ; extra == 'dev' + - trio ; extra == 'dev' + - twine ; extra == 'dev' + - twisted ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - trio ; python_full_version >= '3.7' and extra == 'dev' + - trio-typing ; python_full_version >= '3.7' and extra == 'dev' + - pytest-asyncio ; python_full_version >= '3.4' and extra == 'dev' + - pytest-trio ; python_full_version >= '3.7' and extra == 'dev' + requires_python: '>=3.8' +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + size: 879295 + timestamp: 1714846885370 +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 879295 + timestamp: 1714846885370 +- kind: pypi + name: pyodide-py + version: 0.26.3 + url: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + sha256: b63b6847c8906aa8f3c17df362135d0407aabf1d4b023557aed721d822e347a8 + requires_python: '>=3.12' +- kind: pypi + name: pysocks + version: 1.7.1 + url: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + sha256: 2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: conda + name: pytest + version: 8.3.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + sha256: e99376d0068455712109d233f5790458ff861aeceb458bfda74e353338e4d815 + md5: c03d61f31f38fdb9facf70c29958bf7a + depends: + - colorama + - exceptiongroup >=1.0.0rc8 + - iniconfig + - packaging + - pluggy <2,>=1.5 + - python >=3.8 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 258293 + timestamp: 1725977334143 +- kind: pypi + name: pytest-asyncio + version: 0.24.0 + url: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + sha256: a811296ed596b69bf0b6f3dc40f83bcaf341b155a269052d82efa2b25ac7037b + requires_dist: + - pytest<9,>=8.2 + - sphinx>=5.3 ; extra == 'docs' + - sphinx-rtd-theme>=1.0 ; extra == 'docs' + - coverage>=6.2 ; extra == 'testing' + - hypothesis>=5.7.1 ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: pytest-pyodide + version: 0.58.3 + url: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + sha256: 6425d8ac868090da70337bdef33bd8a082a353a4ecdb89f5371bcf58ac7390e7 + requires_dist: + - hypothesis + - pexpect + - playwright + - pytest + - pytest-asyncio + - selenium + - tblib>=3 + - build ; extra == 'test' + - pytest-cov ; extra == 'test' + - requests ; extra == 'test' + requires_python: '>=3.10' +- kind: conda + name: python + version: 3.12.7 + build: h5d932e8_0_cpython + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + sha256: 25570873d92d4d9490c6db780cc85e6c28bd3ff61dc1ece79f602cf82bc73bc1 + md5: e6cab21bb5787270388939cf41cc5f43 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 13762126 + timestamp: 1728057461028 +- kind: conda + name: python + version: 3.12.7 + build: h5d932e8_0_cpython + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + sha256: 25570873d92d4d9490c6db780cc85e6c28bd3ff61dc1ece79f602cf82bc73bc1 + md5: e6cab21bb5787270388939cf41cc5f43 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 13762126 + timestamp: 1728057461028 +- kind: conda + name: python + version: 3.12.7 + build: h739c21a_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef + md5: e0d82e57ebb456077565e6d82cd4a323 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 12975439 + timestamp: 1728057819519 +- kind: conda + name: python + version: 3.12.7 + build: h739c21a_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef + md5: e0d82e57ebb456077565e6d82cd4a323 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 12975439 + timestamp: 1728057819519 +- kind: conda + name: python + version: 3.12.7 + build: hc5c86c4_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d + md5: 0515111a9cdf69f83278f7c197db9807 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 31574780 + timestamp: 1728059777603 +- kind: conda + name: python + version: 3.12.7 + build: hc5c86c4_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d + md5: 0515111a9cdf69f83278f7c197db9807 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31574780 + timestamp: 1728059777603 +- kind: conda + name: python + version: 3.12.7 + build: hce54a09_0_cpython + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 + md5: 21f1f7c6ccf6b747c5086d2422c230e1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 15987537 + timestamp: 1728057382072 +- kind: conda + name: python + version: 3.12.7 + build: hce54a09_0_cpython + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 + md5: 21f1f7c6ccf6b747c5086d2422c230e1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 15987537 + timestamp: 1728057382072 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + sha256: 5ccdad9981753cc4a2d126e356673a21c0cd5b34e209cb8d476a3947d4ad9b39 + md5: 62b20f305498284a07dc6c45fd0e5c87 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6329 + timestamp: 1723823366253 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + sha256: 5ccdad9981753cc4a2d126e356673a21c0cd5b34e209cb8d476a3947d4ad9b39 + md5: 62b20f305498284a07dc6c45fd0e5c87 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6329 + timestamp: 1723823366253 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6278 + timestamp: 1723823099686 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6278 + timestamp: 1723823099686 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + sha256: 9486662af81a219e96d343449eff242f38d7c5128ced5ce5acf85857265058d6 + md5: e8681f534453af7afab4cd2bc1423eec + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6730 + timestamp: 1723823139725 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + sha256: 9486662af81a219e96d343449eff242f38d7c5128ced5ce5acf85857265058d6 + md5: e8681f534453af7afab4cd2bc1423eec + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6730 + timestamp: 1723823139725 +- kind: conda + name: pywin32-ctypes + version: 0.2.3 + build: py312h2e8e312_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + sha256: 3e3b97740b4ec2f54debf7bfdbaa9a81a7aabd4549051b926de91d05304c4948 + md5: c5f1cb65c56ec74687801960f8a31eb5 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 57449 + timestamp: 1727282288065 +- kind: conda + name: pywin32-ctypes + version: 0.2.3 + build: py312h2e8e312_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + sha256: 3e3b97740b4ec2f54debf7bfdbaa9a81a7aabd4549051b926de91d05304c4948 + md5: c5f1cb65c56ec74687801960f8a31eb5 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pywin32-ctypes?source=hash-mapping + size: 57449 + timestamp: 1727282288065 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: readline + version: '8.2' + build: h8fc344f_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 294092 + timestamp: 1679532238805 +- kind: conda + name: readline + version: '8.2' + build: h8fc344f_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 294092 + timestamp: 1679532238805 +- kind: conda + name: readline + version: '8.2' + build: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 250351 + timestamp: 1679532511311 +- kind: conda + name: readline + version: '8.2' + build: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 250351 + timestamp: 1679532511311 +- kind: conda + name: rich + version: 13.9.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + sha256: ec2a69babe41085a5bcec4ef80b2d5bade2ca399d971f57894dfb96cf59a18d1 + md5: 50dd5529812447e2b4e2a5dd6a6f1655 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + size: 185320 + timestamp: 1729623039134 +- kind: conda + name: rich + version: 13.9.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + sha256: ec2a69babe41085a5bcec4ef80b2d5bade2ca399d971f57894dfb96cf59a18d1 + md5: 50dd5529812447e2b4e2a5dd6a6f1655 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rich?source=hash-mapping + size: 185320 + timestamp: 1729623039134 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h7900ff3_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + sha256: c6d5d0bc7fb6cbfa3b8be8f2399a3c1308b3392a4e20bd1a0f29a828fda5ab20 + md5: 4840da9db2808db946a0d979603c6de4 + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 31601 + timestamp: 1725915741329 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h7900ff3_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + sha256: c6d5d0bc7fb6cbfa3b8be8f2399a3c1308b3392a4e20bd1a0f29a828fda5ab20 + md5: 4840da9db2808db946a0d979603c6de4 + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31601 + timestamp: 1725915741329 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h8025657_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + sha256: fd6bc45ba0c6bb097ad98037ad8d2ddf2449f28c2eedf57dfff54eeceefe90c6 + md5: 4ae02e3717828f5e92dfae068845afdd + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 31394 + timestamp: 1725917363210 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h8025657_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + sha256: fd6bc45ba0c6bb097ad98037ad8d2ddf2449f28c2eedf57dfff54eeceefe90c6 + md5: 4ae02e3717828f5e92dfae068845afdd + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31394 + timestamp: 1725917363210 +- kind: pypi + name: selenium + version: 4.25.0 + url: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + sha256: 3798d2d12b4a570bc5790163ba57fef10b2afee958bf1d80f2a3cf07c4141f33 + requires_dist: + - urllib3[socks]>=1.26,<3 + - trio~=0.17 + - trio-websocket~=0.9 + - certifi>=2021.10.8 + - typing-extensions~=4.9 + - websocket-client~=1.8 + requires_python: '>=3.8' +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 777462 + timestamp: 1727249510532 +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 777462 + timestamp: 1727249510532 +- kind: conda + name: shellingham + version: 1.5.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 14568 + timestamp: 1698144516278 +- kind: conda + name: shellingham + version: 1.5.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/shellingham?source=hash-mapping + size: 14568 + timestamp: 1698144516278 +- kind: conda + name: sniffio + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + size: 15064 + timestamp: 1708953086199 +- kind: conda + name: sniffio + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping + size: 15064 + timestamp: 1708953086199 +- kind: pypi + name: sortedcontainers + version: 2.4.0 + url: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- kind: pypi + name: tblib + version: 3.0.0 + url: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + sha256: 80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129 + requires_python: '>=3.8' +- kind: conda + name: tk + version: 8.6.13 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3351802 + timestamp: 1695506242997 +- kind: conda + name: tk + version: 8.6.13 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3351802 + timestamp: 1695506242997 +- kind: conda + name: tk + version: 8.6.13 + build: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3145523 + timestamp: 1699202432999 +- kind: conda + name: tk + version: 8.6.13 + build: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3145523 + timestamp: 1699202432999 +- kind: conda + name: tk + version: 8.6.13 + build: h5226925_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: fc048363eb8f03cd1737600a5d08aafe + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: TCL + license_family: BSD + size: 3503410 + timestamp: 1699202577803 +- kind: conda + name: tk + version: 8.6.13 + build: h5226925_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: fc048363eb8f03cd1737600a5d08aafe + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: TCL + license_family: BSD + purls: [] + size: 3503410 + timestamp: 1699202577803 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tomli + version: 2.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 18203 + timestamp: 1727974767524 +- kind: conda + name: tomli + version: 2.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 18203 + timestamp: 1727974767524 +- kind: conda + name: tomli-w + version: 1.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + sha256: 25b88bb2c4e79be642d8e5b5738781404055cd596403a20511e6fa30f0c71585 + md5: 2c5eb5b3a0fd2c4787d8162f57da2a20 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 12323 + timestamp: 1728405537678 +- kind: conda + name: tomli-w + version: 1.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + sha256: 25b88bb2c4e79be642d8e5b5738781404055cd596403a20511e6fa30f0c71585 + md5: 2c5eb5b3a0fd2c4787d8162f57da2a20 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli-w?source=hash-mapping + size: 12323 + timestamp: 1728405537678 +- kind: conda + name: tomlkit + version: 0.13.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + sha256: 2ccfe8dafdc1f1af944bca6bdf28fa97b5fa6125d84b8895a4e918a020853c12 + md5: 0062a5f3347733f67b0f33ca48cc21dd + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 37279 + timestamp: 1723631592742 +- kind: conda + name: tomlkit + version: 0.13.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + sha256: 2ccfe8dafdc1f1af944bca6bdf28fa97b5fa6125d84b8895a4e918a020853c12 + md5: 0062a5f3347733f67b0f33ca48cc21dd + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomlkit?source=hash-mapping + size: 37279 + timestamp: 1723631592742 +- kind: pypi + name: trio + version: 0.27.0 + url: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + sha256: 68eabbcf8f457d925df62da780eff15ff5dc68fd6b367e2dde59f7aaf2a0b884 + requires_dist: + - attrs>=23.2.0 + - sortedcontainers + - idna + - outcome + - sniffio>=1.3.0 + - cffi>=1.14 ; implementation_name != 'pypy' and os_name == 'nt' + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.8' +- kind: pypi + name: trio-websocket + version: 0.11.1 + url: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + sha256: 520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638 + requires_dist: + - trio>=0.11 + - wsproto>=0.14 + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.7' +- kind: conda + name: trove-classifiers + version: 2024.10.21.16 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + sha256: 591e4ffdc95660b9e596c15b65cad35a70b36235f02dbd089ccc198dd5af0e71 + md5: 501f6d3288160a31d99a2f1321e77393 + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + size: 18429 + timestamp: 1729552033760 +- kind: conda + name: trove-classifiers + version: 2024.10.21.16 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + sha256: 591e4ffdc95660b9e596c15b65cad35a70b36235f02dbd089ccc198dd5af0e71 + md5: 501f6d3288160a31d99a2f1321e77393 + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/trove-classifiers?source=hash-mapping + size: 18429 + timestamp: 1729552033760 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + purls: [] + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: ucrt + version: 10.0.22621.0 + build: h57928b3_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 + constrains: + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + size: 559710 + timestamp: 1728377334097 +- kind: conda + name: ucrt + version: 10.0.22621.0 + build: h57928b3_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 + constrains: + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + purls: [] + size: 559710 + timestamp: 1728377334097 +- kind: pypi + name: urllib3 + version: 2.2.3 + url: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + sha256: ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2<5,>=4 ; extra == 'h2' + - pysocks!=1.5.7,<2.0,>=1.5.6 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- kind: conda + name: userpath + version: 1.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + sha256: c8cbddd625340e1b00b53bafabc764526ee85f7ddb91018424bab0eea057796d + md5: 5bf074c9253a3bf914becfc50757406f + depends: + - click + - python >=3.6 + license: MIT + license_family: MIT + size: 17423 + timestamp: 1632758637093 +- kind: conda + name: userpath + version: 1.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + sha256: c8cbddd625340e1b00b53bafabc764526ee85f7ddb91018424bab0eea057796d + md5: 5bf074c9253a3bf914becfc50757406f + depends: + - click + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/userpath?source=hash-mapping + size: 17423 + timestamp: 1632758637093 +- kind: conda + name: uv + version: 0.4.25 + build: h0f3a69f_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + sha256: 66ec8fc80cebbabef8a43a8a420f6540399200dcc0c9195db0bdda2836eee7be + md5: f820dec118406e896be62db8c53151ad + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + size: 9403871 + timestamp: 1729526779016 +- kind: conda + name: uv + version: 0.4.25 + build: h0f3a69f_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + sha256: 66ec8fc80cebbabef8a43a8a420f6540399200dcc0c9195db0bdda2836eee7be + md5: f820dec118406e896be62db8c53151ad + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 9403871 + timestamp: 1729526779016 +- kind: conda + name: uv + version: 0.4.25 + build: h2016286_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + sha256: e871051605de94afdec425d66bd06c047e5425ebb5e264c731b032e13f08f971 + md5: 8c51a22c12f76e66a96371e066952ba7 + depends: + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + size: 8821575 + timestamp: 1729527016183 +- kind: conda + name: uv + version: 0.4.25 + build: h2016286_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + sha256: e871051605de94afdec425d66bd06c047e5425ebb5e264c731b032e13f08f971 + md5: 8c51a22c12f76e66a96371e066952ba7 + depends: + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 8821575 + timestamp: 1729527016183 +- kind: conda + name: uv + version: 0.4.25 + build: h41fe3af_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + sha256: 365063aa057bdb0f755449bb1f9490462c191109071a4ebb6b9648587558109e + md5: f736f9177b89edfccfe67650cbd05839 + depends: + - __osx >=11.0 + - libcxx >=17 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR MIT + size: 8475727 + timestamp: 1729527780770 +- kind: conda + name: uv + version: 0.4.25 + build: h41fe3af_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + sha256: 365063aa057bdb0f755449bb1f9490462c191109071a4ebb6b9648587558109e + md5: f736f9177b89edfccfe67650cbd05839 + depends: + - __osx >=11.0 + - libcxx >=17 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR MIT + purls: [] + size: 8475727 + timestamp: 1729527780770 +- kind: conda + name: uv + version: 0.4.25 + build: ha08ef0e_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda + sha256: 74ae665e93b8ed325ea30864c2d341ee57c1c4878dba3bf2781828b1be58031d + md5: 2162d0190d22bbf556365c076f60739c + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 OR MIT + size: 10356663 + timestamp: 1729527565706 +- kind: conda + name: uv + version: 0.4.25 + build: ha08ef0e_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda + sha256: 74ae665e93b8ed325ea30864c2d341ee57c1c4878dba3bf2781828b1be58031d + md5: 2162d0190d22bbf556365c076f60739c + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 OR MIT + purls: [] + size: 10356663 + timestamp: 1729527565706 +- kind: conda + name: vc + version: '14.3' + build: ha32ba9b_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 + depends: + - vc14_runtime >=14.38.33135 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + size: 17447 + timestamp: 1728400826998 +- kind: conda + name: vc + version: '14.3' + build: ha32ba9b_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 + depends: + - vc14_runtime >=14.38.33135 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17447 + timestamp: 1728400826998 +- kind: conda + name: vc14_runtime + version: 14.40.33810 + build: hcc2c482_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + size: 750719 + timestamp: 1728401055788 +- kind: conda + name: vc14_runtime + version: 14.40.33810 + build: hcc2c482_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + purls: [] + size: 750719 + timestamp: 1728401055788 +- kind: conda + name: virtualenv + version: 20.27.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + sha256: 18bae5ff9f02793ca56d295f0a5f1d4443623ee3be09a6805eb7d4b18245968c + md5: a6ed1227ba6ec37cfc2b25e6512f729f + depends: + - distlib <1,>=0.3.7 + - filelock <4,>=3.12.2 + - platformdirs <5,>=3.9.1 + - python >=3.8 + license: MIT + license_family: MIT + size: 2952166 + timestamp: 1729243861344 +- kind: conda + name: virtualenv + version: 20.27.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + sha256: 18bae5ff9f02793ca56d295f0a5f1d4443623ee3be09a6805eb7d4b18245968c + md5: a6ed1227ba6ec37cfc2b25e6512f729f + depends: + - distlib <1,>=0.3.7 + - filelock <4,>=3.12.2 + - platformdirs <5,>=3.9.1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/virtualenv?source=hash-mapping + size: 2952166 + timestamp: 1729243861344 +- kind: conda + name: vs2015_runtime + version: 14.40.33810 + build: h3bf8584_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 + depends: + - vc14_runtime >=14.40.33810 + license: BSD-3-Clause + license_family: BSD + size: 17453 + timestamp: 1728400827536 +- kind: conda + name: vs2015_runtime + version: 14.40.33810 + build: h3bf8584_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 + depends: + - vc14_runtime >=14.40.33810 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17453 + timestamp: 1728400827536 +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + sha256: f8a2a213b9179965db2d2eedececd69a37e287e902330509afae51c71a3a6842 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + sha256: b4364e14d44e3b7afe6a40bf608e9d0d2c40b09dece441d20f4f6e31906b729c + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + sha256: a07445073cf36a6e5d1dc28246a897dcbdaa537ba8be8805be65422ecca297eb + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + sha256: 5bdf1214ee3ee78a4a8a92da339f4c4c8c109e65af881b37f4adfc05d02af426 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: websocket-client + version: 1.8.0 + url: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + sha256: 17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526 + requires_dist: + - sphinx>=6.0 ; extra == 'docs' + - sphinx-rtd-theme>=1.1.0 ; extra == 'docs' + - myst-parser>=2.0.0 ; extra == 'docs' + - python-socks ; extra == 'optional' + - wsaccel ; extra == 'optional' + - websockets ; extra == 'test' + requires_python: '>=3.8' +- kind: conda + name: wheel + version: 0.44.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 58585 + timestamp: 1722797131787 +- kind: conda + name: wheel + version: 0.44.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping + size: 58585 + timestamp: 1722797131787 +- kind: pypi + name: wsproto + version: 1.2.0 + url: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + sha256: b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736 + requires_dist: + - h11<1,>=0.9.0 + requires_python: '>=3.7.0' +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: xz + version: 5.2.6 + build: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + size: 235693 + timestamp: 1660346961024 +- kind: conda + name: xz + version: 5.2.6 + build: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 235693 + timestamp: 1660346961024 +- kind: conda + name: xz + version: 5.2.6 + build: h8d14728_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 + md5: 515d77642eaa3639413c6b1bc3f94219 + depends: + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + license: LGPL-2.1 and GPL-2.0 + size: 217804 + timestamp: 1660346976440 +- kind: conda + name: xz + version: 5.2.6 + build: h8d14728_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 + md5: 515d77642eaa3639413c6b1bc3f94219 + depends: + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 217804 + timestamp: 1660346976440 +- kind: conda + name: xz + version: 5.2.6 + build: h9cdd2b7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 + md5: 83baad393a31d59c20b63ba4da6592df + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + size: 440555 + timestamp: 1660348056328 +- kind: conda + name: xz + version: 5.2.6 + build: h9cdd2b7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 + md5: 83baad393a31d59c20b63ba4da6592df + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 440555 + timestamp: 1660348056328 +- kind: conda + name: zipp + version: 3.20.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 21409 + timestamp: 1726248679175 +- kind: conda + name: zipp + version: 3.20.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 21409 + timestamp: 1726248679175 +- kind: conda + name: zlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + size: 77606 + timestamp: 1727963209370 +- kind: conda + name: zlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + purls: [] + size: 77606 + timestamp: 1727963209370 +- kind: conda + name: zlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + sha256: b4f649aa3ecdae384d5dad7074e198bff120edd3dfb816588e31738fc6d627b1 + md5: bc230abb5d21b63ff4799b0e75204783 + depends: + - libgcc >=13 + - libzlib 1.3.1 h86ecc28_2 + license: Zlib + license_family: Other + size: 95582 + timestamp: 1727963203597 +- kind: conda + name: zlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + sha256: b4f649aa3ecdae384d5dad7074e198bff120edd3dfb816588e31738fc6d627b1 + md5: bc230abb5d21b63ff4799b0e75204783 + depends: + - libgcc >=13 + - libzlib 1.3.1 h86ecc28_2 + license: Zlib + license_family: Other + purls: [] + size: 95582 + timestamp: 1727963203597 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + size: 92286 + timestamp: 1727963153079 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + purls: [] + size: 92286 + timestamp: 1727963153079 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 330788 + timestamp: 1725305806565 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 330788 + timestamp: 1725305806565 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h7606c53_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + sha256: 3e0c718aa18dcac7f080844dbe0aea41a9cea75083019ce02e8a784926239826 + md5: a92cc3435b2fd6f51463f5a4db5c50b1 + depends: + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 320624 + timestamp: 1725305934189 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h7606c53_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + sha256: 3e0c718aa18dcac7f080844dbe0aea41a9cea75083019ce02e8a784926239826 + md5: a92cc3435b2fd6f51463f5a4db5c50b1 + depends: + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 320624 + timestamp: 1725305934189 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hb698573_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + sha256: 2681c2a249752bdc7978e59ee2f34fcdfcbfda80029b84b8e5fec8dbc9e3af25 + md5: ffcb8e97e62af42075e0e5f46bb9856e + depends: + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 392496 + timestamp: 1725305808244 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hb698573_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + sha256: 2681c2a249752bdc7978e59ee2f34fcdfcbfda80029b84b8e5fec8dbc9e3af25 + md5: ffcb8e97e62af42075e0e5f46bb9856e + depends: + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 392496 + timestamp: 1725305808244 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hef9b889_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b + md5: 8b7069e9792ee4e5b4919a7a306d2e67 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 419552 + timestamp: 1725305670210 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hef9b889_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b + md5: 8b7069e9792ee4e5b4919a7a306d2e67 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 419552 + timestamp: 1725305670210 +- kind: conda + name: zstd + version: 1.5.6 + build: h02f22dd_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + sha256: 484f9d0722c77685ae379fbff3ccd662af9ead7e59eb39cd6d0c677cdf25ff6c + md5: be8d5f8cf21aed237b8b182ea86b3dd6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 539937 + timestamp: 1714723130243 +- kind: conda + name: zstd + version: 1.5.6 + build: h02f22dd_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + sha256: 484f9d0722c77685ae379fbff3ccd662af9ead7e59eb39cd6d0c677cdf25ff6c + md5: be8d5f8cf21aed237b8b182ea86b3dd6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 539937 + timestamp: 1714723130243 +- kind: conda + name: zstd + version: 1.5.6 + build: h0ea2cb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + md5: 9a17230f95733c04dc40a2b1e5491d74 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + size: 349143 + timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: h0ea2cb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + md5: 9a17230f95733c04dc40a2b1e5491d74 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 349143 + timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 554846 + timestamp: 1714722996770 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 554846 + timestamp: 1714722996770 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 405089 + timestamp: 1714723101397 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 405089 + timestamp: 1714723101397 diff --git a/packages/compare-meshes/pixi.toml b/packages/compare-meshes/pixi.toml new file mode 100644 index 000000000..1163212d0 --- /dev/null +++ b/packages/compare-meshes/pixi.toml @@ -0,0 +1,140 @@ +[project] +authors = ["Matt McCormick "] +channels = ["conda-forge"] +description = "Compare meshes with a tolerance for regression testing." +name = "compare-meshes" +platforms = ["win-64", "linux-64", "linux-aarch64", "osx-arm64"] +version = "0.1.0" + +[tasks] + +[dependencies] +python = "3.12.*" +pnpm = ">=9.12.1,<10" +hatch = ">=1.13.0,<2" +pip = ">=24.2,<25" + +[target.win-64.dependencies] +m2w64-jq = ">=1.6.0,<2" + +[target.unix.dependencies] +jq = ">=1.7.1,<2" + +[tasks.version-sync-typescript] +cmd = '''version=$(cat package.json | jq .version) && + jq ".version = $version" typescript/package.json > typescript/package.json.tmp && + mv typescript/package.json.tmp typescript/package.json''' + +[tasks.version-sync-python-wasi] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + echo "version is $version" && + hatch version $version''' +cwd = "python/itkwasm-compare-meshes-wasi" + +[tasks.version-sync-python-emscripten] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-compare-meshes-emscripten" + +[tasks.version-sync-python-dispatch] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-compare-meshes" + +[tasks.version-sync] +depends-on = ["version-sync-typescript", "version-sync-python-wasi", "version-sync-python-emscripten", "version-sync-python-dispatch"] +description = "Synchronize package versions" + +[tasks.publish-typescript] +cmd = "pnpm publish --filter \"{typescript}\"" + +[tasks.publish-python-user-check] +cmd = "if [ -n \"$HATCH_INDEX_USER\"]; then echo \"HATCH_INDEX_USER is set\"; else echo \"HATCH_INDEX_USER is not set\"; exit 1; fi" + +[tasks.publish-python-wasi] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-compare-meshes-wasi" + +[tasks.publish-python-emscripten] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-compare-meshes-emscripten" + +[tasks.publish-python-dispatch] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-compare-meshes" + +[tasks.publish] +depends-on = ["publish-typescript", "publish-python-wasi", "publish-python-emscripten", "publish-python-dispatch"] +description = "Synchronize package versions" + +[feature.python.dependencies] +pytest = ">=8.3.3,<9" + +[feature.python.pypi-dependencies] +itkwasm-compare-meshes-wasi = { path = "python/itkwasm-compare-meshes-wasi", editable = true } +itkwasm-compare-meshes = { path = "python/itkwasm-compare-meshes", editable = true } +pyodide-py = ">=0.26.3, <0.27" +pytest-pyodide = ">=0.58.3, <0.59" +itk-webassemblyinterface = ">=1.0b175, <2" +itkwasm-image-io = ">=1.3.0, <2" + +[feature.python.tasks.test-wasi] +cmd = "pytest" +cwd = "python/itkwasm-compare-meshes-wasi" +description = "Run tests for itkwasm-compare-meshes-wasi" + +[feature.python.tasks.download-pyodide] +cmd = '''curl -L https://github.com/pyodide/pyodide/releases/download/0.26.3/pyodide-0.26.3.tar.bz2 -o pyodide.tar.bz2 && + tar xjf pyodide.tar.bz2 && + rm pyodide.tar.bz2''' +outputs = ["pyodide"] +description = "Download Pyodide" + +[feature.python.tasks.test-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-compare-meshes-emscripten" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-compare-meshes-emscripten" + +[feature.python.tasks.serve-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-compare-meshes-emscripten" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-compare-meshes-emscripten for development" + +[feature.python.tasks.test-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + cp ../itkwasm-compare-meshes-emscripten/dist/pyodide/itkwasm_compare_meshes_emscripten*.whl ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-compare-meshes" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-compare-meshes" + +[feature.python.tasks.serve-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-compare-meshes" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-compare-meshes for development" + +[feature.python.tasks.test-python] +depends-on = ["test-wasi", "test-emscripten", "test-dispatch"] +description = "Run tests for all Python packages" + +[environments] +python = ["python"] diff --git a/packages/compare-meshes/pnpm-workspace.yaml b/packages/compare-meshes/pnpm-workspace.yaml deleted file mode 100644 index 27c86b747..000000000 --- a/packages/compare-meshes/pnpm-workspace.yaml +++ /dev/null @@ -1,2 +0,0 @@ -packages: - - 'typescript' diff --git a/packages/compare-meshes/typescript/package.json b/packages/compare-meshes/typescript/package.json index 75928de3d..eebc9711b 100644 --- a/packages/compare-meshes/typescript/package.json +++ b/packages/compare-meshes/typescript/package.json @@ -1,7 +1,6 @@ { "name": "@itk-wasm/compare-meshes", "version": "0.4.0", - "packageManager": "pnpm@9.6.0", "description": "Compare meshes and polydata for regression testing.", "type": "module", "module": "./dist/index.js", @@ -37,7 +36,7 @@ "itk-wasm": "workspace:^" }, "devDependencies": { - "@itk-wasm/mesh-io": "workspace:^", + "@itk-wasm/mesh-io": "workspace:*", "@itk-wasm/demo-app": "workspace:*", "@types/node": "^20.2.5", "esbuild": "^0.19.8", diff --git a/packages/mesh-io/typescript/package.json b/packages/mesh-io/typescript/package.json index 21f157271..3d48a6902 100644 --- a/packages/mesh-io/typescript/package.json +++ b/packages/mesh-io/typescript/package.json @@ -1,7 +1,6 @@ { "name": "@itk-wasm/mesh-io", "version": "1.4.1", - "packageManager": "pnpm@9.6.0", "description": "Input and output for scientific and medical image file formats.", "type": "module", "module": "./dist/index.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c9cbe7102..833f11a83 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -206,9 +206,6 @@ importers: '@itk-wasm/mesh-io-build': specifier: workspace:^ version: link:../mesh-io - '@thewtex/setup-micromamba': - specifier: ^1.9.7 - version: 1.9.7 itk-wasm: specifier: workspace:^ version: link:../core/typescript/itk-wasm @@ -223,7 +220,7 @@ importers: specifier: workspace:* version: link:../../core/typescript/demo-app '@itk-wasm/mesh-io': - specifier: workspace:^ + specifier: workspace:* version: link:../../mesh-io/typescript '@types/node': specifier: ^20.2.5 From dfcd4cadfa4f0f6d76f62ae11ac374c71f646d93 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 22:27:02 -0400 Subject: [PATCH 22/39] chore(compare-meshes): bump version to 0.4.1 --- packages/compare-meshes/typescript/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compare-meshes/typescript/package.json b/packages/compare-meshes/typescript/package.json index eebc9711b..920985afb 100644 --- a/packages/compare-meshes/typescript/package.json +++ b/packages/compare-meshes/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compare-meshes", - "version": "0.4.0", + "version": "0.4.1", "description": "Compare meshes and polydata for regression testing.", "type": "module", "module": "./dist/index.js", From 5b2332f78a0639459f54e58df6213e69eff70d5e Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 23:01:58 -0400 Subject: [PATCH 23/39] build(dicom): add pixi python configuration --- packages/compare-meshes/environment.yml | 9 - packages/dicom/.gitignore | 3 +- packages/dicom/.npmrc | 1 + packages/dicom/environment.yml | 10 - packages/dicom/package.json | 19 +- packages/dicom/pixi.lock | 6179 +++++++++++++++++ packages/dicom/pixi.toml | 141 + .../itkwasm_dicom_emscripten/js_package.py | 2 +- packages/dicom/typescript/package.json | 1 - pnpm-lock.yaml | 4 +- 10 files changed, 6332 insertions(+), 37 deletions(-) delete mode 100644 packages/compare-meshes/environment.yml create mode 100644 packages/dicom/.npmrc delete mode 100644 packages/dicom/environment.yml create mode 100644 packages/dicom/pixi.lock create mode 100644 packages/dicom/pixi.toml diff --git a/packages/compare-meshes/environment.yml b/packages/compare-meshes/environment.yml deleted file mode 100644 index 70c935694..000000000 --- a/packages/compare-meshes/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: compare-meshes -channels: - - conda-forge -dependencies: - - pytest - - python=3.11 - - pip - - pip: - - hatch diff --git a/packages/dicom/.gitignore b/packages/dicom/.gitignore index 67009a56b..03b58b189 100644 --- a/packages/dicom/.gitignore +++ b/packages/dicom/.gitignore @@ -1,5 +1,6 @@ dist emscripten-build test/ -micromamba/ typescript/src/version.ts +pyodide.tar.bz2 +pyodide/ diff --git a/packages/dicom/.npmrc b/packages/dicom/.npmrc new file mode 100644 index 000000000..a4be22c92 --- /dev/null +++ b/packages/dicom/.npmrc @@ -0,0 +1 @@ +git-checks=false diff --git a/packages/dicom/environment.yml b/packages/dicom/environment.yml deleted file mode 100644 index 5bf7ccab4..000000000 --- a/packages/dicom/environment.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: dicom -channels: - - conda-forge -dependencies: - - pillow - - pytest - - python=3.11 - - pip - - pip: - - hatch diff --git a/packages/dicom/package.json b/packages/dicom/package.json index 25b2f08e8..2651bd2d9 100644 --- a/packages/dicom/package.json +++ b/packages/dicom/package.json @@ -1,9 +1,8 @@ { "name": "@itk-wasm/dicom-build", - "version": "1.0.0", + "version": "7.2.3", "private": true, - "packageManager": "pnpm@9.6.0", - "description": "scripts to generate @itk-wasm/dicom itk-wasm artifacts.", + "description": "@itk-wasm/dicom build configuration.", "type": "module", "itk-wasm": { "test-data-hash": "bafybeicskxufnvuem6342pkfwgeo3siiozgzmfo5f34woge6aptuzuwzzu ", @@ -24,27 +23,23 @@ "build:emscripten:debug": "itk-wasm pnpm-script build:emscripten:debug", "build:wasi": "itk-wasm pnpm-script build:wasi", "build:wasi:debug": "itk-wasm pnpm-script build:wasi:debug", - "build:python:wasi": "itk-wasm pnpm-script build:python:wasi", + "build:python:wasi": "echo 'No build:python:wasi script required with pixi'", "bindgen:typescript": "itk-wasm pnpm-script bindgen:typescript", "bindgen:python": "itk-wasm pnpm-script bindgen:python", "build:gen:typescript": "itk-wasm pnpm-script build:gen:typescript", - "build:gen:python": "itk-wasm pnpm-script build:gen:python", - "build:micromamba": "itk-wasm pnpm-script build:micromamba", - "build:python:versionSync": "itk-wasm pnpm-script build:python:versionSync", - "publish:python": "itk-wasm pnpm-script publish:python", + "build:gen:python": "pnpm build:wasi && pnpm bindgen:python", "test": "pnpm test:data:download && pnpm build:gen:python && pnpm test:python", "test:data:download": "dam download test/data test/data.tar.gz bafybeicfhacth6jwhtqd2caxwtepoydf54kv3zzr36zpoj7og5iuzptv7u https://data.kitware.com/api/v1/file/66c62d8faf422925a42121ab/download", "test:data:pack": "dam pack test/data test/data.tar.gz", - "test:python:wasi": "itk-wasm pnpm-script test:python:wasi", - "test:python:emscripten": "itk-wasm pnpm-script test:python:emscripten", - "test:python:dispatch": "itk-wasm pnpm-script test:python:emscripten", + "test:python:wasi": "pnpm test:data:download && pixi run test-wasi", + "test:python:emscripten": "pnpm test:data:download && pixi run test-emscripten", + "test:python:dispatch": "pnpm test:data:download && pixi run test-dispatch", "test:python": "itk-wasm pnpm-script test:python", "test:wasi": "itk-wasm pnpm-script test:wasi" }, "license": "Apache-2.0", "devDependencies": { "@itk-wasm/dam": "^1.1.0", - "@thewtex/setup-micromamba": "^1.9.7", "itk-wasm": "workspace:^", "@itk-wasm/image-io-build": "workspace:^" } diff --git a/packages/dicom/pixi.lock b/packages/dicom/pixi.lock new file mode 100644 index 000000000..0cfcfd83d --- /dev/null +++ b/packages/dicom/pixi.lock @@ -0,0 +1,6179 @@ +version: 5 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + python: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/08/48/c1ae6fa5fa77d735a6411a764e6e3937a023bd4c3b124ac6301ee174a194/itkwasm_compare_images-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ee/4a4bd7a8f381d391fa293dcfde3437d891c7e9dc7db8764e85506d6cc753/itkwasm_compare_images_wasi-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: python/itkwasm-dicom + - pypi: python/itkwasm-dicom-wasi + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.12.1-hf0a5ef3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.16-h922389a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.22-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.0.0-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.44-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-hec21d91_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.4.0-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.2-h0d9d63b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.0.0-py312h5ab5af3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.11-h86ecc28_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/08/48/c1ae6fa5fa77d735a6411a764e6e3937a023bd4c3b124ac6301ee174a194/itkwasm_compare_images-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ee/4a4bd7a8f381d391fa293dcfde3437d891c7e9dc7db8764e85506d6cc753/itkwasm_compare_images_wasi-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: python/itkwasm-dicom + - pypi: python/itkwasm-dicom-wasi + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-hfce79cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.2-h9f1df11_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.0.0-py312haf37ca6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/08/48/c1ae6fa5fa77d735a6411a764e6e3937a023bd4c3b124ac6301ee174a194/itkwasm_compare_images-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ee/4a4bd7a8f381d391fa293dcfde3437d891c7e9dc7db8764e85506d6cc753/itkwasm_compare_images_wasi-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: python/itkwasm-dicom + - pypi: python/itkwasm-dicom-wasi + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.22-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.0-hfc51747_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py312h381445a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/08/48/c1ae6fa5fa77d735a6411a764e6e3937a023bd4c3b124ac6301ee174a194/itkwasm_compare_images-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ee/4a4bd7a8f381d391fa293dcfde3437d891c7e9dc7db8764e85506d6cc753/itkwasm_compare_images_wasi-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: python/itkwasm-dicom + - pypi: python/itkwasm-dicom-wasi +packages: +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23621 + timestamp: 1650670423406 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23712 + timestamp: 1650670790230 +- kind: conda + name: anyio + version: 4.6.2.post1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - uvloop >=0.21.0b1 + - trio >=0.26.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/anyio?source=compressed-mapping + size: 109864 + timestamp: 1728935803440 +- kind: pypi + name: attrs + version: 24.2.0 + url: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + sha256: 81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'benchmark' + - hypothesis ; extra == 'benchmark' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pympler ; extra == 'benchmark' + - pytest-codspeed ; extra == 'benchmark' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pytest-xdist[psutil] ; extra == 'benchmark' + - pytest>=4.3.0 ; extra == 'benchmark' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'cov' + - coverage[toml]>=5.3 ; extra == 'cov' + - hypothesis ; extra == 'cov' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'cov' + - pympler ; extra == 'cov' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'cov' + - pytest-xdist[psutil] ; extra == 'cov' + - pytest>=4.3.0 ; extra == 'cov' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'dev' + - hypothesis ; extra == 'dev' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'dev' + - pre-commit ; extra == 'dev' + - pympler ; extra == 'dev' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'dev' + - pytest-xdist[psutil] ; extra == 'dev' + - pytest>=4.3.0 ; extra == 'dev' + - cogapp ; extra == 'docs' + - furo ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-notfound-page ; extra == 'docs' + - sphinxcontrib-towncrier ; extra == 'docs' + - towncrier<24.7 ; extra == 'docs' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'tests' + - hypothesis ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests' + - pympler ; extra == 'tests' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests' + - pytest-xdist[psutil] ; extra == 'tests' + - pytest>=4.3.0 ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + requires_python: '>=3.7' +- kind: conda + name: backports + version: '1.0' + build: pyhd8ed1ab_4 + build_number: 4 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + sha256: 31b51537ce7d2ba8b5b3d0095f1813711884304ac1701bc55938ca75f6c82e19 + md5: 67bdebbc334513034826e9b63f769d4c + depends: + - python >=3 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6989 + timestamp: 1722295637981 +- kind: conda + name: backports.tarfile + version: 1.0.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + sha256: 7ba30f32daad2e7ca251508525185ba170eedc14123572611c2acf261c7956b3 + md5: c747b1d79f136013c3b7ebcba876afa6 + depends: + - backports + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/backports-tarfile?source=hash-mapping + size: 31951 + timestamp: 1712700751335 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h2466b09_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 54927 + timestamp: 1720974860185 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h68df207_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb + md5: 56398c28220513b9ea13d7b450acfb20 + depends: + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 189884 + timestamp: 1720974504976 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 122909 + timestamp: 1720974522888 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: h56e8100_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 + md5: 4c4fd67c18619be5aa65dc5b6c72e490 + license: ISC + purls: [] + size: 158773 + timestamp: 1725019107649 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 + license: ISC + purls: [] + size: 159003 + timestamp: 1725018903918 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hcefe29a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + sha256: 2a2d827bee3775a85f0f1b2f2089291475c4416336d1b3a8cbce2964db547af8 + md5: 70e57e8f59d2c98f86b49c69e5074be5 + license: ISC + purls: [] + size: 159106 + timestamp: 1725020043153 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + purls: [] + size: 158482 + timestamp: 1725019034582 +- kind: conda + name: certifi + version: 2024.8.30 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping + size: 163752 + timestamp: 1725278204397 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h06ac9bb_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 + md5: a861504bbea4161a9170b85d4d2be840 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 294403 + timestamp: 1725560714366 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 281206 + timestamp: 1725560813378 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h4389bb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + sha256: ac007bf5fd56d13e16d95eea036433012f2e079dc015505c8a79efebbad1fcbc + md5: 08310c1a22ef957d537e547f8d484f92 + depends: + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 288142 + timestamp: 1725560896359 +- kind: conda + name: cffi + version: 1.17.1 + build: py312hac81daf_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + sha256: 1162e3ca039e7ca7c0e78f0a020ed1bde968096841b663e3f393c966eb82f0f0 + md5: 1a256e5581b1099e9295cb84d53db3ea + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 312892 + timestamp: 1725561779888 +- kind: conda + name: click + version: 8.1.7 + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 84437 + timestamp: 1692311973840 +- kind: conda + name: click + version: 8.1.7 + build: win_pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 + md5: 3549ecbceb6cd77b91a105511b7d0786 + depends: + - __win + - colorama + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 85051 + timestamp: 1692312207348 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + sha256: ba9e5aced2e7dc0bbc48f60bf38f514839424a01975fb2aed30e9246c2f82c7c + md5: 2abada8c216dd6e32514535a3fa245d4 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1488388 + timestamp: 1729286882127 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312he723553_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + sha256: bd9cc8410bf31ac8b90d63dda92d5810af16c3841ca6dd09be9b7f9c5c7688ba + md5: bfacbf2e4560c7d6416d40f573961918 + depends: + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1480456 + timestamp: 1729287055014 +- kind: conda + name: dbus + version: 1.13.6 + build: h12b9eeb_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + sha256: 5fe76bdf27a142cfb9da0fb3197c562e528d2622b573765bee5c9904cf5e6b6b + md5: f3d63805602166bac09386741e00935e + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 672759 + timestamp: 1640113663539 +- kind: conda + name: dbus + version: 1.13.6 + build: h5008d03_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 + md5: ecfff944ba3960ecb334b9a2663d708d + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 618596 + timestamp: 1640112124844 +- kind: conda + name: distlib + version: 0.3.9 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb + md5: fe521c1608280cc2803ebd26dc252212 + depends: + - python 2.7|>=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/distlib?source=hash-mapping + size: 276214 + timestamp: 1728557312342 +- kind: conda + name: editables + version: '0.5' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + sha256: de160a7494e7bc72360eea6a29cbddf194d0a79f45ff417a4de20e6858cf79a9 + md5: 9873878e2a069bc358b69e9a29c1ecd5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/editables?source=hash-mapping + size: 10988 + timestamp: 1705857085102 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: expat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + sha256: c827521e080d0f3395655924f1c364d48a1eac1ff3e193a12d0441e9c3b51e91 + md5: 901a44b341632b0c233756ed5abcd78b + depends: + - libexpat 2.6.3 h5ad3122_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 130283 + timestamp: 1725568848182 +- kind: conda + name: filelock + version: 3.16.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + purls: + - pkg:pypi/filelock?source=hash-mapping + size: 17357 + timestamp: 1726613593584 +- kind: conda + name: freetype + version: 2.12.1 + build: h267a509_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 + md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 634972 + timestamp: 1694615932610 +- kind: conda + name: freetype + version: 2.12.1 + build: hadb7bae_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + sha256: 791673127e037a2dc0eebe122dc4f904cb3f6e635bb888f42cbe1a76b48748d9 + md5: e6085e516a3e304ce41a8ee08b9b89ad + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 596430 + timestamp: 1694616332835 +- kind: conda + name: freetype + version: 2.12.1 + build: hdaf720e_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda + sha256: 2c53ee8879e05e149a9e525481d36adfd660a6abda26fd731376fa64ff03e728 + md5: 3761b23693f768dc75a8fd0a73ca053f + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: GPL-2.0-only OR FTL + purls: [] + size: 510306 + timestamp: 1694616398888 +- kind: conda + name: freetype + version: 2.12.1 + build: hf0a5ef3_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.12.1-hf0a5ef3_2.conda + sha256: 7af93030f4407f076dce181062360efac2cd54dce863b5d7765287a6f5382537 + md5: a5ab74c5bd158c3d5532b66d8d83d907 + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 642092 + timestamp: 1694617858496 +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + sha256: 7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + sha256: 4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + sha256: 1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: conda + name: h11 + version: 0.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/h11?source=hash-mapping + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + size: 46754 + timestamp: 1634280590080 +- kind: conda + name: hatch + version: 1.13.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + sha256: 675b0304b129a4dbc39b8e6f337cea51adebef20508a656f43b6e6b43d9cf458 + md5: b8a6437f94d29aef00decdbe1174be27 + depends: + - click >=8.0.6 + - hatchling >=1.24.2 + - httpx >=0.22.0 + - hyperlink >=21.0.0 + - keyring >=23.5.0 + - packaging >=23.2 + - pexpect >=4.8,<5 + - platformdirs >=2.5.0 + - python >=3.8 + - rich >=11.2.0 + - shellingham >=1.4.0 + - tomli-w >=1.0 + - tomlkit >=0.11.1 + - userpath >=1.7,<2 + - uv >=0.1.35 + - virtualenv >=20.26.1 + - zstandard <1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatch?source=hash-mapping + size: 177173 + timestamp: 1728879212263 +- kind: conda + name: hatchling + version: 1.25.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + sha256: fb8a16a913f909d8f7d2ae95c18a1aeb7be3eebfb1b7a4246500c06d54498f89 + md5: 7571d6e5561b04aef679a11904dfcebf + depends: + - editables >=0.3 + - importlib-metadata + - packaging >=21.3 + - pathspec >=0.10.1 + - pluggy >=1.0.0 + - python >=3.7 + - tomli >=1.2.2 + - trove-classifiers + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatchling?source=hash-mapping + size: 64580 + timestamp: 1719090878694 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: httpcore + version: 1.0.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + sha256: 8952c3f1eb18bf4d7e813176c3b23e0af4e863e8b05087e73f74f371d73077ca + md5: b8e1901ef9a215fc41ecfb6bef7e0943 + depends: + - anyio >=3.0,<5.0 + - certifi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + size: 45711 + timestamp: 1727821031365 +- kind: conda + name: httpx + version: 0.27.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 14646 + timestamp: 1619110249723 +- kind: conda + name: hyperlink + version: 21.0.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + sha256: 026cb82ada41be9ee2836a2ace526e85c4603e77617887c41c6e62c9bde798b3 + md5: 1303beb57b40f8f4ff6fb1bb23bf0553 + depends: + - idna >=2.6 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperlink?source=hash-mapping + size: 72732 + timestamp: 1610092261086 +- kind: pypi + name: hypothesis + version: 6.115.5 + url: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + sha256: b7733459ae9a93020fac3b91b41473c9b85e975139a152a70d88f3a5caa3fa3f + requires_dist: + - attrs>=22.2.0 + - sortedcontainers<3.0.0,>=2.1.0 + - exceptiongroup>=1.0.0 ; python_full_version < '3.11' + - black>=19.10b0 ; extra == 'all' + - click>=7.0 ; extra == 'all' + - crosshair-tool>=0.0.74 ; extra == 'all' + - django>=4.2 ; extra == 'all' + - dpcontracts>=0.4 ; extra == 'all' + - hypothesis-crosshair>=0.0.16 ; extra == 'all' + - lark>=0.10.1 ; extra == 'all' + - libcst>=0.3.16 ; extra == 'all' + - numpy>=1.19.3 ; extra == 'all' + - pandas>=1.1 ; extra == 'all' + - pytest>=4.6 ; extra == 'all' + - python-dateutil>=1.4 ; extra == 'all' + - pytz>=2014.1 ; extra == 'all' + - redis>=3.0.0 ; extra == 'all' + - rich>=9.0.0 ; extra == 'all' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'all') or (sys_platform == 'win32' and extra == 'all') + - click>=7.0 ; extra == 'cli' + - black>=19.10b0 ; extra == 'cli' + - rich>=9.0.0 ; extra == 'cli' + - libcst>=0.3.16 ; extra == 'codemods' + - hypothesis-crosshair>=0.0.16 ; extra == 'crosshair' + - crosshair-tool>=0.0.74 ; extra == 'crosshair' + - python-dateutil>=1.4 ; extra == 'dateutil' + - django>=4.2 ; extra == 'django' + - dpcontracts>=0.4 ; extra == 'dpcontracts' + - black>=19.10b0 ; extra == 'ghostwriter' + - lark>=0.10.1 ; extra == 'lark' + - numpy>=1.19.3 ; extra == 'numpy' + - pandas>=1.1 ; extra == 'pandas' + - pytest>=4.6 ; extra == 'pytest' + - pytz>=2014.1 ; extra == 'pytz' + - redis>=3.0.0 ; extra == 'redis' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'zoneinfo') or (sys_platform == 'win32' and extra == 'zoneinfo') + requires_python: '>=3.9' +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12129203 + timestamp: 1720853576813 +- kind: conda + name: icu + version: '75.1' + build: hf9b3779_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 + md5: 268203e8b983fddb6412b36f2024e75c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12282786 + timestamp: 1720853454991 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 11857802 + timestamp: 1720853997952 +- kind: conda + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=hash-mapping + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: importlib_resources + version: 6.4.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping + size: 32725 + timestamp: 1725921462405 +- kind: conda + name: iniconfig + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 + md5: f800d2da156d08e289b14e87e43c1ae5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=hash-mapping + size: 11101 + timestamp: 1673103208955 +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: a1b4e5511c2274025bffe80d081ef79ee41de580df80311007af1ec05e2774db + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 0f0dcce9df862831e705eebf0ffa95de554b17027f69d67b31b30dcb8d838019 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 88344f4c7e8a74dfdeb98e20232d1a9565eb7c381d8242534588ecc4e745ffb3 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + sha256: e5ffacab2c8609979c78c2d2e02ee7e6abd611261aac0613289d98e7c277cd83 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 21c7b5c451f73c8073eb3b5dd85f7c654399cdc25dd51669bfbbafa611aa4649 + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: b6af0e82dae0efa95ad87f36ccd55a955383b34a6bd8a036894fb96a3933615a + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 8ca83de9c269e6b20648f2391aa2bf96903b8ed645c3d8cd40d90b939dda439e + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + sha256: 6affe6986927fd176c176f5464d9ea9e737b85d8745f5c4129da910fd16235cb + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + sha256: ad59e6066dba25d6b0803023e95c7633a80e7b9c1a9ff89a41c97eae5a60e06f + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 6e8600df87c59233968013d162c5a353ca4c8f843c76117b52347aec20ff1620 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 86026c853f1fd0b13e282f952cff7455df0ac131cc608df8669ce335633eef0a + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: e8d90842d703877c4ce777efece3db478c8ed5e3a18488e277a480f05d61ebb0 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 393d711f9edb248aed402e7fc9613045536dbd6b45fc8db638a28d0a409fe974 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8c0eacb3aa100e4b369a673bb0e65c3c48c411bc4b716069bce4cee8c3f9e1cc + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: d969a2ab2775b2ace36edee274ffe4839b21c7ccd634844082028f9f373dfedb + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 11a34ac45b960aa883e1758ead15c5394814964573c93d736fc04f021c18cd22 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 3c10f157bddbdf86b596ec2742f17bcc35cd6ce7bd64bba712a2a0c0858c2dc7 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 914cae65049842affc820471e149b2cdd55d305ff1a740c34a47e1b1af567361 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + sha256: b8b746f6d5597687d0b50dd81d650da0293f2c3c90f31212baefdf46edb727d6 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 84bd859eeb17aed3de39f0b3357525a4bfac0db17263a8d36cd641e5f8c49b46 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + sha256: 31f24c218c763b2c15953453cc366c5ba09e7a5c7d47d432a24c0b6b12249206 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 5cd8ab0781e08a4022e36094bb60652d0ee2b7cd1912f325e8f32d8bd5501fcf + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 583b665d6b8578ac93691afb796faf69e30b8db8a205754cdc746707f9589fcd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: e2dcda0a07ccb6b9b518d3cc4413387a44c30a313c22e15bf818af06c7da8bfd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 15eab6a72bebeccfb8a0fb291b65c305e46776a18a8f3cb91f199fc8ecd137a1 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8a2d3f2872375a9c2694bb34a2e061a4d2666f8c13390f03d94219ba8370649e + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 3f41cff2136f69ae5c2ce6166191dff86e4722097411aaaba07a74884d36ff73 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: dde112dbb9b695c1908692a0086f60da8d5a123f7e959ebc5aaec2825aaf9793 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: ff2ca7cdf42c8c32b20e1ecf7ee0a0be68e885ce673c565e72a4876b28d2e2f3 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: b3c154e7a92be2ad48e6bf8bd5a8a17610f890bb420abb54dd2bde15b1c9c52c + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + sha256: 45374d3c38884ed02e0dfebf73f363e265184a50f7c46d55d8c9217e690a571f + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 8dd071dbb1ba1c8fcf26a4011fc3b7069d444e10bc56279d7b26fd3193ac58aa + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + sha256: 0b787ee92418a1f965c52eea1fd41a7aef4424eb6e07a290b0e1ddebf50a09e1 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + sha256: ee3defc13dc65f56127e468c145e9249265c275b63ea3c530c1b88f1df4a7033 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 72f82fab54c4ee4c6c579cfd5c963cba9a84ecc9909e61f3641caa9fef94b40c + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: eff3cd27756e96ebd31500ef258d0cc4a56e48c2c25c4533300469246623d7aa + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itkwasm + version: 1.0b179 + url: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + sha256: 43558ccd082f3dc3c9b3b2379cdb197635b33620d41dbc6c1fa9186d03c22a7e + requires_dist: + - importlib-metadata ; python_full_version < '3.10' + - numpy + - platformdirs ; sys_platform != 'emscripten' + - typing-extensions + - wasmtime>=13.0.2 ; sys_platform != 'emscripten' + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-compare-images + version: 5.2.3 + url: https://files.pythonhosted.org/packages/08/48/c1ae6fa5fa77d735a6411a764e6e3937a023bd4c3b124ac6301ee174a194/itkwasm_compare_images-5.2.3-py3-none-any.whl + sha256: 60a5f25ca54caf0f9823750cef72adebc443157979b028f01bfab3d6c35f9cea + requires_dist: + - itkwasm-compare-images-emscripten>=1.0.1 ; sys_platform == 'emscripten' + - itkwasm-compare-images-wasi>=1.0.1 ; sys_platform != 'emscripten' + - itkwasm>=1.0b171 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-compare-images-wasi + version: 5.2.3 + url: https://files.pythonhosted.org/packages/7d/ee/4a4bd7a8f381d391fa293dcfde3437d891c7e9dc7db8764e85506d6cc753/itkwasm_compare_images_wasi-5.2.3-py3-none-any.whl + sha256: d363d00507ed7da55e57099ec659cf7d13314141d432f9750f83af94250a0bd6 + requires_dist: + - importlib-resources + - itkwasm>=1.0b171 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-dicom + version: 7.2.2 + path: python/itkwasm-dicom + sha256: b52b567c0273ff9f0161cc76185724d04430b179fb39174a886b3912fd65997c + requires_dist: + - itkwasm-dicom-emscripten ; sys_platform == 'emscripten' + - itkwasm-dicom-wasi ; sys_platform != 'emscripten' + - itkwasm>=1.0b131 + requires_python: '>=3.8' + editable: true +- kind: pypi + name: itkwasm-dicom-wasi + version: 7.2.2 + path: python/itkwasm-dicom-wasi + sha256: 7e3f72e73af083ebb6e8ccccae9beb63a8966fe1977ebb7cac49a28433271eae + requires_dist: + - importlib-resources + - itkwasm-compare-images + - itkwasm-image-io + - itkwasm>=1.0b131 + requires_python: '>=3.8' + editable: true +- kind: pypi + name: itkwasm-image-io + version: 1.3.0 + url: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + sha256: 121ef7e942f1f6c25ef428a0a39944a0a9eb9bce226d6ee7466df1e2d8fc9a56 + requires_dist: + - itkwasm-image-io-emscripten ; sys_platform == 'emscripten' + - itkwasm-image-io-wasi ; sys_platform != 'emscripten' + - itkwasm>=1.0b145 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-image-io-wasi + version: 1.3.0 + url: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + sha256: 13fe5cad7942dc9fc94ece5711d5b342b5cb90dc93f764558de195674a2b183b + requires_dist: + - importlib-resources + - itkwasm>=1.0b131 + requires_python: '>=3.8' +- kind: conda + name: jaraco.classes + version: 3.4.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + sha256: 538b1c6df537a36c63fd0ed83cb1c1c25b07d8d3b5e401991fdaff261a4b5b4d + md5: 7b756504d362cbad9b73a50a5455cafd + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-classes?source=hash-mapping + size: 12223 + timestamp: 1713939433204 +- kind: conda + name: jaraco.context + version: 5.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + sha256: 9e2aeacb1aed3ab4fc5883a357e8a874e12f687af300f8708ec12de2995e17d2 + md5: 72d7ad2dcd0f37eccb2ee35a1c8f6aaa + depends: + - backports.tarfile + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-context?source=hash-mapping + size: 12456 + timestamp: 1714372284922 +- kind: conda + name: jaraco.functools + version: 4.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + sha256: d2e866fd22a48eaa2f795b6a3b0bf16f066293322ce04dd65cca36267160ead6 + md5: 547670a612fd335eaa5ffbf0fa75cb64 + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-functools?source=hash-mapping + size: 15192 + timestamp: 1701695329516 +- kind: conda + name: jeepney + version: 0.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + sha256: 16639759b811866d63315fe1391f6fb45f5478b823972f4d3d9f0392b7dd80b8 + md5: 9800ad1699b42612478755a2d26c722d + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jeepney?source=hash-mapping + size: 36895 + timestamp: 1649085298891 +- kind: conda + name: jq + version: 1.7.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + sha256: 53437ca79e28003faac8058f6c025c83a819e122d3a0fb70624e6da0f77ab126 + md5: 397702b2c1e53f0f0312d2b170d2e699 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 334346 + timestamp: 1702502754422 +- kind: conda + name: jq + version: 1.7.1 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + sha256: e530cf5800e937bce7847a023a998db504e333a928b469c45a1752535593e762 + md5: dbf665694fb28d86d77cca18e5dd530c + depends: + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 317604 + timestamp: 1702501287237 +- kind: conda + name: jq + version: 1.7.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d + md5: 80814f94713e35df60aad6c4b235de87 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 318956 + timestamp: 1702500793203 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh534df25_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + sha256: 8d8fc7d67e9bd387403720447abb1b5539a6f6ca8e3aba8406e0987213bfa0ce + md5: 2099f34ea2f3534f7adc5c21cc199e1b + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37045 + timestamp: 1726971145252 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + sha256: 69626899dfac975090032f7af782c143b569f7706e808a4eca67a9a5aa134a15 + md5: 1c74a03431815d5e091585bb04e86f12 + depends: + - __win + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + - pywin32-ctypes >=0.2.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37407 + timestamp: 1726971355676 +- kind: conda + name: keyring + version: 25.4.1 + build: pyha804496_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + sha256: 6deeb4fa0f01447a5e8bd7261044c45d139e27d36df769e5a3a16ce55607da14 + md5: ef6f2de3c8eef0ee9fd31f2267c27bf2 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.8 + - secretstorage >=3.2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 36717 + timestamp: 1726971094601 +- kind: conda + name: lcms2 + version: '2.16' + build: h67d730c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda + sha256: f9fd9e80e46358a57d9bb97b1e37a03da4022143b019aa3c4476d8a7795de290 + md5: d3592435917b62a8becff3a60db674f6 + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 507632 + timestamp: 1701648249706 +- kind: conda + name: lcms2 + version: '2.16' + build: h922389a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.16-h922389a_0.conda + sha256: be4847b1014d3cbbc524a53bdbf66182f86125775020563e11d914c8468dd97d + md5: ffdd8267a04c515e7ce69c727b051414 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 296219 + timestamp: 1701647961116 +- kind: conda + name: lcms2 + version: '2.16' + build: ha0e7c42_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + sha256: 151e0c84feb7e0747fabcc85006b8973b22f5abbc3af76a9add0b0ef0320ebe4 + md5: 66f6c134e76fe13cce8a9ea5814b5dd5 + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 211959 + timestamp: 1701647962657 +- kind: conda + name: lcms2 + version: '2.16' + build: hb7c19ff_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 + md5: 51bb7010fc86f70eee639b4bb7a894f5 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 245247 + timestamp: 1701647787198 +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe + md5: 048b02e3962f066da18efe3a21b77672 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 669211 + timestamp: 1729655358674 +- kind: conda + name: ld_impl_linux-aarch64 + version: '2.43' + build: h80caac9_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + sha256: 80ec7e8f006196808fac5bd4b3773a652847f97bbf08044cd87731424ac64f8b + md5: fcbde5ea19d55468953bf588770c0501 + constrains: + - binutils_impl_linux-aarch64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 698245 + timestamp: 1729655345825 +- kind: conda + name: lerc + version: 4.0.0 + build: h27087fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 + md5: 76bbff344f0134279f225174e9064c8f + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 281798 + timestamp: 1657977462600 +- kind: conda + name: lerc + version: 4.0.0 + build: h4de3ea5_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 + sha256: 2d09ef9b7796d83364957e420b41c32d94e628c3f0520b61c332518a7b5cd586 + md5: 1a0ffc65e03ce81559dbcb0695ad1476 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 262096 + timestamp: 1657978241894 +- kind: conda + name: lerc + version: 4.0.0 + build: h63175ca_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 + sha256: f4f39d7f6a2f9b407f8fb567a6c25755270421731d70f0ff331f5de4fa367488 + md5: 1900cb3cab5055833cfddb0ba233b074 + depends: + - vc >=14.2,<15 + - vs2015_runtime >=14.29.30037 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 194365 + timestamp: 1657977692274 +- kind: conda + name: lerc + version: 4.0.0 + build: h9a09cb3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + sha256: 6f068bb53dfb6147d3147d981bb851bb5477e769407ad4e6a68edf482fdcb958 + md5: de462d5aacda3b30721b512c5da4e742 + depends: + - libcxx >=13.0.1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 215721 + timestamp: 1657977558796 +- kind: conda + name: libcxx + version: 19.1.2 + build: ha82da77_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 + md5: ba89ad7c5477e6a9d020020fcdadd37d + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 521199 + timestamp: 1729038190391 +- kind: conda + name: libdeflate + version: '1.22' + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.22-h2466b09_0.conda + sha256: 579c634b7de8869cb1d76eccd4c032dc275d5a017212128502ea4dc828a5b361 + md5: a3439ce12d4e3cd887270d9436f9a4c8 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 155506 + timestamp: 1728177485361 +- kind: conda + name: libdeflate + version: '1.22' + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.22-h86ecc28_0.conda + sha256: 986207f130703897300ddc3637c52e86a5b21c735fe384bf48554d9a6d91c56d + md5: ff6a44e8b1707d02be2fe9a36ea88d4a + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 69601 + timestamp: 1728177137503 +- kind: conda + name: libdeflate + version: '1.22' + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + sha256: 780f0530a3adfc1497ba49d626931c6afc978c540e1abfde6ccd57128ded6ad6 + md5: b422943d5d772b7cc858b36ad2a92db5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 72242 + timestamp: 1728177071251 +- kind: conda + name: libdeflate + version: '1.22' + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + sha256: 3552894ca62bebc33d05982937cda25a4fa19e56a82af2ff20944ff4c2532fda + md5: 2d3e3f3d8ab315748420ef58d5a3ae0f + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 54089 + timestamp: 1728177149927 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + sha256: 4bb47bb2cd09898737a5211e2992d63c555d63715a07ba56eae0aff31fb89c22 + md5: 59f4c43bb1b5ef1c71946ff2cbf59524 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 73616 + timestamp: 1725568742634 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + sha256: 02341c9c35128055fd404dfe675832b80f2bf9dbb99539457652c11c06e52757 + md5: 1d2b842bb76e268625e8ee8d0a9fe8c3 + depends: + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 72342 + timestamp: 1725568840022 +- kind: conda + name: libexpat + version: 2.6.3 + build: he0c23c2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + sha256: 9543965d155b8da96fc67dd81705fe5c2571c7c00becc8de5534c850393d4e3c + md5: 21415fbf4d0de6767a621160b43e5dea + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 138992 + timestamp: 1725569106114 +- kind: conda + name: libexpat + version: 2.6.3 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a + md5: 5f22f07c2ab2dea8c66fe9585a062c96 + depends: + - __osx >=11.0 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 63895 + timestamp: 1725568783033 +- kind: conda + name: libffi + version: 3.4.2 + build: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + purls: [] + size: 39020 + timestamp: 1636488587153 +- kind: conda + name: libffi + version: 3.4.2 + build: h3557bc0_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 59450 + timestamp: 1636488255090 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libffi + version: 3.4.2 + build: h8ffe710_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 + md5: 2c96d1b6915b408893f9472569dee135 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: MIT + license_family: MIT + purls: [] + size: 42063 + timestamp: 1636489106777 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 + md5: 511b511c5445e324066c3377481bcab8 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==14.2.0=*_1 + - libgomp 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 535243 + timestamp: 1729089435134 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: he9431aa_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 + md5: 0694c249c61469f2c0f7e2990782af21 + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54104 + timestamp: 1729089444587 +- kind: conda + name: libglib + version: 2.82.2 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 3931898 + timestamp: 1729191404130 +- kind: conda + name: libglib + version: 2.82.2 + build: hc486b8e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + sha256: 6797d24de7acd298f81a86078c64e4f3fea6d551a3e8892205c9e72a37a7cc3c + md5: 47f6d85fe47b865e56c539f2ba5f4dad + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 4020802 + timestamp: 1729191545578 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libgomp + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf + md5: 376f0e73abbda6d23c0cb749adc195ef + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 463521 + timestamp: 1729089357313 +- kind: conda + name: libiconv + version: '1.17' + build: h31becfc_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705787 + timestamp: 1702684557134 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705775 + timestamp: 1702682170569 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.0.0-h31becfc_1.conda + sha256: 675bc1f2a8581cd34a86c412663ec29c5f90c1d9f8d11866aa1ade5cdbdf8429 + md5: ed24e702928be089d9ba3f05618515c6 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 647126 + timestamp: 1694475003570 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hb547adb_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + sha256: a42054eaa38e84fc1e5ab443facac4bbc9d1b6b6f23f54b7bf4f1eb687e1d993 + md5: 3ff1e053dc3a2b8e36b9bfa4256a58d1 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 547541 + timestamp: 1694475104253 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hcfcfb64_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda + sha256: 4e7808e3098b4b4ed7e287f63bb24f9045cc4d95bfd39f0db870fc2837d74dff + md5: 3f1b948619c45b1ca714d60c7389092c + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 822966 + timestamp: 1694475223854 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f + md5: ea25936bb4080d843790b586850f82b8 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 618575 + timestamp: 1694474974816 +- kind: conda + name: libnsl + version: 2.0.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 34501 + timestamp: 1697358973269 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libpng + version: 1.6.44 + build: h3ca93ac_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda + sha256: 0d3d6ff9225f6918ac225e3839c0d91e5af1da08a4ebf59cac1bfd86018db945 + md5: 639ac6b55a40aa5de7b8c1b4d78f9e81 + depends: + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: zlib-acknowledgement + purls: [] + size: 348933 + timestamp: 1726235196095 +- kind: conda + name: libpng + version: 1.6.44 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + sha256: e5b14f7a01c2db4362d8591f42f82f336ed48d5e4079e4d1f65d0c2a3637ea78 + md5: f4cc49d7aa68316213e4b12be35308d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 290661 + timestamp: 1726234747153 +- kind: conda + name: libpng + version: 1.6.44 + build: hc14010f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + sha256: 38f8759a3eb8060deabd4db41f0f023514d853e46ddcbd0ba21768fc4e563bb1 + md5: fb36e93f0ea6a6f5d2b99984f34b049e + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 263385 + timestamp: 1726234714421 +- kind: conda + name: libpng + version: 1.6.44 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.44-hc4a20ef_0.conda + sha256: 23b5ce15cf9c6017641a8396bab00ae807dd9f662718cfa7f61de114d0c97647 + md5: 5d25802b25fcc7419fa13e21affaeb3a + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 294907 + timestamp: 1726236639270 +- kind: conda + name: libsqlite + version: 3.47.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + sha256: 4f3cd0477c831eab48fb7fa3ed91d918aeb644fad9b4014726d445339750cdcc + md5: 964bef59135d876c596ae67b3315e812 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Unlicense + purls: [] + size: 884970 + timestamp: 1729592254351 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + sha256: 76ffc7a5823b51735c11d535f3666b3c9c7d1519f9fbb6fa9cdff79db01960b9 + md5: 540296f0ce9d3352188c15a89b30b9ac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 874704 + timestamp: 1729591931557 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hbaaea75_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + sha256: 76aa4bbbaa2334689b16048f04ac4c7406e9bfb1f225ac7107fd2a73f85329cf + md5: 5bbe4802d5460b80620411fe1da8fec3 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 837789 + timestamp: 1729592072314 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + sha256: 469ed05e9a1622b0204a2b6cf620c9054bf6904e2ed818a1f91ee96a7bc64517 + md5: ccbe261fb8c1f1cd1a3122592247d3c4 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 1042108 + timestamp: 1729592001716 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: h3f4de04_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 + md5: 37f489acd39e22b623d2d1e5ac6d195c + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3816794 + timestamp: 1729089463404 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54105 + timestamp: 1729027780628 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: hf1166c9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd + md5: 0e75771b8a03afae5a2c6ce71bc733f5 + depends: + - libstdcxx 14.2.0 h3f4de04_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54133 + timestamp: 1729089498541 +- kind: conda + name: libtiff + version: 4.7.0 + build: he137b08_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + sha256: 9890121db85f6ef463fe12eb04ef1471176e3ef3b5e2d62e8d6dac713df00df4 + md5: 63872517c98aa305da58a757c443698e + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 428156 + timestamp: 1728232228989 +- kind: conda + name: libtiff + version: 4.7.0 + build: hec21d91_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-hec21d91_1.conda + sha256: 14ecb9e129b1b5ffd6d4bee48de95cd2cd0973c712e1b965d3ef977cca23936d + md5: 1f80061f5ba6956fcdc381f34618cd8d + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 464938 + timestamp: 1728232266969 +- kind: conda + name: libtiff + version: 4.7.0 + build: hfc51747_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.0-hfc51747_1.conda + sha256: 902cb9f7f54d17dcfd54ce050b1ce2bc944b9bbd1748913342c2ea1e1140f8bb + md5: eac317ed1cc6b9c0af0c27297e364665 + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 978865 + timestamp: 1728232594877 +- kind: conda + name: libtiff + version: 4.7.0 + build: hfce79cd_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-hfce79cd_1.conda + sha256: 97ba24c74750b6e731b3fe0d2a751cda6148b4937d2cc3f72d43bf7b3885c39d + md5: b9abf45f7c64caf3303725f1aa0e9a4d + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=17 + - libdeflate >=1.22,<1.23.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 366323 + timestamp: 1728232400072 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libuuid + version: 2.38.1 + build: hb4cce97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 35720 + timestamp: 1680113474501 +- kind: conda + name: libuv + version: 1.49.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 + md5: 4bc348e3a1a74d20a3f9beb866d75e0a + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 410500 + timestamp: 1729322654121 +- kind: conda + name: libuv + version: 1.49.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 + md5: 1899e1ec2be63386c41c4db31d3056af + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 627484 + timestamp: 1729322575379 +- kind: conda + name: libuv + version: 1.49.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 + md5: 070e3c9ddab77e38799d5c30b109c633 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 884647 + timestamp: 1729322566955 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.4.0-h31becfc_0.conda + sha256: 10dded60f274e29c573cfacf6e96f5d0fc374ee431250374a44cbd773916ab9d + md5: 5fd7ab3e5f382c70607fbac6335e6e19 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 363577 + timestamp: 1713201785160 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda + sha256: 0d4bad713a512d79bfeb4d61821f447afab8b0792aca823f505ce6b195e9fde5 + md5: c0af0edfebe780b19940e94871f1a765 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 287750 + timestamp: 1713200194013 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hcfcfb64_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda + sha256: d0ca51cb1de9192be9a3238e71fbcca5a535619c499c4f4c9b2ed41c14d36770 + md5: abd61d0ab127ec5cd68f62c2969e6f34 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 274359 + timestamp: 1713200524021 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f + md5: b26e8aa824079e1be0294e7152ca4559 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 438953 + timestamp: 1713199854503 +- kind: conda + name: libxcb + version: '1.16' + build: h013a479_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda + sha256: abae56e12a4c62730b899fdfb82628a9ac171c4ce144fc9f34ae024957a82a0e + md5: f0b599acdc82d5bc7e3b105833e7c5c8 + depends: + - m2w64-gcc-libs + - m2w64-gcc-libs-core + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 989459 + timestamp: 1724419883091 +- kind: conda + name: libxcb + version: 1.17.0 + build: h262b8f6_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + sha256: 461cab3d5650ac6db73a367de5c8eca50363966e862dcf60181d693236b1ae7b + md5: cd14ee5cca2464a425b1dbfc24d90db2 + depends: + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 397493 + timestamp: 1727280745441 +- kind: conda + name: libxcb + version: 1.17.0 + build: h8a09558_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 395888 + timestamp: 1727278577118 +- kind: conda + name: libxcb + version: 1.17.0 + build: hdb1d25a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + sha256: bd3816218924b1e43b275863e21a3e13a5db4a6da74cca8e60bc3c213eb62f71 + md5: af523aae2eca6dfa1c8eec693f5b9a79 + depends: + - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 323658 + timestamp: 1727278733917 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 114269 + timestamp: 1702724369203 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libzlib + version: 1.3.1 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + md5: 41fbfac52c601159df6c01f875de31b9 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 55476 + timestamp: 1727963768015 +- kind: conda + name: libzlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: libzlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 66657 + timestamp: 1727963199518 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 +- kind: conda + name: m2w64-gcc-libgfortran + version: 5.3.0 + build: '6' + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 + md5: 066552ac6b907ec6d72c0ddab29050dc + depends: + - m2w64-gcc-libs-core + - msys2-conda-epoch ==20160418 + license: GPL, LGPL, FDL, custom + purls: [] + size: 350687 + timestamp: 1608163451316 +- kind: conda + name: m2w64-gcc-libs + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa + md5: fe759119b8b3bfa720b8762c6fdc35de + depends: + - m2w64-gcc-libgfortran + - m2w64-gcc-libs-core + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 532390 + timestamp: 1608163512830 +- kind: conda + name: m2w64-gcc-libs-core + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 + md5: 4289d80fb4d272f1f3b56cfe87ac90bd + depends: + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 219240 + timestamp: 1608163481341 +- kind: conda + name: m2w64-gmp + version: 6.1.0 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 + md5: 53a1c73e1e3d185516d7e3af177596d9 + depends: + - msys2-conda-epoch ==20160418 + license: LGPL3 + purls: [] + size: 743501 + timestamp: 1608163782057 +- kind: conda + name: m2w64-jq + version: '1.6' + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + sha256: d722a8c06f44dfb5f357608e6e1d40d1f1c926316bbee5d1e71d93823554646b + md5: 209cbf1b222dc774cb29ce57796500b3 + depends: + - m2w64-gcc-libs + - m2w64-oniguruma + license: MIT + license_family: MIT + purls: [] + size: 424702 + timestamp: 1591860215369 +- kind: conda + name: m2w64-libwinpthread-git + version: 5.0.0.4634.697f757 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 + md5: 774130a326dee16f1ceb05cc687ee4f0 + depends: + - msys2-conda-epoch ==20160418 + license: MIT, BSD + purls: [] + size: 31928 + timestamp: 1608166099896 +- kind: conda + name: m2w64-oniguruma + version: 6.9.5 + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + sha256: 523edeac9788aa61243bd2ceb7b8bdb1a86b68c9f7f1aeb933085893d2886cc3 + md5: 61c9b808f92724106a63dd7b50979d6b + depends: + - m2w64-gcc-libs + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 426599 + timestamp: 1591828659130 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + size: 64356 + timestamp: 1686175179621 +- kind: conda + name: mdurl + version: 0.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping + size: 14680 + timestamp: 1704317789138 +- kind: conda + name: more-itertools + version: 10.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + sha256: 2315b7dba237e16b0e1b601725a8e03e062421e0be28d8a25dc35dd9bd93a342 + md5: 3364591bebd600979606791e1dff7cb6 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/more-itertools?source=hash-mapping + size: 57345 + timestamp: 1725630183289 +- kind: conda + name: msys2-conda-epoch + version: '20160418' + build: '1' + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 + md5: b0309b72560df66f71a9d5e34a5efdfa + purls: [] + size: 3227 + timestamp: 1608166968312 +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 802321 + timestamp: 1724658775723 +- kind: conda + name: ncurses + version: '6.5' + build: hcccb83c_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 + md5: 91d49c85cacd92caa40cf375ef72a25d + depends: + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 924472 + timestamp: 1724658573518 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: nodejs + version: 22.9.0 + build: h08fde81_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + sha256: 736a4738aba32a03401aa25c8f740e4afe4aea02bc06651b59b06f0fdc024fdf + md5: 3771a3a6abe5a8db8910d5ebf144811b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=17 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 14859715 + timestamp: 1726671037225 +- kind: conda + name: nodejs + version: 22.9.0 + build: h57928b3_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + sha256: 6d74f0dbb91eb2049199ba801a3db67965f990aef44084f9ae51a1f70c2996f6 + md5: 6aa54ed90a643a11a005491ff316b1c4 + license: MIT + license_family: MIT + purls: [] + size: 25378221 + timestamp: 1726657153171 +- kind: conda + name: nodejs + version: 22.9.0 + build: h8374285_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + sha256: ff2186a51d389c18423109af3abf6377d4ef5b1370a81ee5f8fb2e036d79cf4f + md5: 6a9739c1ce3f9714b705a655872b5a4d + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21653106 + timestamp: 1726665120657 +- kind: conda + name: nodejs + version: 22.9.0 + build: hf235a45_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 + md5: 40255c9ffb722d614b02ca7aaee6abcb + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21198038 + timestamp: 1726661026112 +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + sha256: 456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0 + requires_python: '>=3.10' +- kind: conda + name: oniguruma + version: 6.9.9 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + sha256: e21b1822736959ba434ebce452ee86844a11d918c8b1c48c71f15e9a932fd571 + md5: 475018b8e0b8720c985a185427f5bf13 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 250005 + timestamp: 1697487236819 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + sha256: 66632aeef5b74e15746161db8fa8b5150a191ab05823d7d2f1587bdf96674c7b + md5: 770c654e0d5bfa3aa1e6ac5440815cda + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 223231 + timestamp: 1697485732214 +- kind: conda + name: oniguruma + version: 6.9.9 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed + md5: 77dab674d16c1525ebe65e67de30de0d + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 246869 + timestamp: 1697485543293 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h0d9d63b_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.2-h0d9d63b_0.conda + sha256: d83375856601bc67c11295b537548a937a6896ede9d0a51d78bf5e921ab07c6f + md5: fd2898519e839d5ceb778343f39a3176 + depends: + - libgcc-ng >=12 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 374964 + timestamp: 1709159226478 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h3d672ee_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda + sha256: dda71cbe094234ab208f3552dec1f4ca6f2e614175d010808d6cb66ecf0bc753 + md5: 7e7099ad94ac3b599808950cec30ad4e + depends: + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 237974 + timestamp: 1709159764160 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h488ebb8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + sha256: 5600a0b82df042bd27d01e4e687187411561dfc11cc05143a08ce29b64bf2af2 + md5: 7f2e286780f072ed750df46dc2631138 + depends: + - libgcc-ng >=12 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 341592 + timestamp: 1709159244431 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h9f1df11_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.2-h9f1df11_0.conda + sha256: 472d6eaffc1996e6af35ec8e91c967f472a536a470079bfa56383cc0dbf4d463 + md5: 5029846003f0bc14414b9128a1f7c84b + depends: + - libcxx >=16 + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 316603 + timestamp: 1709159627299 +- kind: conda + name: openssl + version: 3.3.2 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + sha256: a45c42f3577294e22ac39ddb6ef5a64fd5322e8a6725afefbf4f2b4109340bf9 + md5: 1dc86753693df5e3326bb8a85b74c589 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 8396053 + timestamp: 1725412961673 +- kind: conda + name: openssl + version: 3.3.2 + build: h8359307_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 + md5: 1773ebccdc13ec603356e8ff1db9e958 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2882450 + timestamp: 1725410638874 +- kind: conda + name: openssl + version: 3.3.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + sha256: 4669d26dbf81e4d72093d8260f55d19d57204d82b1d9440be83d11d313b5990c + md5: 9e1e477b3f8ee3789297883faffa708b + depends: + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3428083 + timestamp: 1725412266679 +- kind: conda + name: openssl + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + sha256: cee91036686419f6dd6086902acf7142b4916e1c4ba042e9ca23e151da012b6d + md5: 4d638782050ab6faa27275bed57e9b4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2891789 + timestamp: 1725410790053 +- kind: pypi + name: outcome + version: 1.3.0.post0 + url: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + sha256: e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b + requires_dist: + - attrs>=19.2.0 + requires_python: '>=3.7' +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 50290 + timestamp: 1718189540074 +- kind: conda + name: pathspec + version: 0.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d + md5: 17064acba08d3686f1135b5ec1b32b12 + depends: + - python >=3.7 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/pathspec?source=hash-mapping + size: 41173 + timestamp: 1702250135032 +- kind: conda + name: pcre2 + version: '10.44' + build: h070dd5b_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + sha256: e9f4b912e48514771d477f2ee955f59d4ff4ef799c3d4d16e4d0f335ce91df67 + md5: 94022de9682cb1a0bb18a99cbc3541b3 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 884590 + timestamp: 1723488793100 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 952308 + timestamp: 1723488734144 +- kind: conda + name: pexpect + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pillow + version: 10.4.0 + build: py312h381445a_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py312h381445a_1.conda + sha256: 0b52e708ac4b72e6e1608de517cd4c8e6517dd525e23163a69bf73c7261399fc + md5: c57e54ae4acca720fb3a44bee93cb5b9 + depends: + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.16,<2.0.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 42468305 + timestamp: 1726075694989 +- kind: conda + name: pillow + version: 11.0.0 + build: py312h5ab5af3_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.0.0-py312h5ab5af3_0.conda + sha256: 3cf43a5eb1f67f3a5f3ef1ec3a685f8767019cce24dbe46c4b76fee8a54fbacf + md5: 1c4bdfe659cfdedd372685ce2494e97b + depends: + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41756471 + timestamp: 1729068045876 +- kind: conda + name: pillow + version: 11.0.0 + build: py312h7b63e92_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + sha256: 13a464bea02c0df0199c20ef6bad24a6bc336aaf55bf8d6a133d0fe664463224 + md5: 385f46a4df6f97892503a841121a9acf + depends: + - __glibc >=2.17,<3.0.a0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41948418 + timestamp: 1729065846594 +- kind: conda + name: pillow + version: 11.0.0 + build: py312haf37ca6_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.0.0-py312haf37ca6_0.conda + sha256: 727b4c3faecdb6f6809cf20c5f32d2df4af34e0d5b9146b7588383bcba7990e8 + md5: dc9b51fbd2b6f7fea9b5123458864dbb + depends: + - __osx >=11.0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41737424 + timestamp: 1729065920347 +- kind: conda + name: pip + version: '24.2' + build: pyh8b19718_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + sha256: d820e5358bcb117fa6286e55d4550c60b0332443df62121df839eab2d11c890b + md5: 6c78fbb8ddfd64bcb55b5cbafd2d2c43 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=hash-mapping + size: 1237976 + timestamp: 1724954490262 +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 20625 + timestamp: 1726613611845 +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 8ff8303409ebed76bed4c3d655340320b768817d900ba208b394fdd7d7939a5c + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + sha256: e0e87b0c4dc8fce83c725dd851aec37bc4e882bb225ec8a96bd83cf32d4f1623 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + sha256: 7da2eb51a19c7f3b523e9faa9d98e7af92e52eb983a099979ea79c9668e3cbf7 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + sha256: 8dabb80e62f667fe2640a8b694e26a7b884c0b4803f7514a3954fc849126227b + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 23815 + timestamp: 1713667175451 +- kind: conda + name: pnpm + version: 9.12.2 + build: h6417eb3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + sha256: 0caf7ddacb1d8adb16144a93cfaf7a70bff2f83e22cbaae4d3d91b71f28f9caf + md5: 711bc7fb6b870f4b5b180c181786d710 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + purls: [] + size: 3466596 + timestamp: 1729713864150 +- kind: conda + name: pnpm + version: 9.12.2 + build: haa868a1_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + sha256: ce0c2e4268cd81308b8c069564b9f7885d9c21ddd8b83120f0fabc66d9ab58d3 + md5: c70ffc202c1f5d9223a13a12310c874d + depends: + - nodejs >=22.9.0,<23.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + purls: [] + size: 3319869 + timestamp: 1729714702980 +- kind: conda + name: pnpm + version: 9.12.2 + build: hbf5023e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + sha256: aa25e9d0085be78115c5104ff905f9930d8585901a7a8d7278083f87ff4f6d25 + md5: 15d1e168a06119b34c9bd39187ce2af3 + depends: + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + purls: [] + size: 3516854 + timestamp: 1729713906302 +- kind: conda + name: pnpm + version: 9.12.2 + build: hef028c3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + sha256: 6fd70df2e5e5a25aede2dfadd17530b2e7ecc0c41da43af89efd09dbbda8ca38 + md5: 8a157c984a8e384507438d62275868d5 + depends: + - __osx >=11.0 + - libcxx >=17 + - nodejs >=22.9.0,<23.0a0 + license: MIT + purls: [] + size: 3473615 + timestamp: 1729714099186 +- kind: conda + name: pthread-stubs + version: '0.4' + build: h86ecc28_1002 + build_number: 1002 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + sha256: 977dfb0cb3935d748521dd80262fe7169ab82920afd38ed14b7fee2ea5ec01ba + md5: bb5a90c93e3bac3d5690acf76b4a6386 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8342 + timestamp: 1726803319942 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hb9d3cd8_1002 + build_number: 1002 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8252 + timestamp: 1726802366959 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hcd874cb_1001 + build_number: 1001 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 + sha256: bb5a6ddf1a609a63addd6d7b488b0f58d05092ea84e9203283409bff539e202a + md5: a1f820480193ea83582b13249a7e7bd9 + depends: + - m2w64-gcc-libs + license: MIT + license_family: MIT + purls: [] + size: 6417 + timestamp: 1606147814351 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hd74edd7_1002 + build_number: 1002 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 + md5: 415816daf82e0b23a736a069a75e9da7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 8381 + timestamp: 1726802424786 +- kind: conda + name: ptyprocess + version: 0.7.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 16546 + timestamp: 1609419417991 +- kind: conda + name: pycparser + version: '2.22' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=hash-mapping + size: 105098 + timestamp: 1711811634025 +- kind: pypi + name: pyee + version: 12.0.0 + url: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + sha256: 7b14b74320600049ccc7d0e0b1becd3b4bd0a03c745758225e31a59f4095c990 + requires_dist: + - typing-extensions + - build ; extra == 'dev' + - flake8 ; extra == 'dev' + - flake8-black ; extra == 'dev' + - pytest ; extra == 'dev' + - black ; extra == 'dev' + - isort ; extra == 'dev' + - jupyter-console ; extra == 'dev' + - mkdocs ; extra == 'dev' + - mkdocs-include-markdown-plugin ; extra == 'dev' + - mkdocstrings[python] ; extra == 'dev' + - sphinx ; extra == 'dev' + - toml ; extra == 'dev' + - tox ; extra == 'dev' + - trio ; extra == 'dev' + - twine ; extra == 'dev' + - twisted ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - trio ; python_full_version >= '3.7' and extra == 'dev' + - trio-typing ; python_full_version >= '3.7' and extra == 'dev' + - pytest-asyncio ; python_full_version >= '3.4' and extra == 'dev' + - pytest-trio ; python_full_version >= '3.7' and extra == 'dev' + requires_python: '>=3.8' +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 879295 + timestamp: 1714846885370 +- kind: pypi + name: pyodide-py + version: 0.26.3 + url: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + sha256: b63b6847c8906aa8f3c17df362135d0407aabf1d4b023557aed721d822e347a8 + requires_python: '>=3.12' +- kind: pypi + name: pysocks + version: 1.7.1 + url: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + sha256: 2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: conda + name: pytest + version: 8.3.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + sha256: e99376d0068455712109d233f5790458ff861aeceb458bfda74e353338e4d815 + md5: c03d61f31f38fdb9facf70c29958bf7a + depends: + - colorama + - exceptiongroup >=1.0.0rc8 + - iniconfig + - packaging + - pluggy <2,>=1.5 + - python >=3.8 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 258293 + timestamp: 1725977334143 +- kind: pypi + name: pytest-asyncio + version: 0.24.0 + url: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + sha256: a811296ed596b69bf0b6f3dc40f83bcaf341b155a269052d82efa2b25ac7037b + requires_dist: + - pytest<9,>=8.2 + - sphinx>=5.3 ; extra == 'docs' + - sphinx-rtd-theme>=1.0 ; extra == 'docs' + - coverage>=6.2 ; extra == 'testing' + - hypothesis>=5.7.1 ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: pytest-pyodide + version: 0.58.3 + url: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + sha256: 6425d8ac868090da70337bdef33bd8a082a353a4ecdb89f5371bcf58ac7390e7 + requires_dist: + - hypothesis + - pexpect + - playwright + - pytest + - pytest-asyncio + - selenium + - tblib>=3 + - build ; extra == 'test' + - pytest-cov ; extra == 'test' + - requests ; extra == 'test' + requires_python: '>=3.10' +- kind: conda + name: python + version: 3.12.7 + build: h5d932e8_0_cpython + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + sha256: 25570873d92d4d9490c6db780cc85e6c28bd3ff61dc1ece79f602cf82bc73bc1 + md5: e6cab21bb5787270388939cf41cc5f43 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 13762126 + timestamp: 1728057461028 +- kind: conda + name: python + version: 3.12.7 + build: h739c21a_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef + md5: e0d82e57ebb456077565e6d82cd4a323 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 12975439 + timestamp: 1728057819519 +- kind: conda + name: python + version: 3.12.7 + build: hc5c86c4_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d + md5: 0515111a9cdf69f83278f7c197db9807 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31574780 + timestamp: 1728059777603 +- kind: conda + name: python + version: 3.12.7 + build: hce54a09_0_cpython + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 + md5: 21f1f7c6ccf6b747c5086d2422c230e1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 15987537 + timestamp: 1728057382072 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + sha256: 5ccdad9981753cc4a2d126e356673a21c0cd5b34e209cb8d476a3947d4ad9b39 + md5: 62b20f305498284a07dc6c45fd0e5c87 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6329 + timestamp: 1723823366253 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6278 + timestamp: 1723823099686 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + sha256: 9486662af81a219e96d343449eff242f38d7c5128ced5ce5acf85857265058d6 + md5: e8681f534453af7afab4cd2bc1423eec + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6730 + timestamp: 1723823139725 +- kind: conda + name: pywin32-ctypes + version: 0.2.3 + build: py312h2e8e312_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + sha256: 3e3b97740b4ec2f54debf7bfdbaa9a81a7aabd4549051b926de91d05304c4948 + md5: c5f1cb65c56ec74687801960f8a31eb5 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pywin32-ctypes?source=hash-mapping + size: 57449 + timestamp: 1727282288065 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: readline + version: '8.2' + build: h8fc344f_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 294092 + timestamp: 1679532238805 +- kind: conda + name: readline + version: '8.2' + build: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 250351 + timestamp: 1679532511311 +- kind: conda + name: rich + version: 13.9.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + sha256: ec2a69babe41085a5bcec4ef80b2d5bade2ca399d971f57894dfb96cf59a18d1 + md5: 50dd5529812447e2b4e2a5dd6a6f1655 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rich?source=hash-mapping + size: 185320 + timestamp: 1729623039134 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h7900ff3_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + sha256: c6d5d0bc7fb6cbfa3b8be8f2399a3c1308b3392a4e20bd1a0f29a828fda5ab20 + md5: 4840da9db2808db946a0d979603c6de4 + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31601 + timestamp: 1725915741329 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h8025657_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + sha256: fd6bc45ba0c6bb097ad98037ad8d2ddf2449f28c2eedf57dfff54eeceefe90c6 + md5: 4ae02e3717828f5e92dfae068845afdd + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31394 + timestamp: 1725917363210 +- kind: pypi + name: selenium + version: 4.25.0 + url: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + sha256: 3798d2d12b4a570bc5790163ba57fef10b2afee958bf1d80f2a3cf07c4141f33 + requires_dist: + - urllib3[socks]>=1.26,<3 + - trio~=0.17 + - trio-websocket~=0.9 + - certifi>=2021.10.8 + - typing-extensions~=4.9 + - websocket-client~=1.8 + requires_python: '>=3.8' +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 777462 + timestamp: 1727249510532 +- kind: conda + name: shellingham + version: 1.5.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/shellingham?source=hash-mapping + size: 14568 + timestamp: 1698144516278 +- kind: conda + name: sniffio + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping + size: 15064 + timestamp: 1708953086199 +- kind: pypi + name: sortedcontainers + version: 2.4.0 + url: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- kind: pypi + name: tblib + version: 3.0.0 + url: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + sha256: 80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129 + requires_python: '>=3.8' +- kind: conda + name: tk + version: 8.6.13 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3351802 + timestamp: 1695506242997 +- kind: conda + name: tk + version: 8.6.13 + build: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3145523 + timestamp: 1699202432999 +- kind: conda + name: tk + version: 8.6.13 + build: h5226925_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: fc048363eb8f03cd1737600a5d08aafe + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: TCL + license_family: BSD + purls: [] + size: 3503410 + timestamp: 1699202577803 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tomli + version: 2.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 18203 + timestamp: 1727974767524 +- kind: conda + name: tomli-w + version: 1.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + sha256: 25b88bb2c4e79be642d8e5b5738781404055cd596403a20511e6fa30f0c71585 + md5: 2c5eb5b3a0fd2c4787d8162f57da2a20 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli-w?source=hash-mapping + size: 12323 + timestamp: 1728405537678 +- kind: conda + name: tomlkit + version: 0.13.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + sha256: 2ccfe8dafdc1f1af944bca6bdf28fa97b5fa6125d84b8895a4e918a020853c12 + md5: 0062a5f3347733f67b0f33ca48cc21dd + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomlkit?source=hash-mapping + size: 37279 + timestamp: 1723631592742 +- kind: pypi + name: trio + version: 0.27.0 + url: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + sha256: 68eabbcf8f457d925df62da780eff15ff5dc68fd6b367e2dde59f7aaf2a0b884 + requires_dist: + - attrs>=23.2.0 + - sortedcontainers + - idna + - outcome + - sniffio>=1.3.0 + - cffi>=1.14 ; implementation_name != 'pypy' and os_name == 'nt' + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.8' +- kind: pypi + name: trio-websocket + version: 0.11.1 + url: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + sha256: 520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638 + requires_dist: + - trio>=0.11 + - wsproto>=0.14 + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.7' +- kind: conda + name: trove-classifiers + version: 2024.10.21.16 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + sha256: 591e4ffdc95660b9e596c15b65cad35a70b36235f02dbd089ccc198dd5af0e71 + md5: 501f6d3288160a31d99a2f1321e77393 + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/trove-classifiers?source=hash-mapping + size: 18429 + timestamp: 1729552033760 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + purls: [] + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: ucrt + version: 10.0.22621.0 + build: h57928b3_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 + constrains: + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + purls: [] + size: 559710 + timestamp: 1728377334097 +- kind: pypi + name: urllib3 + version: 2.2.3 + url: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + sha256: ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2<5,>=4 ; extra == 'h2' + - pysocks!=1.5.7,<2.0,>=1.5.6 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- kind: conda + name: userpath + version: 1.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + sha256: c8cbddd625340e1b00b53bafabc764526ee85f7ddb91018424bab0eea057796d + md5: 5bf074c9253a3bf914becfc50757406f + depends: + - click + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/userpath?source=hash-mapping + size: 17423 + timestamp: 1632758637093 +- kind: conda + name: uv + version: 0.4.25 + build: h0f3a69f_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.25-h0f3a69f_0.conda + sha256: 66ec8fc80cebbabef8a43a8a420f6540399200dcc0c9195db0bdda2836eee7be + md5: f820dec118406e896be62db8c53151ad + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 9403871 + timestamp: 1729526779016 +- kind: conda + name: uv + version: 0.4.25 + build: h2016286_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.25-h2016286_0.conda + sha256: e871051605de94afdec425d66bd06c047e5425ebb5e264c731b032e13f08f971 + md5: 8c51a22c12f76e66a96371e066952ba7 + depends: + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 8821575 + timestamp: 1729527016183 +- kind: conda + name: uv + version: 0.4.25 + build: h41fe3af_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.25-h41fe3af_0.conda + sha256: 365063aa057bdb0f755449bb1f9490462c191109071a4ebb6b9648587558109e + md5: f736f9177b89edfccfe67650cbd05839 + depends: + - __osx >=11.0 + - libcxx >=17 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR MIT + purls: [] + size: 8475727 + timestamp: 1729527780770 +- kind: conda + name: uv + version: 0.4.25 + build: ha08ef0e_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.25-ha08ef0e_0.conda + sha256: 74ae665e93b8ed325ea30864c2d341ee57c1c4878dba3bf2781828b1be58031d + md5: 2162d0190d22bbf556365c076f60739c + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 OR MIT + purls: [] + size: 10356663 + timestamp: 1729527565706 +- kind: conda + name: vc + version: '14.3' + build: ha32ba9b_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 + depends: + - vc14_runtime >=14.38.33135 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17447 + timestamp: 1728400826998 +- kind: conda + name: vc14_runtime + version: 14.40.33810 + build: hcc2c482_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + purls: [] + size: 750719 + timestamp: 1728401055788 +- kind: conda + name: virtualenv + version: 20.27.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + sha256: 18bae5ff9f02793ca56d295f0a5f1d4443623ee3be09a6805eb7d4b18245968c + md5: a6ed1227ba6ec37cfc2b25e6512f729f + depends: + - distlib <1,>=0.3.7 + - filelock <4,>=3.12.2 + - platformdirs <5,>=3.9.1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/virtualenv?source=hash-mapping + size: 2952166 + timestamp: 1729243861344 +- kind: conda + name: vs2015_runtime + version: 14.40.33810 + build: h3bf8584_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 + depends: + - vc14_runtime >=14.40.33810 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17453 + timestamp: 1728400827536 +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + sha256: f8a2a213b9179965db2d2eedececd69a37e287e902330509afae51c71a3a6842 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + sha256: b4364e14d44e3b7afe6a40bf608e9d0d2c40b09dece441d20f4f6e31906b729c + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + sha256: a07445073cf36a6e5d1dc28246a897dcbdaa537ba8be8805be65422ecca297eb + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + sha256: 5bdf1214ee3ee78a4a8a92da339f4c4c8c109e65af881b37f4adfc05d02af426 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: websocket-client + version: 1.8.0 + url: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + sha256: 17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526 + requires_dist: + - sphinx>=6.0 ; extra == 'docs' + - sphinx-rtd-theme>=1.1.0 ; extra == 'docs' + - myst-parser>=2.0.0 ; extra == 'docs' + - python-socks ; extra == 'optional' + - wsaccel ; extra == 'optional' + - websockets ; extra == 'test' + requires_python: '>=3.8' +- kind: conda + name: wheel + version: 0.44.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping + size: 58585 + timestamp: 1722797131787 +- kind: pypi + name: wsproto + version: 1.2.0 + url: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + sha256: b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736 + requires_dist: + - h11<1,>=0.9.0 + requires_python: '>=3.7.0' +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: h86ecc28_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.11-h86ecc28_1.conda + sha256: a00c4c6054209c84fb460c5e4ae7193c335a9ee1851645c9ad59312438e853f7 + md5: c5f72a733c461aa7785518d29b997cc8 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 15690 + timestamp: 1727036097294 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + sha256: 532a046fee0b3a402db867b6ec55c84ba4cdedb91d817147c8feeae9766be3d6 + md5: 77cbc488235ebbaab2b6e912d3934bae + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 14679 + timestamp: 1727034741045 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hcd874cb_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda + sha256: 8c5b976e3b36001bdefdb41fb70415f9c07eff631f1f0155f3225a7649320e77 + md5: c46ba8712093cb0114404ae8a7582e1a + depends: + - m2w64-gcc-libs + - m2w64-gcc-libs-core + license: MIT + license_family: MIT + purls: [] + size: 51297 + timestamp: 1684638355740 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hd74edd7_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + sha256: 7113618021cf6c80831a429b2ebb9d639f3c43cf7fe2257d235dc6ae0ab43289 + md5: 7e0125f8fb619620a0011dc9297e2493 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 13515 + timestamp: 1727034783560 +- kind: conda + name: xorg-libxdmcp + version: 1.1.3 + build: hcd874cb_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 + sha256: f51205d33c07d744ec177243e5d9b874002910c731954f2c8da82459be462b93 + md5: 46878ebb6b9cbd8afcf8088d7ef00ece + depends: + - m2w64-gcc-libs + license: MIT + license_family: MIT + purls: [] + size: 67908 + timestamp: 1610072296570 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: h57736b2_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda + sha256: efcc150da5926cf244f757b8376d96a4db78bc15b8d90ca9f56ac6e75755971f + md5: 25a5a7b797fe6e084e04ffe2db02fc62 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 20615 + timestamp: 1727796660574 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee + md5: 8035c64cb77ed555e3f150b7b3972480 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 19901 + timestamp: 1727794976192 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + sha256: 9939a166d780700d81023546759102b33fdc2c5f11ef09f5f66c77210fd334c8 + md5: 77c447f48cab5d3a15ac224edb86a968 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 18487 + timestamp: 1727795205022 +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: xz + version: 5.2.6 + build: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 235693 + timestamp: 1660346961024 +- kind: conda + name: xz + version: 5.2.6 + build: h8d14728_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 + md5: 515d77642eaa3639413c6b1bc3f94219 + depends: + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 217804 + timestamp: 1660346976440 +- kind: conda + name: xz + version: 5.2.6 + build: h9cdd2b7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 + md5: 83baad393a31d59c20b63ba4da6592df + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 440555 + timestamp: 1660348056328 +- kind: conda + name: zipp + version: 3.20.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 21409 + timestamp: 1726248679175 +- kind: conda + name: zlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + purls: [] + size: 77606 + timestamp: 1727963209370 +- kind: conda + name: zlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + sha256: b4f649aa3ecdae384d5dad7074e198bff120edd3dfb816588e31738fc6d627b1 + md5: bc230abb5d21b63ff4799b0e75204783 + depends: + - libgcc >=13 + - libzlib 1.3.1 h86ecc28_2 + license: Zlib + license_family: Other + purls: [] + size: 95582 + timestamp: 1727963203597 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + purls: [] + size: 92286 + timestamp: 1727963153079 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 330788 + timestamp: 1725305806565 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h7606c53_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + sha256: 3e0c718aa18dcac7f080844dbe0aea41a9cea75083019ce02e8a784926239826 + md5: a92cc3435b2fd6f51463f5a4db5c50b1 + depends: + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 320624 + timestamp: 1725305934189 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hb698573_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + sha256: 2681c2a249752bdc7978e59ee2f34fcdfcbfda80029b84b8e5fec8dbc9e3af25 + md5: ffcb8e97e62af42075e0e5f46bb9856e + depends: + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 392496 + timestamp: 1725305808244 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hef9b889_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b + md5: 8b7069e9792ee4e5b4919a7a306d2e67 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 419552 + timestamp: 1725305670210 +- kind: conda + name: zstd + version: 1.5.6 + build: h02f22dd_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + sha256: 484f9d0722c77685ae379fbff3ccd662af9ead7e59eb39cd6d0c677cdf25ff6c + md5: be8d5f8cf21aed237b8b182ea86b3dd6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 539937 + timestamp: 1714723130243 +- kind: conda + name: zstd + version: 1.5.6 + build: h0ea2cb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + md5: 9a17230f95733c04dc40a2b1e5491d74 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 349143 + timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 554846 + timestamp: 1714722996770 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 405089 + timestamp: 1714723101397 diff --git a/packages/dicom/pixi.toml b/packages/dicom/pixi.toml new file mode 100644 index 000000000..2ca77ea97 --- /dev/null +++ b/packages/dicom/pixi.toml @@ -0,0 +1,141 @@ +[project] +authors = ["Matt McCormick "] +channels = ["conda-forge"] +description = "Read and write files and images related to DICOM file format." +name = "dicom" +platforms = ["win-64", "linux-64", "linux-aarch64", "osx-arm64"] +version = "0.1.0" + +[tasks] + +[dependencies] +python = "3.12.*" +pnpm = ">=9.12.1,<10" +hatch = ">=1.13.0,<2" +pip = ">=24.2,<25" + +[target.win-64.dependencies] +m2w64-jq = ">=1.6.0,<2" + +[target.unix.dependencies] +jq = ">=1.7.1,<2" + +[tasks.version-sync-typescript] +cmd = '''version=$(cat package.json | jq .version) && + jq ".version = $version" typescript/package.json > typescript/package.json.tmp && + mv typescript/package.json.tmp typescript/package.json''' + +[tasks.version-sync-python-wasi] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + echo "version is $version" && + hatch version $version''' +cwd = "python/itkwasm-dicom-wasi" + +[tasks.version-sync-python-emscripten] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-dicom-emscripten" + +[tasks.version-sync-python-dispatch] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-dicom" + +[tasks.version-sync] +depends-on = ["version-sync-typescript", "version-sync-python-wasi", "version-sync-python-emscripten", "version-sync-python-dispatch"] +description = "Synchronize package versions" + +[tasks.publish-typescript] +cmd = "pnpm publish --filter \"{typescript}\"" + +[tasks.publish-python-user-check] +cmd = "if [ -n \"$HATCH_INDEX_USER\"]; then echo \"HATCH_INDEX_USER is set\"; else echo \"HATCH_INDEX_USER is not set\"; exit 1; fi" + +[tasks.publish-python-wasi] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-dicom-wasi" + +[tasks.publish-python-emscripten] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-dicom-emscripten" + +[tasks.publish-python-dispatch] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-dicom" + +[tasks.publish] +depends-on = ["publish-typescript", "publish-python-wasi", "publish-python-emscripten", "publish-python-dispatch"] +description = "Synchronize package versions" + +[feature.python.dependencies] +pytest = ">=8.3.3,<9" +pillow = ">=10.4.0,<12" + +[feature.python.pypi-dependencies] +itkwasm-dicom-wasi = { path = "python/itkwasm-dicom-wasi", editable = true } +itkwasm-dicom = { path = "python/itkwasm-dicom", editable = true } +pyodide-py = ">=0.26.3, <0.27" +pytest-pyodide = ">=0.58.3, <0.59" +itk-webassemblyinterface = ">=1.0b175, <2" +itkwasm-image-io = ">=1.3.0, <2" + +[feature.python.tasks.test-wasi] +cmd = "pytest" +cwd = "python/itkwasm-dicom-wasi" +description = "Run tests for itkwasm-dicom-wasi" + +[feature.python.tasks.download-pyodide] +cmd = '''curl -L https://github.com/pyodide/pyodide/releases/download/0.26.3/pyodide-0.26.3.tar.bz2 -o pyodide.tar.bz2 && + tar xjf pyodide.tar.bz2 && + rm pyodide.tar.bz2''' +outputs = ["pyodide"] +description = "Download Pyodide" + +[feature.python.tasks.test-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-dicom-emscripten" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-dicom-emscripten" + +[feature.python.tasks.serve-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-dicom-emscripten" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-dicom-emscripten for development" + +[feature.python.tasks.test-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + cp ../itkwasm-dicom-emscripten/dist/pyodide/itkwasm_dicom_emscripten*.whl ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-dicom" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-dicom" + +[feature.python.tasks.serve-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-dicom" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-dicom for development" + +[feature.python.tasks.test-python] +depends-on = ["test-wasi", "test-emscripten", "test-dispatch"] +description = "Run tests for all Python packages" + +[environments] +python = ["python"] diff --git a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py index 6f272d9ec..ed46378ac 100644 --- a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py +++ b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIFN0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIga3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlTdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEZ0PSI3LjIuMiIsUkE9RnQ7dmFyIGJ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sYj1idDt2YXIgUnQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFc9UnQ7ZnVuY3Rpb24gVXQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIGIuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBiLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIGIuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIGIuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBiLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBiLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgYi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBiLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIFcuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgVy5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIEc9VXQ7dmFyIE50PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sQmU9TnQ7dmFyIFVBPWNsYXNze2RpbWVuc2lvbjtjb21wb25lbnRUeXBlO3BpeGVsVHlwZTtjb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PWIuVUludDgscj1CZS5TY2FsYXIsbj0xKXt0aGlzLmRpbWVuc2lvbj1lLHRoaXMuY29tcG9uZW50VHlwZT10LHRoaXMucGl4ZWxUeXBlPXIsdGhpcy5jb21wb25lbnRzPW59fSx1ZT1VQTtmdW5jdGlvbiBUdChBLGUsdCxyLG4pe0Fbcit0KmVdPW59dmFyIGNlPVR0O3ZhciBOQT1jbGFzc3tpbWFnZVR5cGU7bmFtZT0iSW1hZ2UiO29yaWdpbjtzcGFjaW5nO2RpcmVjdGlvbjtzaXplO21ldGFkYXRhO2RhdGE7Y29uc3RydWN0b3IoZT1uZXcgdWUpe3RoaXMuaW1hZ2VUeXBlPWU7bGV0IHQ9ZS5kaW1lbnNpb247dGhpcy5vcmlnaW49bmV3IEFycmF5KHQpLHRoaXMub3JpZ2luLmZpbGwoMCksdGhpcy5zcGFjaW5nPW5ldyBBcnJheSh0KSx0aGlzLnNwYWNpbmcuZmlsbCgxKSx0aGlzLmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KHQqdCksdGhpcy5kaXJlY3Rpb24uZmlsbCgwKTtmb3IobGV0IHI9MDtyPHQ7cisrKWNlKHRoaXMuZGlyZWN0aW9uLHQscixyLDEpO3RoaXMuc2l6ZT1uZXcgQXJyYXkodCksdGhpcy5zaXplLmZpbGwoMCksdGhpcy5tZXRhZGF0YT1uZXcgTWFwLHRoaXMuZGF0YT1udWxsfX0sQ2U9TkE7ZnVuY3Rpb24gR3QoQSl7aWYoQS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgZT1BWzBdO2lmKGUuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgQ2UoZS5pbWFnZVR5cGUpO3Qub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLHQuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyk7bGV0IHI9dC5pbWFnZVR5cGUuZGltZW5zaW9uO3QuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCk7bGV0IG49ci0xO3Quc2l6ZT1BcnJheS5mcm9tKGUuc2l6ZSk7bGV0IGk9QS5yZWR1Y2UoKHMsYSk9PnMrYS5zaXplW25dLDApO3Quc2l6ZVtuXT1pO2xldCBvPXQuc2l6ZS5yZWR1Y2UoKHMsYSk9PnMqYSwxKSp0LmltYWdlVHlwZS5jb21wb25lbnRzLEk9ZS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgSShvKTtsZXQgYz10LmltYWdlVHlwZS5jb21wb25lbnRzO2ZvcihsZXQgcz0wO3M8dC5zaXplLmxlbmd0aC0xO3MrKyljKj10LnNpemVbc107bGV0IEI9MDtpZih0LmRhdGEhPW51bGwpZm9yKGxldCBzPTA7czxBLmxlbmd0aDtzKyspdC5kYXRhLnNldChBW3NdLmRhdGEsYypCKSxCKz1BW3NdLnNpemVbbl07ZWxzZSB0aHJvdyBFcnJvcigiQ291bGQgbm90IGNyZWF0ZSByZXN1bHQgaW1hZ2UgZGF0YS4iKTtyZXR1cm4gdH12YXIgVEE9R3Q7dmFyIEdBPWNsYXNze2Zjbjt3b3JrZXJRdWV1ZTtydW5JbmZvO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mY249dCx0aGlzLndvcmtlclF1ZXVlPW5ldyBBcnJheShlKSx0aGlzLndvcmtlclF1ZXVlLmZpbGwobnVsbCksdGhpcy5ydW5JbmZvPVtdfXJ1blRhc2tzKGUsdD1udWxsKXtsZXQgcj17dGFza1F1ZXVlOltdLHJlc3VsdHM6W10sYWRkaW5nVGFza3M6ITEscG9zdHBvbmVkOiExLHJ1bm5pbmdXb3JrZXJzOjAsaW5kZXg6MCxjb21wbGV0ZWRUYXNrczowLHByb2dyZXNzQ2FsbGJhY2s6dCxjYW5jZWxlZDohMX07cmV0dXJuIHRoaXMucnVuSW5mby5wdXNoKHIpLHIuaW5kZXg9dGhpcy5ydW5JbmZvLmxlbmd0aC0xLHtwcm9taXNlOm5ldyBQcm9taXNlKChuLGkpPT57ci5yZXNvbHZlPW4sci5yZWplY3Q9aSxyLnJlc3VsdHM9bmV3IEFycmF5KGUubGVuZ3RoKSxyLmNvbXBsZXRlZFRhc2tzPTAsci5hZGRpbmdUYXNrcz0hMCxlLmZvckVhY2goKG8sSSk9Pnt0aGlzLmFkZFRhc2soci5pbmRleCxJLG8pfSksci5hZGRpbmdUYXNrcz0hMX0pLHJ1bklkOnIuaW5kZXh9fXRlcm1pbmF0ZVdvcmtlcnMoKXtmb3IobGV0IGU9MDtlPHRoaXMud29ya2VyUXVldWUubGVuZ3RoO2UrKyl7bGV0IHQ9dGhpcy53b3JrZXJRdWV1ZVtlXTt0Py50ZXJtaW5hdGUoKSx0aGlzLndvcmtlclF1ZXVlW2VdPW51bGx9fWNhbmNlbChlKXtsZXQgdD10aGlzLnJ1bkluZm9bZV07dCE9bnVsbCYmKHQuY2FuY2VsZWQ9ITApfWFkZFRhc2soZSx0LHIpe2xldCBuPXRoaXMucnVuSW5mb1tlXTtpZihuPy5jYW5jZWxlZD09PSEwKXtuLnJlamVjdCgiUmVtYWluaW5nIHRhc2tzIGNhbmNlbGVkIiksdGhpcy5jbGVhclRhc2sobi5pbmRleCk7cmV0dXJufWlmKHRoaXMud29ya2VyUXVldWUubGVuZ3RoPjApe2xldCBpPXRoaXMud29ya2VyUXVldWUucG9wKCk7bi5ydW5uaW5nV29ya2VycysrLHJbci5sZW5ndGgtMV0ud2ViV29ya2VyPWksdGhpcy5mY24oLi4ucikudGhlbigoe3dlYldvcmtlcjpvLC4uLkl9KT0+e2lmKHRoaXMud29ya2VyUXVldWUucHVzaChvKSx0aGlzLnJ1bkluZm9bZV0hPT1udWxsKXtpZihuLnJ1bm5pbmdXb3JrZXJzLS0sbi5yZXN1bHRzW3RdPUksbi5jb21wbGV0ZWRUYXNrcysrLG4ucHJvZ3Jlc3NDYWxsYmFjayE9bnVsbCYmbi5wcm9ncmVzc0NhbGxiYWNrKG4uY29tcGxldGVkVGFza3Msbi5yZXN1bHRzLmxlbmd0aCksbi50YXNrUXVldWUubGVuZ3RoPjApe2xldCBjPW4udGFza1F1ZXVlLnNoaWZ0KCk7dGhpcy5hZGRUYXNrKGUsY1swXSxjWzFdKX1lbHNlIGlmKCFuLmFkZGluZ1Rhc2tzJiZuLnJ1bm5pbmdXb3JrZXJzPT09MCl7bGV0IGM9bi5yZXN1bHRzO24ucmVzb2x2ZShjKSx0aGlzLmNsZWFyVGFzayhuLmluZGV4KX19fSkuY2F0Y2gobz0+e24ucmVqZWN0KG8pLHRoaXMuY2xlYXJUYXNrKG4uaW5kZXgpfSl9ZWxzZSBuLnJ1bm5pbmdXb3JrZXJzIT09MHx8bi5wb3N0cG9uZWQ/bi50YXNrUXVldWUucHVzaChbdCxyXSk6KG4ucG9zdHBvbmVkPSEwLHNldFRpbWVvdXQoKCk9PntuLnBvc3Rwb25lZD0hMSx0aGlzLmFkZFRhc2sobi5pbmRleCx0LHIpfSw1MCkpfWNsZWFyVGFzayhlKXt0aGlzLnJ1bkluZm9bZV0ucmVzdWx0cz1bXSx0aGlzLnJ1bkluZm9bZV0udGFza1F1ZXVlPVtdLHRoaXMucnVuSW5mb1tlXS5wcm9ncmVzc0NhbGxiYWNrPW51bGwsdGhpcy5ydW5JbmZvW2VdLmNhbmNlbGVkPW51bGwsdGhpcy5ydW5JbmZvW2VdLnJlamVjdD0oKT0+e30sdGhpcy5ydW5JbmZvW2VdLnJlc29sdmU9KCk9Pnt9fX0sT0E9R0E7dmFyIE90PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sRT1PdDt2YXIgRWU9U3ltYm9sKCJDb21saW5rLnByb3h5IiksTHQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IikseEE9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLExBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxJQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIikscGU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsUHQ9e2NhbkhhbmRsZTpBPT5wZShBKSYmQVtFZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gbWUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLEpBKEEpfX0seHQ9e2NhbkhhbmRsZTpBPT5wZShBKSYmSUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LFFlPW5ldyBNYXAoW1sicHJveHkiLFB0XSxbInRocm93Iix4dF1dKTtmdW5jdGlvbiBKdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbWUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG4pe2lmKCFufHwhbi5kYXRhKXJldHVybjtpZighSnQodCxuLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7bi5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6aSx0eXBlOm8scGF0aDpJfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxuLmRhdGEpLGM9KG4uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoSCksQjt0cnl7bGV0IHM9SS5zbGljZSgwLC0xKS5yZWR1Y2UoKGYsZyk9PmZbZ10sQSksYT1JLnJlZHVjZSgoZixnKT0+ZltnXSxBKTtzd2l0Y2gobyl7Y2FzZSJHRVQiOkI9YTticmVhaztjYXNlIlNFVCI6c1tJLnNsaWNlKC0xKVswXV09SChuLmRhdGEudmFsdWUpLEI9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6Qj1hLmFwcGx5KHMsYyk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgYSguLi5jKTtCPXF0KGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpnfT1uZXcgTWVzc2FnZUNoYW5uZWw7bWUoQSxnKSxCPUhBKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOkI9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChzKXtCPXt2YWx1ZTpzLFtJQV06MH19UHJvbWlzZS5yZXNvbHZlKEIpLmNhdGNoKHM9Pih7dmFsdWU6cyxbSUFdOjB9KSkudGhlbihzPT57bGV0W2EsZl09QkEocyk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOml9KSxmKSxvPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxkZShlKSxMQSBpbiBBJiZ0eXBlb2YgQVtMQV09PSJmdW5jdGlvbiImJkFbTEFdKCkpfSkuY2F0Y2gocz0+e2xldFthLGZdPUJBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbSUFdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6aX0pLGYpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gSHQoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gZGUoQSl7SHQoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBKQShBLGUpe3JldHVybiBQQShBLFtdLGUpfWZ1bmN0aW9uIHNBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBoZShBKXtyZXR1cm4gWShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntkZShBKX0pfXZhciBnQT1uZXcgV2Vha01hcCxsQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oZ0EuZ2V0KEEpfHwwKS0xO2dBLnNldChBLGUpLGU9PT0wJiZoZShBKX0pO2Z1bmN0aW9uIE10KEEsZSl7bGV0IHQ9KGdBLmdldChlKXx8MCkrMTtnQS5zZXQoZSx0KSxsQSYmbEEucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIFd0KEEpe2xBJiZsQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIFBBKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbj1uZXcgUHJveHkodCx7Z2V0KGksbyl7aWYoc0Eociksbz09PXhBKXJldHVybigpPT57V3QobiksaGUoQSkscj0hMH07aWYobz09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5ufTtsZXQgST1ZKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChjPT5jLnRvU3RyaW5nKCkpfSkudGhlbihIKTtyZXR1cm4gSS50aGVuLmJpbmQoSSl9cmV0dXJuIFBBKEEsWy4uLmUsb10pfSxzZXQoaSxvLEkpe3NBKHIpO2xldFtjLEJdPUJBKEkpO3JldHVybiBZKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxvXS5tYXAocz0+cy50b1N0cmluZygpKSx2YWx1ZTpjfSxCKS50aGVuKEgpfSxhcHBseShpLG8sSSl7c0Eocik7bGV0IGM9ZVtlLmxlbmd0aC0xXTtpZihjPT09THQpcmV0dXJuIFkoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihIKTtpZihjPT09ImJpbmQiKXJldHVybiBQQShBLGUuc2xpY2UoMCwtMSkpO2xldFtCLHNdPWZlKEkpO3JldHVybiBZKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkJ9LHMpLnRoZW4oSCl9LGNvbnN0cnVjdChpLG8pe3NBKHIpO2xldFtJLGNdPWZlKG8pO3JldHVybiBZKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChCPT5CLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpJfSxjKS50aGVuKEgpfX0pO3JldHVybiBNdChuLEEpLG59ZnVuY3Rpb24gWXQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gZmUoQSl7bGV0IGU9QS5tYXAoQkEpO3JldHVybltlLm1hcCh0PT50WzBdKSxZdChlLm1hcCh0PT50WzFdKSldfXZhciB5ZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBIQShBLGUpe3JldHVybiB5ZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIHF0KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tFZV06ITB9KX1mdW5jdGlvbiBCQShBKXtmb3IobGV0W2UsdF1vZiBRZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isbl09dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sbl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LHllLmdldChBKXx8W11dfWZ1bmN0aW9uIEgoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gUWUuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBZKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBuPUt0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKG8peyFvLmRhdGF8fCFvLmRhdGEuaWR8fG8uZGF0YS5pZCE9PW58fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLHIoby5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpufSxlKSx0KX0pfWZ1bmN0aW9uIEt0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBYKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6dnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOllBfT1PYmplY3QsY0E9KEE9PmU9PntsZXQgdD12dC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTz1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+Y0EoZSk9PT1BKSxDQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6cX09QXJyYXksJD1DQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24ganQoQSl7cmV0dXJuIEEhPT1udWxsJiYhJChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiEkKEEuY29uc3RydWN0b3IpJiZUKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBrZT1PKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIF90KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYma2UoQS5idWZmZXIpLGV9dmFyIHp0PUNBKCJzdHJpbmciKSxUPUNBKCJmdW5jdGlvbiIpLEZlPUNBKCJudW1iZXIiKSxmQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLFZ0PUE9PkE9PT0hMHx8QT09PSExLHVBPUE9PntpZihjQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPVlBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LFp0PU8oIkRhdGUiKSxYdD1PKCJGaWxlIiksJHQ9TygiQmxvYiIpLEFyPU8oIkZpbGVMaXN0IiksZXI9QT0+ZkEoQSkmJlQoQS5waXBlKSx0cj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8VChBLmFwcGVuZCkmJigoZT1jQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJlQoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0scnI9TygiVVJMU2VhcmNoUGFyYW1zIiksaXI9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uIEFBKEEsZSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IHIsbjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSkscShBKSlmb3Iocj0wLG49QS5sZW5ndGg7cjxuO3IrKyllLmNhbGwobnVsbCxBW3JdLHIsQSk7ZWxzZXtsZXQgaT10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG89aS5sZW5ndGgsSTtmb3Iocj0wO3I8bztyKyspST1pW3JdLGUuY2FsbChudWxsLEFbSV0sSSxBKX19ZnVuY3Rpb24gYmUoQSxlKXtlPWUudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxyPXQubGVuZ3RoLG47Zm9yKDtyLS0gPjA7KWlmKG49dFtyXSxlPT09bi50b0xvd2VyQ2FzZSgpKXJldHVybiBuO3JldHVybiBudWxsfXZhciBSZT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLFVlPUE9PiEkKEEpJiZBIT09UmU7ZnVuY3Rpb24gV0EoKXtsZXR7Y2FzZWxlc3M6QX09VWUodGhpcykmJnRoaXN8fHt9LGU9e30sdD0ocixuKT0+e2xldCBpPUEmJmJlKGUsbil8fG47dUEoZVtpXSkmJnVBKHIpP2VbaV09V0EoZVtpXSxyKTp1QShyKT9lW2ldPVdBKHt9LHIpOnEocik/ZVtpXT1yLnNsaWNlKCk6ZVtpXT1yfTtmb3IobGV0IHI9MCxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKylhcmd1bWVudHNbcl0mJkFBKGFyZ3VtZW50c1tyXSx0KTtyZXR1cm4gZX12YXIgbnI9KEEsZSx0LHthbGxPd25LZXlzOnJ9PXt9KT0+KEFBKGUsKG4saSk9Pnt0JiZUKG4pP0FbaV09WChuLHQpOkFbaV09bn0se2FsbE93bktleXM6cn0pLEEpLG9yPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksYXI9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sc3I9KEEsZSx0LHIpPT57bGV0IG4saSxvLEk9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLGk9bi5sZW5ndGg7aS0tID4wOylvPW5baV0sKCFyfHxyKG8sQSxlKSkmJiFJW29dJiYoZVtvXT1BW29dLElbb109ITApO0E9dCE9PSExJiZZQShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0sSXI9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxncj1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYocShBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighRmUoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LGxyPShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZZQShVaW50OEFycmF5KSksQnI9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG47Zm9yKDsobj1yLm5leHQoKSkmJiFuLmRvbmU7KXtsZXQgaT1uLnZhbHVlO2UuY2FsbChBLGlbMF0saVsxXSl9fSx1cj0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxjcj1PKCJIVE1MRm9ybUVsZW1lbnQiKSxDcj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbil7cmV0dXJuIHIudG9VcHBlckNhc2UoKStufSksRGU9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLGZyPU8oIlJlZ0V4cCIpLE5lPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTtBQSh0LChuLGkpPT57bGV0IG87KG89ZShuLGksQSkpIT09ITEmJihyW2ldPW98fG4pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxyKX0sRXI9QT0+e05lKEEsKGUsdCk9PntpZihUKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YodCkhPT0tMSlyZXR1cm4hMTtsZXQgcj1BW3RdO2lmKFQocikpe2lmKGUuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gZSl7ZS53cml0YWJsZT0hMTtyZXR1cm59ZS5zZXR8fChlLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIit0KyInIil9KX19KX0scHI9KEEsZSk9PntsZXQgdD17fSxyPW49PntuLmZvckVhY2goaT0+e3RbaV09ITB9KX07cmV0dXJuIHEoQSk/cihBKTpyKFN0cmluZyhBKS5zcGxpdChlKSksdH0sUXI9KCk9Pnt9LG1yPShBLGUpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTplKSxNQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLFNlPSIwMTIzNDU2Nzg5IixUZT17RElHSVQ6U2UsQUxQSEE6TUEsQUxQSEFfRElHSVQ6TUErTUEudG9VcHBlckNhc2UoKStTZX0sZHI9KEE9MTYsZT1UZS5BTFBIQV9ESUdJVCk9PntsZXQgdD0iIix7bGVuZ3RoOnJ9PWU7Zm9yKDtBLS07KXQrPWVbTWF0aC5yYW5kb20oKSpyfDBdO3JldHVybiB0fTtmdW5jdGlvbiBocihBKXtyZXR1cm4hIShBJiZUKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgeXI9QT0+e2xldCBlPW5ldyBBcnJheSgxMCksdD0ocixuKT0+e2lmKGZBKHIpKXtpZihlLmluZGV4T2Yocik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiByKSl7ZVtuXT1yO2xldCBpPXEocik/W106e307cmV0dXJuIEFBKHIsKG8sSSk9PntsZXQgYz10KG8sbisxKTshJChjKSYmKGlbSV09Yyl9KSxlW25dPXZvaWQgMCxpfX1yZXR1cm4gcn07cmV0dXJuIHQoQSwwKX0sd3I9TygiQXN5bmNGdW5jdGlvbiIpLERyPUE9PkEmJihmQShBKXx8VChBKSkmJlQoQS50aGVuKSYmVChBLmNhdGNoKSxsPXtpc0FycmF5OnEsaXNBcnJheUJ1ZmZlcjprZSxpc0J1ZmZlcjpqdCxpc0Zvcm1EYXRhOnRyLGlzQXJyYXlCdWZmZXJWaWV3Ol90LGlzU3RyaW5nOnp0LGlzTnVtYmVyOkZlLGlzQm9vbGVhbjpWdCxpc09iamVjdDpmQSxpc1BsYWluT2JqZWN0OnVBLGlzVW5kZWZpbmVkOiQsaXNEYXRlOlp0LGlzRmlsZTpYdCxpc0Jsb2I6JHQsaXNSZWdFeHA6ZnIsaXNGdW5jdGlvbjpULGlzU3RyZWFtOmVyLGlzVVJMU2VhcmNoUGFyYW1zOnJyLGlzVHlwZWRBcnJheTpscixpc0ZpbGVMaXN0OkFyLGZvckVhY2g6QUEsbWVyZ2U6V0EsZXh0ZW5kOm5yLHRyaW06aXIsc3RyaXBCT006b3IsaW5oZXJpdHM6YXIsdG9GbGF0T2JqZWN0OnNyLGtpbmRPZjpjQSxraW5kT2ZUZXN0Ok8sZW5kc1dpdGg6SXIsdG9BcnJheTpncixmb3JFYWNoRW50cnk6QnIsbWF0Y2hBbGw6dXIsaXNIVE1MRm9ybTpjcixoYXNPd25Qcm9wZXJ0eTpEZSxoYXNPd25Qcm9wOkRlLHJlZHVjZURlc2NyaXB0b3JzOk5lLGZyZWV6ZU1ldGhvZHM6RXIsdG9PYmplY3RTZXQ6cHIsdG9DYW1lbENhc2U6Q3Isbm9vcDpRcix0b0Zpbml0ZU51bWJlcjptcixmaW5kS2V5OmJlLGdsb2JhbDpSZSxpc0NvbnRleHREZWZpbmVkOlVlLEFMUEhBQkVUOlRlLGdlbmVyYXRlU3RyaW5nOmRyLGlzU3BlY0NvbXBsaWFudEZvcm06aHIsdG9KU09OT2JqZWN0OnlyLGlzQXN5bmNGbjp3cixpc1RoZW5hYmxlOkRyfTtmdW5jdGlvbiBLKEEsZSx0LHIsbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG4mJih0aGlzLnJlc3BvbnNlPW4pfWwuaW5oZXJpdHMoSyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmwudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIEdlPUsucHJvdG90eXBlLE9lPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e09lW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEssT2UpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShHZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtLLmZyb209KEEsZSx0LHIsbixpKT0+e2xldCBvPU9iamVjdC5jcmVhdGUoR2UpO3JldHVybiBsLnRvRmxhdE9iamVjdChBLG8sZnVuY3Rpb24oYyl7cmV0dXJuIGMhPT1FcnJvci5wcm90b3R5cGV9LEk9PkkhPT0iaXNBeGlvc0Vycm9yIiksSy5jYWxsKG8sQS5tZXNzYWdlLGUsdCxyLG4pLG8uY2F1c2U9QSxvLm5hbWU9QS5uYW1lLGkmJk9iamVjdC5hc3NpZ24obyxpKSxvfTt2YXIgbT1LO3ZhciBFQT1udWxsO2Z1bmN0aW9uIHFBKEEpe3JldHVybiBsLmlzUGxhaW5PYmplY3QoQSl8fGwuaXNBcnJheShBKX1mdW5jdGlvbiBQZShBKXtyZXR1cm4gbC5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBMZShBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG49UGUobiksIXQmJmk/IlsiK24rIl0iOm59KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIFNyKEEpe3JldHVybiBsLmlzQXJyYXkoQSkmJiFBLnNvbWUocUEpfXZhciBrcj1sLnRvRmxhdE9iamVjdChsLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gRnIoQSxlLHQpe2lmKCFsLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KEVBfHxGb3JtRGF0YSksdD1sLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24odSxwKXtyZXR1cm4hbC5pc1VuZGVmaW5lZChwW3VdKX0pO2xldCByPXQubWV0YVRva2VucyxuPXQudmlzaXRvcnx8cyxpPXQuZG90cyxvPXQuaW5kZXhlcyxjPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmwuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighbC5pc0Z1bmN0aW9uKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gQihDKXtpZihDPT09bnVsbClyZXR1cm4iIjtpZihsLmlzRGF0ZShDKSlyZXR1cm4gQy50b0lTT1N0cmluZygpO2lmKCFjJiZsLmlzQmxvYihDKSl0aHJvdyBuZXcgbSgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gbC5pc0FycmF5QnVmZmVyKEMpfHxsLmlzVHlwZWRBcnJheShDKT9jJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbQ10pOkJ1ZmZlci5mcm9tKEMpOkN9ZnVuY3Rpb24gcyhDLHUscCl7bGV0IFE9QztpZihDJiYhcCYmdHlwZW9mIEM9PSJvYmplY3QiKXtpZihsLmVuZHNXaXRoKHUsInt9IikpdT1yP3U6dS5zbGljZSgwLC0yKSxDPUpTT04uc3RyaW5naWZ5KEMpO2Vsc2UgaWYobC5pc0FycmF5KEMpJiZTcihDKXx8KGwuaXNGaWxlTGlzdChDKXx8bC5lbmRzV2l0aCh1LCJbXSIpKSYmKFE9bC50b0FycmF5KEMpKSlyZXR1cm4gdT1QZSh1KSxRLmZvckVhY2goZnVuY3Rpb24oUyxaKXshKGwuaXNVbmRlZmluZWQoUyl8fFM9PT1udWxsKSYmZS5hcHBlbmQobz09PSEwP0xlKFt1XSxaLGkpOm89PT1udWxsP3U6dSsiW10iLEIoUykpfSksITF9cmV0dXJuIHFBKEMpPyEwOihlLmFwcGVuZChMZShwLHUsaSksQihDKSksITEpfWxldCBhPVtdLGY9T2JqZWN0LmFzc2lnbihrcix7ZGVmYXVsdFZpc2l0b3I6cyxjb252ZXJ0VmFsdWU6Qixpc1Zpc2l0YWJsZTpxQX0pO2Z1bmN0aW9uIGcoQyx1KXtpZighbC5pc1VuZGVmaW5lZChDKSl7aWYoYS5pbmRleE9mKEMpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK3Uuam9pbigiLiIpKTthLnB1c2goQyksbC5mb3JFYWNoKEMsZnVuY3Rpb24oUSxkKXsoIShsLmlzVW5kZWZpbmVkKFEpfHxRPT09bnVsbCkmJm4uY2FsbChlLFEsbC5pc1N0cmluZyhkKT9kLnRyaW0oKTpkLHUsZikpPT09ITAmJmcoUSx1P3UuY29uY2F0KGQpOltkXSl9KSxhLnBvcCgpfX1pZighbC5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIGcoQSksZX12YXIgUD1GcjtmdW5jdGlvbiB4ZShBKXtsZXQgZT17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihyKXtyZXR1cm4gZVtyXX0pfWZ1bmN0aW9uIEplKEEsZSl7dGhpcy5fcGFpcnM9W10sQSYmUChBLHRoaXMsZSl9dmFyIEhlPUplLnByb3RvdHlwZTtIZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wYWlycy5wdXNoKFtlLHRdKX07SGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7bGV0IHQ9ZT9mdW5jdGlvbihyKXtyZXR1cm4gZS5jYWxsKHRoaXMscix4ZSl9OnhlO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQoblswXSkrIj0iK3QoblsxXSl9LCIiKS5qb2luKCImIil9O3ZhciBwQT1KZTtmdW5jdGlvbiBicihBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1mdW5jdGlvbiBlQShBLGUsdCl7aWYoIWUpcmV0dXJuIEE7bGV0IHI9dCYmdC5lbmNvZGV8fGJyLG49dCYmdC5zZXJpYWxpemUsaTtpZihuP2k9bihlLHQpOmk9bC5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IHBBKGUsdCkudG9TdHJpbmcociksaSl7bGV0IG89QS5pbmRleE9mKCIjIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK2l9cmV0dXJuIEF9dmFyIEtBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6cj9yLnN5bmNocm9ub3VzOiExLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXtsLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihyKXtyIT09bnVsbCYmZShyKX0pfX0sdkE9S0E7dmFyIFFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgTWU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOnBBO3ZhciBXZT10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIFllPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIHFlPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOk1lLEZvcm1EYXRhOldlLEJsb2I6WWV9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgakE9e307a3QoakEse2hhc0Jyb3dzZXJFbnY6KCk9PktlLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+UnIsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5Vcn0pO3ZhciBLZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixScj0oQT0+S2UmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxVcj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIFI9ey4uLmpBLC4uLnFlfTtmdW5jdGlvbiBfQShBLGUpe3JldHVybiBQKEEsbmV3IFIuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LHIsbixpKXtyZXR1cm4gUi5pc05vZGUmJmwuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKHIsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTppLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBOcihBKXtyZXR1cm4gbC5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIFRyKEEpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMoQSkscixuPXQubGVuZ3RoLGk7Zm9yKHI9MDtyPG47cisrKWk9dFtyXSxlW2ldPUFbaV07cmV0dXJuIGV9ZnVuY3Rpb24gR3IoQSl7ZnVuY3Rpb24gZSh0LHIsbixpKXtsZXQgbz10W2krK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBJPU51bWJlci5pc0Zpbml0ZSgrbyksYz1pPj10Lmxlbmd0aDtyZXR1cm4gbz0hbyYmbC5pc0FycmF5KG4pP24ubGVuZ3RoOm8sYz8obC5oYXNPd25Qcm9wKG4sbyk/bltvXT1bbltvXSxyXTpuW29dPXIsIUkpOigoIW5bb118fCFsLmlzT2JqZWN0KG5bb10pKSYmKG5bb109W10pLGUodCxyLG5bb10saSkmJmwuaXNBcnJheShuW29dKSYmKG5bb109VHIobltvXSkpLCFJKX1pZihsLmlzRm9ybURhdGEoQSkmJmwuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gbC5mb3JFYWNoRW50cnkoQSwocixuKT0+e2UoTnIociksbix0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgbUE9R3I7ZnVuY3Rpb24gT3IoQSxlLHQpe2lmKGwuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxsLnRyaW0oQSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIHpBPXt0cmFuc2l0aW9uYWw6UUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxpPWwuaXNPYmplY3QoZSk7aWYoaSYmbC5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLGwuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShtQShlKSk6ZTtpZihsLmlzQXJyYXlCdWZmZXIoZSl8fGwuaXNCdWZmZXIoZSl8fGwuaXNTdHJlYW0oZSl8fGwuaXNGaWxlKGUpfHxsLmlzQmxvYihlKSlyZXR1cm4gZTtpZihsLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihsLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgSTtpZihpKXtpZihyLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBfQShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEk9bC5pc0ZpbGVMaXN0KGUpKXx8ci5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBjPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gUChJP3siZmlsZXNbXSI6ZX06ZSxjJiZuZXcgYyx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIGl8fG4/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxPcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8ekEudHJhbnNpdGlvbmFsLHI9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxuPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJmwuaXNTdHJpbmcoZSkmJihyJiYhdGhpcy5yZXNwb25zZVR5cGV8fG4pKXtsZXQgbz0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChJKXtpZihvKXRocm93IEkubmFtZT09PSJTeW50YXhFcnJvciI/bS5mcm9tKEksbS5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpJfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6Ui5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6Ui5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07bC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9Pnt6QS5oZWFkZXJzW0FdPXt9fSk7dmFyIHY9ekE7dmFyIExyPWwudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksdmU9QT0+e2xldCBlPXt9LHQscixuO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihvKXtuPW8uaW5kZXhPZigiOiIpLHQ9by5zdWJzdHJpbmcoMCxuKS50cmltKCkudG9Mb3dlckNhc2UoKSxyPW8uc3Vic3RyaW5nKG4rMSkudHJpbSgpLCEoIXR8fGVbdF0mJkxyW3RdKSYmKHQ9PT0ic2V0LWNvb2tpZSI/ZVt0XT9lW3RdLnB1c2gocik6ZVt0XT1bcl06ZVt0XT1lW3RdP2VbdF0rIiwgIityOnIpfSksZX07dmFyIGplPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gdEEoQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBkQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6bC5pc0FycmF5KEEpP0EubWFwKGRBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gUHIoQSl7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2cscjtmb3IoO3I9dC5leGVjKEEpOyllW3JbMV1dPXJbMl07cmV0dXJuIGV9dmFyIHhyPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIFZBKEEsZSx0LHIsbil7aWYobC5pc0Z1bmN0aW9uKHIpKXJldHVybiByLmNhbGwodGhpcyxlLHQpO2lmKG4mJihlPXQpLCEhbC5pc1N0cmluZyhlKSl7aWYobC5pc1N0cmluZyhyKSlyZXR1cm4gZS5pbmRleE9mKHIpIT09LTE7aWYobC5pc1JlZ0V4cChyKSlyZXR1cm4gci50ZXN0KGUpfX1mdW5jdGlvbiBKcihBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLChlLHQscik9PnQudG9VcHBlckNhc2UoKStyKX1mdW5jdGlvbiBIcihBLGUpe2xldCB0PWwudG9DYW1lbENhc2UoIiAiK2UpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChyPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEscit0LHt2YWx1ZTpmdW5jdGlvbihuLGksbyl7cmV0dXJuIHRoaXNbcl0uY2FsbCh0aGlzLGUsbixpLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBqPWNsYXNze2NvbnN0cnVjdG9yKGUpe2UmJnRoaXMuc2V0KGUpfXNldChlLHQscil7bGV0IG49dGhpcztmdW5jdGlvbiBpKEksYyxCKXtsZXQgcz10QShjKTtpZighcyl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGE9bC5maW5kS2V5KG4scyk7KCFhfHxuW2FdPT09dm9pZCAwfHxCPT09ITB8fEI9PT12b2lkIDAmJm5bYV0hPT0hMSkmJihuW2F8fGNdPWRBKEkpKX1sZXQgbz0oSSxjKT0+bC5mb3JFYWNoKEksKEIscyk9PmkoQixzLGMpKTtyZXR1cm4gbC5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKGUsdCk6bC5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYheHIoZSk/byh2ZShlKSx0KTplIT1udWxsJiZpKHQsZSxyKSx0aGlzfWdldChlLHQpe2lmKGU9dEEoZSksZSl7bGV0IHI9bC5maW5kS2V5KHRoaXMsZSk7aWYocil7bGV0IG49dGhpc1tyXTtpZighdClyZXR1cm4gbjtpZih0PT09ITApcmV0dXJuIFByKG4pO2lmKGwuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsbixyKTtpZihsLmlzUmVnRXhwKHQpKXJldHVybiB0LmV4ZWMobik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHQpe2lmKGU9dEEoZSksZSl7bGV0IHI9bC5maW5kS2V5KHRoaXMsZSk7cmV0dXJuISEociYmdGhpc1tyXSE9PXZvaWQgMCYmKCF0fHxWQSh0aGlzLHRoaXNbcl0scix0KSkpfXJldHVybiExfWRlbGV0ZShlLHQpe2xldCByPXRoaXMsbj0hMTtmdW5jdGlvbiBpKG8pe2lmKG89dEEobyksbyl7bGV0IEk9bC5maW5kS2V5KHIsbyk7SSYmKCF0fHxWQShyLHJbSV0sSSx0KSkmJihkZWxldGUgcltJXSxuPSEwKX19cmV0dXJuIGwuaXNBcnJheShlKT9lLmZvckVhY2goaSk6aShlKSxufWNsZWFyKGUpe2xldCB0PU9iamVjdC5rZXlzKHRoaXMpLHI9dC5sZW5ndGgsbj0hMTtmb3IoO3ItLTspe2xldCBpPXRbcl07KCFlfHxWQSh0aGlzLHRoaXNbaV0saSxlLCEwKSkmJihkZWxldGUgdGhpc1tpXSxuPSEwKX1yZXR1cm4gbn1ub3JtYWxpemUoZSl7bGV0IHQ9dGhpcyxyPXt9O3JldHVybiBsLmZvckVhY2godGhpcywobixpKT0+e2xldCBvPWwuZmluZEtleShyLGkpO2lmKG8pe3Rbb109ZEEobiksZGVsZXRlIHRbaV07cmV0dXJufWxldCBJPWU/SnIoaSk6U3RyaW5nKGkpLnRyaW0oKTtJIT09aSYmZGVsZXRlIHRbaV0sdFtJXT1kQShuKSxyW0ldPSEwfSksdGhpc31jb25jYXQoLi4uZSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uZSl9dG9KU09OKGUpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGwuZm9yRWFjaCh0aGlzLChyLG4pPT57ciE9bnVsbCYmciE9PSExJiYodFtuXT1lJiZsLmlzQXJyYXkocik/ci5qb2luKCIsICIpOnIpfSksdH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbZSx0XSk9PmUrIjogIit0KS5qb2luKGAKYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXM/ZTpuZXcgdGhpcyhlKX1zdGF0aWMgY29uY2F0KGUsLi4udCl7bGV0IHI9bmV3IHRoaXMoZSk7cmV0dXJuIHQuZm9yRWFjaChuPT5yLnNldChuKSkscn1zdGF0aWMgYWNjZXNzb3IoZSl7bGV0IHI9KHRoaXNbamVdPXRoaXNbamVdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBpKG8pe2xldCBJPXRBKG8pO3JbSV18fChIcihuLG8pLHJbSV09ITApfXJldHVybiBsLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSksdGhpc319O2ouYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO2wucmVkdWNlRGVzY3JpcHRvcnMoai5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHIpe3RoaXNbdF09cn19fSk7bC5mcmVlemVNZXRob2RzKGopO3ZhciBVPWo7ZnVuY3Rpb24gckEoQSxlKXtsZXQgdD10aGlzfHx2LHI9ZXx8dCxuPVUuZnJvbShyLmhlYWRlcnMpLGk9ci5kYXRhO3JldHVybiBsLmZvckVhY2goQSxmdW5jdGlvbihJKXtpPUkuY2FsbCh0LGksbi5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxuLm5vcm1hbGl6ZSgpLGl9ZnVuY3Rpb24gaUEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBfZShBLGUsdCl7bS5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixtLkVSUl9DQU5DRUxFRCxlLHQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9bC5pbmhlcml0cyhfZSxtLHtfX0NBTkNFTF9fOiEwfSk7dmFyIHg9X2U7ZnVuY3Rpb24gWkEoQSxlLHQpe2xldCByPXQuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyF0LnN0YXR1c3x8IXJ8fHIodC5zdGF0dXMpP0EodCk6ZShuZXcgbSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Quc3RhdHVzLFttLkVSUl9CQURfUkVRVUVTVCxtLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IodC5zdGF0dXMvMTAwKS00XSx0LmNvbmZpZyx0LnJlcXVlc3QsdCkpfXZhciB6ZT1SLmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHQscixuLGkpe2xldCBvPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO2wuaXNOdW1iZXIodCkmJm8ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHQpLnRvR01UU3RyaW5nKCkpLGwuaXNTdHJpbmcocikmJm8ucHVzaCgicGF0aD0iK3IpLGwuaXNTdHJpbmcobikmJm8ucHVzaCgiZG9tYWluPSIrbiksaT09PSEwJiZvLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1vLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBYQShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uICRBKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiBuQShBLGUpe3JldHVybiBBJiYhWEEoZSk/JEEoQSxlKTplfXZhciBWZT1SLmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikscjtmdW5jdGlvbiBuKGkpe2xldCBvPWk7cmV0dXJuIGUmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIHI9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IEk9bC5pc1N0cmluZyhvKT9uKG8pOm87cmV0dXJuIEkucHJvdG9jb2w9PT1yLnByb3RvY29sJiZJLmhvc3Q9PT1yLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIEFlKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBNcihBLGUpe0E9QXx8MTA7bGV0IHQ9bmV3IEFycmF5KEEpLHI9bmV3IEFycmF5KEEpLG49MCxpPTAsbztyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKGMpe2xldCBCPURhdGUubm93KCkscz1yW2ldO298fChvPUIpLHRbbl09YyxyW25dPUI7bGV0IGE9aSxmPTA7Zm9yKDthIT09bjspZis9dFthKytdLGE9YSVBO2lmKG49KG4rMSklQSxuPT09aSYmKGk9KGkrMSklQSksQi1vPGUpcmV0dXJuO2xldCBnPXMmJkItcztyZXR1cm4gZz9NYXRoLnJvdW5kKGYqMWUzL2cpOnZvaWQgMH19dmFyIFplPU1yO2Z1bmN0aW9uIFhlKEEsZSl7bGV0IHQ9MCxyPVplKDUwLDI1MCk7cmV0dXJuIG49PntsZXQgaT1uLmxvYWRlZCxvPW4ubGVuZ3RoQ29tcHV0YWJsZT9uLnRvdGFsOnZvaWQgMCxJPWktdCxjPXIoSSksQj1pPD1vO3Q9aTtsZXQgcz17bG9hZGVkOmksdG90YWw6byxwcm9ncmVzczpvP2kvbzp2b2lkIDAsYnl0ZXM6SSxyYXRlOmN8fHZvaWQgMCxlc3RpbWF0ZWQ6YyYmbyYmQj8oby1pKS9jOnZvaWQgMCxldmVudDpufTtzW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShzKX19dmFyIFdyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsJGU9V3ImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe2xldCBuPUEuZGF0YSxpPVUuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOkl9PUEsYztmdW5jdGlvbiBCKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShjKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpfWxldCBzO2lmKGwuaXNGb3JtRGF0YShuKSl7aWYoUi5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fFIuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKHM9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbdSwuLi5wXT1zP3Muc3BsaXQoIjsiKS5tYXAoUT0+US50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFt1fHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4ucF0uam9pbigiOyAiKSl9fWxldCBhPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCB1PUEuYXV0aC51c2VybmFtZXx8IiIscD1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO2kuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKHUrIjoiK3ApKX1sZXQgZj1uQShBLmJhc2VVUkwsQS51cmwpO2Eub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLGVBKGYsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYS50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBnKCl7aWYoIWEpcmV0dXJuO2xldCB1PVUuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGEmJmEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLFE9e2RhdGE6IW98fG89PT0idGV4dCJ8fG89PT0ianNvbiI/YS5yZXNwb25zZVRleHQ6YS5yZXNwb25zZSxzdGF0dXM6YS5zdGF0dXMsc3RhdHVzVGV4dDphLnN0YXR1c1RleHQsaGVhZGVyczp1LGNvbmZpZzpBLHJlcXVlc3Q6YX07WkEoZnVuY3Rpb24oUyl7dChTKSxCKCl9LGZ1bmN0aW9uKFMpe3IoUyksQigpfSxRKSxhPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBhP2Eub25sb2FkZW5kPWc6YS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshYXx8YS5yZWFkeVN0YXRlIT09NHx8YS5zdGF0dXM9PT0wJiYhKGEucmVzcG9uc2VVUkwmJmEucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KGcpfSxhLm9uYWJvcnQ9ZnVuY3Rpb24oKXthJiYocihuZXcgbSgiUmVxdWVzdCBhYm9ydGVkIixtLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGwpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBtKCJOZXR3b3JrIEVycm9yIixtLkVSUl9ORVRXT1JLLEEsYSkpLGE9bnVsbH0sYS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgcD1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsUT1BLnRyYW5zaXRpb25hbHx8UUE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYocD1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIobmV3IG0ocCxRLmNsYXJpZnlUaW1lb3V0RXJyb3I/bS5FVElNRURPVVQ6bS5FQ09OTkFCT1JURUQsQSxhKSksYT1udWxsfSxSLmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKEkmJmwuaXNGdW5jdGlvbihJKSYmKEk9SShBKSksSXx8SSE9PSExJiZWZShmKSkpe2xldCB1PUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJnplLnJlYWQoQS54c3JmQ29va2llTmFtZSk7dSYmaS5zZXQoQS54c3JmSGVhZGVyTmFtZSx1KX1uPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGEmJmwuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKHAsUSl7YS5zZXRSZXF1ZXN0SGVhZGVyKFEscCl9KSxsLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KGEud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLG8mJm8hPT0ianNvbiImJihhLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZhLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixYZShBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEudXBsb2FkJiZhLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsWGUoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGM9dT0+e2EmJihyKCF1fHx1LnR5cGU/bmV3IHgobnVsbCxBLGEpOnUpLGEuYWJvcnQoKSxhPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShjKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/YygpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixjKSkpO2xldCBDPUFlKGYpO2lmKEMmJlIucHJvdG9jb2xzLmluZGV4T2YoQyk9PT0tMSl7cihuZXcgbSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitDKyI6IixtLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWEuc2VuZChufHxudWxsKX0pfTt2YXIgZWU9e2h0dHA6RUEseGhyOiRlfTtsLmZvckVhY2goZWUsKEEsZSk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTplfSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOmV9KX19KTt2YXIgQXQ9QT0+YC0gJHtBfWAsWXI9QT0+bC5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLGhBPXtnZXRBZGFwdGVyOkE9PntBPWwuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOmV9PUEsdCxyLG49e307Zm9yKGxldCBpPTA7aTxlO2krKyl7dD1BW2ldO2xldCBvO2lmKHI9dCwhWXIodCkmJihyPWVlWyhvPVN0cmluZyh0KSkudG9Mb3dlckNhc2UoKV0scj09PXZvaWQgMCkpdGhyb3cgbmV3IG0oYFVua25vd24gYWRhcHRlciAnJHtvfSdgKTtpZihyKWJyZWFrO25bb3x8IiMiK2ldPXJ9aWYoIXIpe2xldCBpPU9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW0ksY10pPT5gYWRhcHRlciAke0l9IGArKGM9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPWU/aS5sZW5ndGg+MT9gc2luY2UgOgpgK2kubWFwKEF0KS5qb2luKGAKYCk6IiAiK0F0KGlbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IG0oIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gcn0sYWRhcHRlcnM6ZWV9O2Z1bmN0aW9uIHRlKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyB4KG51bGwsQSl9ZnVuY3Rpb24geUEoQSl7cmV0dXJuIHRlKEEpLEEuaGVhZGVycz1VLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9ckEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGhBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHx2LmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIHRlKEEpLHIuZGF0YT1yQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyKSxyLmhlYWRlcnM9VS5mcm9tKHIuaGVhZGVycykscn0sZnVuY3Rpb24ocil7cmV0dXJuIGlBKHIpfHwodGUoQSksciYmci5yZXNwb25zZSYmKHIucmVzcG9uc2UuZGF0YT1yQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyLnJlc3BvbnNlKSxyLnJlc3BvbnNlLmhlYWRlcnM9VS5mcm9tKHIucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChyKX0pfXZhciBldD1BPT5BIGluc3RhbmNlb2YgVT97Li4uQX06QTtmdW5jdGlvbiBMKEEsZSl7ZT1lfHx7fTtsZXQgdD17fTtmdW5jdGlvbiByKEIscyxhKXtyZXR1cm4gbC5pc1BsYWluT2JqZWN0KEIpJiZsLmlzUGxhaW5PYmplY3Qocyk/bC5tZXJnZS5jYWxsKHtjYXNlbGVzczphfSxCLHMpOmwuaXNQbGFpbk9iamVjdChzKT9sLm1lcmdlKHt9LHMpOmwuaXNBcnJheShzKT9zLnNsaWNlKCk6c31mdW5jdGlvbiBuKEIscyxhKXtpZihsLmlzVW5kZWZpbmVkKHMpKXtpZighbC5pc1VuZGVmaW5lZChCKSlyZXR1cm4gcih2b2lkIDAsQixhKX1lbHNlIHJldHVybiByKEIscyxhKX1mdW5jdGlvbiBpKEIscyl7aWYoIWwuaXNVbmRlZmluZWQocykpcmV0dXJuIHIodm9pZCAwLHMpfWZ1bmN0aW9uIG8oQixzKXtpZihsLmlzVW5kZWZpbmVkKHMpKXtpZighbC5pc1VuZGVmaW5lZChCKSlyZXR1cm4gcih2b2lkIDAsQil9ZWxzZSByZXR1cm4gcih2b2lkIDAscyl9ZnVuY3Rpb24gSShCLHMsYSl7aWYoYSBpbiBlKXJldHVybiByKEIscyk7aWYoYSBpbiBBKXJldHVybiByKHZvaWQgMCxCKX1sZXQgYz17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpJLGhlYWRlcnM6KEIscyk9Pm4oZXQoQiksZXQocyksITApfTtyZXR1cm4gbC5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSxlKSksZnVuY3Rpb24ocyl7bGV0IGE9Y1tzXXx8bixmPWEoQVtzXSxlW3NdLHMpO2wuaXNVbmRlZmluZWQoZikmJmEhPT1JfHwodFtzXT1mKX0pLHR9dmFyIHdBPSIxLjYuOCI7dmFyIHJlPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e3JlW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciB0dD17fTtyZS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oaSxvKXtyZXR1cm4iW0F4aW9zIHYiK3dBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIraSsiJyIrbysocj8iLiAiK3I6IiIpfXJldHVybihpLG8sSSk9PntpZihlPT09ITEpdGhyb3cgbmV3IG0obihvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxtLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIXR0W29dJiYodHRbb109ITAsY29uc29sZS53YXJuKG4obywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UoaSxvLEkpOiEwfX07ZnVuY3Rpb24gcXIoQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgbSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsbS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksbj1yLmxlbmd0aDtmb3IoO24tLSA+MDspe2xldCBpPXJbbl0sbz1lW2ldO2lmKG8pe2xldCBJPUFbaV0sYz1JPT09dm9pZCAwfHxvKEksaSxBKTtpZihjIT09ITApdGhyb3cgbmV3IG0oIm9wdGlvbiAiK2krIiBtdXN0IGJlICIrYyxtLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IG0oIlVua25vd24gb3B0aW9uICIraSxtLkVSUl9CQURfT1BUSU9OKX19dmFyIERBPXthc3NlcnRPcHRpb25zOnFyLHZhbGlkYXRvcnM6cmV9O3ZhciBKPURBLnZhbGlkYXRvcnMsXz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IHZBLHJlc3BvbnNlOm5ldyB2QX19YXN5bmMgcmVxdWVzdChlLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG47RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3I7bGV0IGk9bi5zdGFjaz9uLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7ci5zdGFjaz9pJiYhU3RyaW5nKHIuc3RhY2spLmVuZHNXaXRoKGkucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYoci5zdGFjays9YApgK2kpOnIuc3RhY2s9aX10aHJvdyByfX1fcmVxdWVzdChlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LHQ9TCh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm4saGVhZGVyczppfT10O3IhPT12b2lkIDAmJkRBLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKX0sITEpLG4hPW51bGwmJihsLmlzRnVuY3Rpb24obik/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bn06REEuYXNzZXJ0T3B0aW9ucyhuLHtlbmNvZGU6Si5mdW5jdGlvbixzZXJpYWxpemU6Si5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1pJiZsLm1lcmdlKGkuY29tbW9uLGlbdC5tZXRob2RdKTtpJiZsLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sQz0+e2RlbGV0ZSBpW0NdfSksdC5oZWFkZXJzPVUuY29uY2F0KG8saSk7bGV0IEk9W10sYz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24odSl7dHlwZW9mIHUucnVuV2hlbj09ImZ1bmN0aW9uIiYmdS5ydW5XaGVuKHQpPT09ITF8fChjPWMmJnUuc3luY2hyb25vdXMsSS51bnNoaWZ0KHUuZnVsZmlsbGVkLHUucmVqZWN0ZWQpKX0pO2xldCBCPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24odSl7Qi5wdXNoKHUuZnVsZmlsbGVkLHUucmVqZWN0ZWQpfSk7bGV0IHMsYT0wLGY7aWYoIWMpe2xldCBDPVt5QS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEMudW5zaGlmdC5hcHBseShDLEkpLEMucHVzaC5hcHBseShDLEIpLGY9Qy5sZW5ndGgscz1Qcm9taXNlLnJlc29sdmUodCk7YTxmOylzPXMudGhlbihDW2ErK10sQ1thKytdKTtyZXR1cm4gc31mPUkubGVuZ3RoO2xldCBnPXQ7Zm9yKGE9MDthPGY7KXtsZXQgQz1JW2ErK10sdT1JW2ErK107dHJ5e2c9QyhnKX1jYXRjaChwKXt1LmNhbGwodGhpcyxwKTticmVha319dHJ5e3M9eUEuY2FsbCh0aGlzLGcpfWNhdGNoKEMpe3JldHVybiBQcm9taXNlLnJlamVjdChDKX1mb3IoYT0wLGY9Qi5sZW5ndGg7YTxmOylzPXMudGhlbihCW2ErK10sQlthKytdKTtyZXR1cm4gc31nZXRVcmkoZSl7ZT1MKHRoaXMuZGVmYXVsdHMsZSk7bGV0IHQ9bkEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gZUEodCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07bC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtfLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoTChyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSk7bC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gZnVuY3Rpb24oaSxvLEkpe3JldHVybiB0aGlzLnJlcXVlc3QoTChJfHx7fSx7bWV0aG9kOmUsaGVhZGVyczpyP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDppLGRhdGE6b30pKX19Xy5wcm90b3R5cGVbZV09dCgpLF8ucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKX0pO3ZhciBvQT1fO3ZhciBpZT1jbGFzcyBBe2NvbnN0cnVjdG9yKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSl7dD1pfSk7bGV0IHI9dGhpczt0aGlzLnByb21pc2UudGhlbihuPT57aWYoIXIuX2xpc3RlbmVycylyZXR1cm47bGV0IGk9ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO2ktLSA+MDspci5fbGlzdGVuZXJzW2ldKG4pO3IuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49bj0+e2xldCBpLG89bmV3IFByb21pc2UoST0+e3Iuc3Vic2NyaWJlKEkpLGk9SX0pLnRoZW4obik7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZShpKX0sb30sZShmdW5jdGlvbihpLG8sSSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgeChpLG8sSSksdChyLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfXVuc3Vic2NyaWJlKGUpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgZTtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24obil7ZT1ufSksY2FuY2VsOmV9fX0scnQ9aWU7ZnVuY3Rpb24gbmUoQSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uIG9lKEEpe3JldHVybiBsLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBhZT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoYWUpLmZvckVhY2goKFtBLGVdKT0+e2FlW2VdPUF9KTt2YXIgaXQ9YWU7ZnVuY3Rpb24gbnQoQSl7bGV0IGU9bmV3IG9BKEEpLHQ9WChvQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gbC5leHRlbmQodCxvQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLGwuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIG50KEwoQSxuKSl9LHR9dmFyIEQ9bnQodik7RC5BeGlvcz1vQTtELkNhbmNlbGVkRXJyb3I9eDtELkNhbmNlbFRva2VuPXJ0O0QuaXNDYW5jZWw9aUE7RC5WRVJTSU9OPXdBO0QudG9Gb3JtRGF0YT1QO0QuQXhpb3NFcnJvcj1tO0QuQ2FuY2VsPUQuQ2FuY2VsZWRFcnJvcjtELmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O0Quc3ByZWFkPW5lO0QuaXNBeGlvc0Vycm9yPW9lO0QubWVyZ2VDb25maWc9TDtELkF4aW9zSGVhZGVycz1VO0QuZm9ybVRvSlNPTj1BPT5tQShsLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO0QuZ2V0QWRhcHRlcj1oQS5nZXRBZGFwdGVyO0QuSHR0cFN0YXR1c0NvZGU9aXQ7RC5kZWZhdWx0PUQ7dmFyIHo9RDt2YXJ7QXhpb3M6WWEsQXhpb3NFcnJvcjpxYSxDYW5jZWxlZEVycm9yOkthLGlzQ2FuY2VsOnZhLENhbmNlbFRva2VuOmphLFZFUlNJT046X2EsYWxsOnphLENhbmNlbDpWYSxpc0F4aW9zRXJyb3I6WmEsc3ByZWFkOlhhLHRvRm9ybURhdGE6JGEsQXhpb3NIZWFkZXJzOkFzLEh0dHBTdGF0dXNDb2RlOmVzLGZvcm1Ub0pTT046dHMsZ2V0QWRhcHRlcjpycyxtZXJnZUNvbmZpZzppc309ejthc3luYyBmdW5jdGlvbiBLcihBLGUpe2xldCB0PUEscj1udWxsO2lmKHQ9PW51bGwpcj1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG49YXdhaXQgei5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChuLmRhdGEpO3I9bmV3IFdvcmtlcihpLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBhQT1LcjtmdW5jdGlvbiBvdChBKXtsZXQgZT1KQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W3hBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIHZyKEEsZSx0KXtsZXQgcjtpZihBIT1udWxsKXtsZXQgaT1BO3JldHVybiBpLndvcmtlclByb3h5IT09dm9pZCAwPyhyPWkud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOml9KTpvdChBKX1sZXQgbj1hd2FpdCBhQShlLHQpO3JldHVybiBvdChuKX12YXIgYXQ9dnI7YXN5bmMgZnVuY3Rpb24ganIoQSxlLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/cj1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/cj1BOnI9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBuPWAke3J9Lndhc21gLG89KGF3YWl0IHouZ2V0KG4se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om99KX12YXIgc3Q9anI7dmFyIEl0PWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBCdD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixndD1uZXcgVGV4dEVuY29kZXIsbHQ9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIF9yKEEsZSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1BLmZzX29wZW4oZSx0LmZsYWdzKSxpPUEuZnNfc3RhdChlKS5zaXplLG89bnVsbDtCdD9vPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihpKTpvPW5ldyBBcnJheUJ1ZmZlcihpKTtsZXQgST1uZXcgVWludDhBcnJheShvKTtyZXR1cm4gQS5mc19yZWFkKHIsSSwwLGksMCksQS5mc19jbG9zZShyKSxJfWZ1bmN0aW9uIHV0KEEsZSx0KXtsZXQgcj1udWxsO0J0P3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBuPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUsdCk7cmV0dXJuIG4uc2V0KGkpLG59ZnVuY3Rpb24gayhBLGUsdCxyKXtsZXQgbj0wO3JldHVybiBlIT09bnVsbCYmKG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG4pKSxufWZ1bmN0aW9uIE0oQSxlLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KGUpLG49QS5sZW5ndGhCeXRlc1VURjgocikrMSxpPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxuXSk7QS5zdHJpbmdUb1VURjgocixpLG4pfWZ1bmN0aW9uIE4oQSxlLHQscil7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksaT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxvPXV0KEEsbixpKTtyZXR1cm4gRyhyLG8uYnVmZmVyKX1mdW5jdGlvbiBTQShBLGUpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLHI9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24genIoQSxlLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKEIscyl7c3dpdGNoKEIudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBhPWd0LmVuY29kZShCLmRhdGEuZGF0YSksZj1rKEEsYSxzLDApLGc9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEsZyxzKTticmVha31jYXNlIEUuSnNvbkNvbXBhdGlibGU6e2xldCBhPWd0LmVuY29kZShKU09OLnN0cmluZ2lmeShCLmRhdGEpKSxmPWsoQSxhLHMsMCksZz17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxnLHMpO2JyZWFrfWNhc2UgRS5CaW5hcnlTdHJlYW06e2xldCBhPUIuZGF0YS5kYXRhLGY9ayhBLGEscywwKSxnPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLGcscyk7YnJlYWt9Y2FzZSBFLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShCLmRhdGEucGF0aCxCLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBFLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKEIuZGF0YS5wYXRoLEIuZGF0YS5kYXRhKTticmVha31jYXNlIEUuSW1hZ2U6e2xldCBhPUIuZGF0YSxmPWsoQSxhLmRhdGEscywwKSxnPWsoQSxhLmRpcmVjdGlvbixzLDEpLEM9dHlwZW9mIGEubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oYS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLHU9e2ltYWdlVHlwZTphLmltYWdlVHlwZSxuYW1lOmEubmFtZSxvcmlnaW46YS5vcmlnaW4sc3BhY2luZzphLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLHNpemU6YS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6Q307TShBLHUscyk7YnJlYWt9Y2FzZSBFLk1lc2g6e2xldCBhPUIuZGF0YSxmPWsoQSxhLnBvaW50cyxzLDApLGc9ayhBLGEuY2VsbHMscywxKSxDPWsoQSxhLnBvaW50RGF0YSxzLDIpLHU9ayhBLGEuY2VsbERhdGEscywzKSxwPXttZXNoVHlwZTphLm1lc2hUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6YS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLGNlbGxCdWZmZXJTaXplOmEuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Q31gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07TShBLHAscyk7YnJlYWt9Y2FzZSBFLlBvaW50U2V0OntsZXQgYT1CLmRhdGEsZj1rKEEsYS5wb2ludHMscywwKSxnPWsoQSxhLnBvaW50RGF0YSxzLDEpLEM9e3BvaW50U2V0VHlwZTphLnBvaW50U2V0VHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtnfWB9O00oQSxDLHMpO2JyZWFrfWNhc2UgRS5Qb2x5RGF0YTp7bGV0IGE9Qi5kYXRhLGY9ayhBLGEucG9pbnRzLHMsMCksZz1rKEEsYS52ZXJ0aWNlcyxzLDEpLEM9ayhBLGEubGluZXMscywyKSx1PWsoQSxhLnBvbHlnb25zLHMsMykscD1rKEEsYS50cmlhbmdsZVN0cmlwcyxzLDQpLFE9ayhBLGEucG9pbnREYXRhLHMsNSksZD1rKEEsYS5wb2ludERhdGEscyw2KSxTPXtwb2x5RGF0YVR5cGU6YS5wb2x5RGF0YVR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOmEudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLGxpbmVzQnVmZmVyU2l6ZTphLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YCxwb2x5Z29uc0J1ZmZlclNpemU6YS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmEudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtkfWB9O00oQSxTLHMpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBuPUEuc3RhY2tTYXZlKCksaT0wO3RyeXtpPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChCKXt0aHJvdyB0eXBlb2YgQj09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShCKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxCfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobil9bGV0IG89QS5nZXRNb2R1bGVTdGRvdXQoKSxJPUEuZ2V0TW9kdWxlU3RkZXJyKCksYz1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmaT09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihCLHMpe2xldCBhPW51bGw7c3dpdGNoKEIudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksdT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZyxDKTthPXtkYXRhOmx0LmRlY29kZSh1KX07YnJlYWt9Y2FzZSBFLkpzb25Db21wYXRpYmxlOntsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSxDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLHU9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGcsQyk7YT1KU09OLnBhcnNlKGx0LmRlY29kZSh1KSk7YnJlYWt9Y2FzZSBFLkJpbmFyeVN0cmVhbTp7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKTthPXtkYXRhOnV0KEEsZyxDKX07YnJlYWt9Y2FzZSBFLlRleHRGaWxlOnthPXtwYXRoOkIuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShCLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRS5CaW5hcnlGaWxlOnthPXtwYXRoOkIuZGF0YS5wYXRoLGRhdGE6X3IoQSxCLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRS5JbWFnZTp7bGV0IGc9U0EoQSxzKTtnLmRhdGE9TihBLHMsMCxnLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxnLmRpcmVjdGlvbj1OKEEscywxLFcuRmxvYXQ2NCksZy5tZXRhZGF0YT1uZXcgTWFwKGcubWV0YWRhdGEpLGE9ZzticmVha31jYXNlIEUuTWVzaDp7bGV0IGc9U0EoQSxzKTtnLm51bWJlck9mUG9pbnRzPjA/Zy5wb2ludHM9TihBLHMsMCxnLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Zy5wb2ludHM9RyhnLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZDZWxscz4wP2cuY2VsbHM9TihBLHMsMSxnLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpnLmNlbGxzPUcoZy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZQb2ludFBpeGVscz4wP2cucG9pbnREYXRhPU4oQSxzLDIsZy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9RyhnLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZkNlbGxQaXhlbHM+MD9nLmNlbGxEYXRhPU4oQSxzLDMsZy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpnLmNlbGxEYXRhPUcoZy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1nO2JyZWFrfWNhc2UgRS5Qb2ludFNldDp7bGV0IGc9U0EoQSxzKTtjb25zb2xlLmxvZyhnKSxnLm51bWJlck9mUG9pbnRzPjA/Zy5wb2ludHM9TihBLHMsMCxnLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmcucG9pbnRzPUcoZy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Zy5wb2ludERhdGE9TihBLHMsMSxnLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9RyhnLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9ZzticmVha31jYXNlIEUuUG9seURhdGE6e2xldCBnPVNBKEEscyk7Zy5udW1iZXJPZlBvaW50cz4wP2cucG9pbnRzPU4oQSxzLDAsVy5GbG9hdDMyKTpnLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGcudmVydGljZXNCdWZmZXJTaXplPjA/Zy52ZXJ0aWNlcz1OKEEscywxLGIuVUludDMyKTpnLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxnLmxpbmVzQnVmZmVyU2l6ZT4wP2cubGluZXM9TihBLHMsMixiLlVJbnQzMik6Zy5saW5lcz1uZXcgVWludDMyQXJyYXksZy5wb2x5Z29uc0J1ZmZlclNpemU+MD9nLnBvbHlnb25zPU4oQSxzLDMsYi5VSW50MzIpOmcucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGcudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/Zy50cmlhbmdsZVN0cmlwcz1OKEEscyw0LGIuVUludDMyKTpnLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxnLm51bWJlck9mUG9pbnRQaXhlbHM+MD9nLnBvaW50RGF0YT1OKEEscyw1LGcucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpnLnBvaW50RGF0YT1HKGcucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZkNlbGxQaXhlbHM+MD9nLmNlbGxEYXRhPU4oQSxzLDYsZy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5jZWxsRGF0YT1HKGcucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPWc7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpCLnR5cGUsZGF0YTphfTtjLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6byxzdGRlcnI6SSxvdXRwdXRzOmN9fXZhciBjdD16cjt2YXIgVnI9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFpyKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IG49WHIoQVtyXSxlKTtuIT09bnVsbCYmdC5wdXNoKG4pfXJldHVybiB0fWZ1bmN0aW9uIFhyKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksVnImJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBDdD1acjtmdW5jdGlvbiAkcihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgZnQ9JHI7ZnVuY3Rpb24gQWkoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIEV0PUFpO2Z1bmN0aW9uIGVpKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBwdD1laTt2YXIgdGk7ZnVuY3Rpb24ga0EoKXtyZXR1cm4gdGl9dmFyIHJpO2Z1bmN0aW9uIFF0KCl7cmV0dXJuIHJpfXZhciBpaTtmdW5jdGlvbiBGQSgpe3JldHVybiBpaX12YXIgc2U9bmV3IE1hcDtmdW5jdGlvbiBuaSgpe2xldCBBPUZBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBtdCgpe2xldCBBPWtBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIGJBKCl7bGV0IEE9UXQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBvaShBLGUsdCl7bGV0IHI9QSxuPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksbj1yLmhyZWYpLHNlLmhhcyhuKSlyZXR1cm4gc2UuZ2V0KG4pO3tsZXQgaT1hd2FpdCBzdChBLGU/LnRvU3RyaW5nKCk/P210KCksdD8/YkEoKSk7cmV0dXJuIHNlLnNldChuLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIGFpKEEsZSx0LHIsbil7aWYoIWF3YWl0IEl0KCkpe2xldCBwPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChwKSxuZXcgRXJyb3IocCl9bGV0IGk9bj8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IHA9YXdhaXQgb2koQS50b1N0cmluZygpLG4/LnBpcGVsaW5lQmFzZVVybCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9iQSgpKTtyZXR1cm4gY3QocCxlLHQscil9bGV0IG89aSxJPW4/LnBpcGVsaW5lV29ya2VyVXJsPz9uaSgpLGM9dHlwZW9mIEkhPSJzdHJpbmciJiZ0eXBlb2YgST8uaHJlZjwidSI/SS5ocmVmOkkse3dvcmtlclByb3h5OkIsd29ya2VyOnN9PWF3YWl0IGF0KG8sYyxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9iQSgpKTtvPXM7bGV0IGE9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKHApe2lmKHAudHlwZT09PUUuQmluYXJ5U3RyZWFtKXtsZXQgUT1wLmRhdGEuZGF0YTthLnB1c2goUSl9ZWxzZSBpZihwLnR5cGU9PT1FLkJpbmFyeUZpbGUpe2xldCBRPXAuZGF0YS5kYXRhO2EucHVzaChRKX1lbHNlIGlmKHAudHlwZT09PUUuSW1hZ2Upe2xldCBRPXAuZGF0YTtRLmRhdGEhPT1udWxsJiZhLnB1c2goLi4uZnQoUSkpfWVsc2UgaWYocC50eXBlPT09RS5NZXNoKXtsZXQgUT1wLmRhdGE7YS5wdXNoKC4uLkV0KFEpKX1lbHNlIGlmKHAudHlwZT09PUUuUG9seURhdGEpe2xldCBRPXAuZGF0YTthLnB1c2goLi4ucHQoUSkpfX0pO2xldCBmPW4/LnBpcGVsaW5lQmFzZVVybD8/bXQoKSxnPXR5cGVvZiBmIT0ic3RyaW5nIiYmdHlwZW9mIGY/LmhyZWY8InUiP2YuaHJlZjpmLEM9ciE9bnVsbD9IQShyLEN0KGEsbj8ubm9Db3B5KSk6bnVsbCx1PWF3YWl0IEIucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLGcsZSx0LEMsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/YkEoKSk7cmV0dXJue3JldHVyblZhbHVlOnUucmV0dXJuVmFsdWUsc3Rkb3V0OnUuc3Rkb3V0LHN0ZGVycjp1LnN0ZGVycixvdXRwdXRzOnUub3V0cHV0cyx3ZWJXb3JrZXI6b319dmFyIHk9YWk7dmFyIHNpPW51bGw7ZnVuY3Rpb24gZHQoKXtyZXR1cm4gc2l9dmFyIEllLElpPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9kaWNvbUAke1JBfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gX3MoQSl7SWU9QX1mdW5jdGlvbiB3KCl7aWYodHlwZW9mIEllPCJ1IilyZXR1cm4gSWU7bGV0IEE9a0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6SWl9dmFyIGdlLGdpPW51bGw7ZnVuY3Rpb24gaHQoQSl7Z2U9QX1mdW5jdGlvbiBoKCl7aWYodHlwZW9mIGdlPCJ1IilyZXR1cm4gZ2U7bGV0IEE9RkEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6Z2l9dmFyIFY9bnVsbDthc3luYyBmdW5jdGlvbiB5dCgpe2xldCBBPWgoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO1Y9YXdhaXQgYUEoZSl9ZnVuY3Rpb24gZUkoQSl7Vj1BfWFzeW5jIGZ1bmN0aW9uIEYoKXtpZihWIT09bnVsbClyZXR1cm4gVi50ZXJtaW5hdGVkJiZhd2FpdCB5dCgpLFY7bGV0IEE9ZHQoKTtyZXR1cm4gQSE9PW51bGw/QTooYXdhaXQgeXQoKSxWKX1hc3luYyBmdW5jdGlvbiBsaShBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuSW1hZ2V9XSxuPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBTPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtuPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFMpfX1sZXQgaT1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUz1hd2FpdCBlLmFycmF5QnVmZmVyKCk7aT17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShTKX19bGV0IG89W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOm59LHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOml9XSxJPVtdLGM9bi5wYXRoO0kucHVzaChjKTtsZXQgQj1pLnBhdGg7SS5wdXNoKEIpLEkucHVzaCgiMCIpLEkucHVzaCgiMSIpLEkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmNvbG9yT3V0cHV0JiZ0LmNvbG9yT3V0cHV0JiZJLnB1c2goIi0tY29sb3Itb3V0cHV0IiksdC5jb25maWdGaWxlJiZJLnB1c2goIi0tY29uZmlnLWZpbGUiLHQuY29uZmlnRmlsZS50b1N0cmluZygpKSx0LmZyYW1lJiZJLnB1c2goIi0tZnJhbWUiLHQuZnJhbWUudG9TdHJpbmcoKSksdC5ub1ByZXNlbnRhdGlvblN0YXRlT3V0cHV0JiZ0Lm5vUHJlc2VudGF0aW9uU3RhdGVPdXRwdXQmJkkucHVzaCgiLS1uby1wcmVzZW50YXRpb24tc3RhdGUtb3V0cHV0IiksdC5ub0JpdG1hcE91dHB1dCYmdC5ub0JpdG1hcE91dHB1dCYmSS5wdXNoKCItLW5vLWJpdG1hcC1vdXRwdXQiKTtsZXQgZj0iYXBwbHktcHJlc2VudGF0aW9uLXN0YXRlLXRvLWltYWdlIixnPXQ/LndlYldvcmtlcjtnPT09dm9pZCAwJiYoZz1hd2FpdCBGKCkpO2xldHt3ZWJXb3JrZXI6QyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpwLG91dHB1dHM6UX09YXdhaXQgeShmLEkscixvLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6Zyxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnAhPT0iIil0aHJvdyBuZXcgRXJyb3IocCk7cmV0dXJue3dlYldvcmtlcjpDLHByZXNlbnRhdGlvblN0YXRlT3V0U3RyZWFtOlFbMF0/LmRhdGEsb3V0cHV0SW1hZ2U6UVsxXT8uZGF0YX19dmFyIEJpPWxpO2FzeW5jIGZ1bmN0aW9uIHVpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuQmluYXJ5U3RyZWFtfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2kucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5yZWFkRmlsZU9ubHkmJmUucmVhZEZpbGVPbmx5JiZpLnB1c2goIi0tcmVhZC1maWxlLW9ubHkiKSxlLnJlYWREYXRhc2V0JiZlLnJlYWREYXRhc2V0JiZpLnB1c2goIi0tcmVhZC1kYXRhc2V0IiksZS5yZWFkWGZlckF1dG8mJmUucmVhZFhmZXJBdXRvJiZpLnB1c2goIi0tcmVhZC14ZmVyLWF1dG8iKSxlLnJlYWRYZmVyRGV0ZWN0JiZlLnJlYWRYZmVyRGV0ZWN0JiZpLnB1c2goIi0tcmVhZC14ZmVyLWRldGVjdCIpLGUucmVhZFhmZXJMaXR0bGUmJmUucmVhZFhmZXJMaXR0bGUmJmkucHVzaCgiLS1yZWFkLXhmZXItbGl0dGxlIiksZS5yZWFkWGZlckJpZyYmZS5yZWFkWGZlckJpZyYmaS5wdXNoKCItLXJlYWQteGZlci1iaWciKSxlLnJlYWRYZmVySW1wbGljaXQmJmUucmVhZFhmZXJJbXBsaWNpdCYmaS5wdXNoKCItLXJlYWQteGZlci1pbXBsaWNpdCIpLGUuYWNjZXB0T2RkTGVuZ3RoJiZlLmFjY2VwdE9kZExlbmd0aCYmaS5wdXNoKCItLWFjY2VwdC1vZGQtbGVuZ3RoIiksZS5hc3N1bWVFdmVuTGVuZ3RoJiZlLmFzc3VtZUV2ZW5MZW5ndGgmJmkucHVzaCgiLS1hc3N1bWUtZXZlbi1sZW5ndGgiKSxlLmVuYWJsZUNwMjQ2JiZlLmVuYWJsZUNwMjQ2JiZpLnB1c2goIi0tZW5hYmxlLWNwMjQ2IiksZS5kaXNhYmxlQ3AyNDYmJmUuZGlzYWJsZUNwMjQ2JiZpLnB1c2goIi0tZGlzYWJsZS1jcDI0NiIpLGUucmV0YWluVW4mJmUucmV0YWluVW4mJmkucHVzaCgiLS1yZXRhaW4tdW4iKSxlLmNvbnZlcnRVbiYmZS5jb252ZXJ0VW4mJmkucHVzaCgiLS1jb252ZXJ0LXVuIiksZS5lbmFibGVDb3JyZWN0aW9uJiZlLmVuYWJsZUNvcnJlY3Rpb24mJmkucHVzaCgiLS1lbmFibGUtY29ycmVjdGlvbiIpLGUuZGlzYWJsZUNvcnJlY3Rpb24mJmUuZGlzYWJsZUNvcnJlY3Rpb24mJmkucHVzaCgiLS1kaXNhYmxlLWNvcnJlY3Rpb24iKTtsZXQgYz0icmVhZC1kaWNvbS1lbmNhcHN1bGF0ZWQtcGRmIixCPWU/LndlYldvcmtlcjtCPT09dm9pZCAwJiYoQj1hd2FpdCBGKCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTphLHN0ZGVycjpmLG91dHB1dHM6Z309YXdhaXQgeShjLGksdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6Qixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoYSE9PTAmJmYhPT0iIil0aHJvdyBuZXcgRXJyb3IoZik7cmV0dXJue3dlYldvcmtlcjpzLHBkZkJpbmFyeU91dHB1dDooZ1swXT8uZGF0YSkuZGF0YX19dmFyIGNpPXVpO2FzeW5jIGZ1bmN0aW9uIENpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuVGV4dFN0cmVhbX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IHU9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkodSl9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpZihpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUucmVhZEZpbGVPbmx5JiZlLnJlYWRGaWxlT25seSYmaS5wdXNoKCItLXJlYWQtZmlsZS1vbmx5IiksZS5yZWFkRGF0YXNldCYmZS5yZWFkRGF0YXNldCYmaS5wdXNoKCItLXJlYWQtZGF0YXNldCIpLGUucmVhZFhmZXJBdXRvJiZlLnJlYWRYZmVyQXV0byYmaS5wdXNoKCItLXJlYWQteGZlci1hdXRvIiksZS5yZWFkWGZlckRldGVjdCYmZS5yZWFkWGZlckRldGVjdCYmaS5wdXNoKCItLXJlYWQteGZlci1kZXRlY3QiKSxlLnJlYWRYZmVyTGl0dGxlJiZlLnJlYWRYZmVyTGl0dGxlJiZpLnB1c2goIi0tcmVhZC14ZmVyLWxpdHRsZSIpLGUucmVhZFhmZXJCaWcmJmUucmVhZFhmZXJCaWcmJmkucHVzaCgiLS1yZWFkLXhmZXItYmlnIiksZS5yZWFkWGZlckltcGxpY2l0JiZlLnJlYWRYZmVySW1wbGljaXQmJmkucHVzaCgiLS1yZWFkLXhmZXItaW1wbGljaXQiKSxlLnByb2Nlc3NpbmdEZXRhaWxzJiZlLnByb2Nlc3NpbmdEZXRhaWxzJiZpLnB1c2goIi0tcHJvY2Vzc2luZy1kZXRhaWxzIiksZS51bmtub3duUmVsYXRpb25zaGlwJiZlLnVua25vd25SZWxhdGlvbnNoaXAmJmkucHVzaCgiLS11bmtub3duLXJlbGF0aW9uc2hpcCIpLGUuaW52YWxpZEl0ZW1WYWx1ZSYmZS5pbnZhbGlkSXRlbVZhbHVlJiZpLnB1c2goIi0taW52YWxpZC1pdGVtLXZhbHVlIiksZS5pZ25vcmVDb25zdHJhaW50cyYmZS5pZ25vcmVDb25zdHJhaW50cyYmaS5wdXNoKCItLWlnbm9yZS1jb25zdHJhaW50cyIpLGUuaWdub3JlSXRlbUVycm9ycyYmZS5pZ25vcmVJdGVtRXJyb3JzJiZpLnB1c2goIi0taWdub3JlLWl0ZW0tZXJyb3JzIiksZS5za2lwSW52YWxpZEl0ZW1zJiZlLnNraXBJbnZhbGlkSXRlbXMmJmkucHVzaCgiLS1za2lwLWludmFsaWQtaXRlbXMiKSxlLmRpc2FibGVWckNoZWNrZXImJmUuZGlzYWJsZVZyQ2hlY2tlciYmaS5wdXNoKCItLWRpc2FibGUtdnItY2hlY2tlciIpLGUuY2hhcnNldFJlcXVpcmUmJmUuY2hhcnNldFJlcXVpcmUmJmkucHVzaCgiLS1jaGFyc2V0LXJlcXVpcmUiKSxlLmNoYXJzZXRBc3N1bWUmJmkucHVzaCgiLS1jaGFyc2V0LWFzc3VtZSIsZS5jaGFyc2V0QXNzdW1lLnRvU3RyaW5nKCkpLGUuY2hhcnNldENoZWNrQWxsJiZlLmNoYXJzZXRDaGVja0FsbCYmaS5wdXNoKCItLWNoYXJzZXQtY2hlY2stYWxsIiksZS5jb252ZXJ0VG9VdGY4JiZlLmNvbnZlcnRUb1V0ZjgmJmkucHVzaCgiLS1jb252ZXJ0LXRvLXV0ZjgiKSxlLnVybFByZWZpeCYmaS5wdXNoKCItLXVybC1wcmVmaXgiLGUudXJsUHJlZml4LnRvU3RyaW5nKCkpLGUuaHRtbDMyJiZlLmh0bWwzMiYmaS5wdXNoKCItLWh0bWwtMzIiKSxlLmh0bWw0MCYmZS5odG1sNDAmJmkucHVzaCgiLS1odG1sLTQwIiksZS54aHRtbDExJiZlLnhodG1sMTEmJmkucHVzaCgiLS14aHRtbC0xMSIpLGUuYWRkRG9jdW1lbnRUeXBlJiZlLmFkZERvY3VtZW50VHlwZSYmaS5wdXNoKCItLWFkZC1kb2N1bWVudC10eXBlIiksZS5jc3NSZWZlcmVuY2Upe2xldCB1PW4ubGVuZ3RoLnRvU3RyaW5nKCk7bi5wdXNoKHt0eXBlOkUuVGV4dFN0cmVhbSxkYXRhOntkYXRhOmUuY3NzUmVmZXJlbmNlfX0pLGkucHVzaCgiLS1jc3MtcmVmZXJlbmNlIix1KX1pZihlLmNzc0ZpbGUpe2xldCB1PWUuY3NzRmlsZSxwPXU7aWYodSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IHUuYXJyYXlCdWZmZXIoKTtwPXtwYXRoOnUubmFtZSxkYXRhOm5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkKX19aS5wdXNoKCItLWNzcy1maWxlIiksbi5wdXNoKHt0eXBlOkUuVGV4dEZpbGUsZGF0YTpwfSk7bGV0IFE9dSBpbnN0YW5jZW9mIEZpbGU/dS5uYW1lOnUucGF0aDtpLnB1c2goUSl9ZS5leHBhbmRJbmxpbmUmJmUuZXhwYW5kSW5saW5lJiZpLnB1c2goIi0tZXhwYW5kLWlubGluZSIpLGUubmV2ZXJFeHBhbmRJbmxpbmUmJmUubmV2ZXJFeHBhbmRJbmxpbmUmJmkucHVzaCgiLS1uZXZlci1leHBhbmQtaW5saW5lIiksZS5hbHdheXNFeHBhbmRJbmxpbmUmJmUuYWx3YXlzRXhwYW5kSW5saW5lJiZpLnB1c2goIi0tYWx3YXlzLWV4cGFuZC1pbmxpbmUiKSxlLnJlbmRlckZ1bGxEYXRhJiZlLnJlbmRlckZ1bGxEYXRhJiZpLnB1c2goIi0tcmVuZGVyLWZ1bGwtZGF0YSIpLGUuc2VjdGlvblRpdGxlSW5saW5lJiZlLnNlY3Rpb25UaXRsZUlubGluZSYmaS5wdXNoKCItLXNlY3Rpb24tdGl0bGUtaW5saW5lIiksZS5kb2N1bWVudFR5cGVUaXRsZSYmZS5kb2N1bWVudFR5cGVUaXRsZSYmaS5wdXNoKCItLWRvY3VtZW50LXR5cGUtdGl0bGUiKSxlLnBhdGllbnRJbmZvVGl0bGUmJmUucGF0aWVudEluZm9UaXRsZSYmaS5wdXNoKCItLXBhdGllbnQtaW5mby10aXRsZSIpLGUubm9Eb2N1bWVudEhlYWRlciYmZS5ub0RvY3VtZW50SGVhZGVyJiZpLnB1c2goIi0tbm8tZG9jdW1lbnQtaGVhZGVyIiksZS5yZW5kZXJJbmxpbmVDb2RlcyYmZS5yZW5kZXJJbmxpbmVDb2RlcyYmaS5wdXNoKCItLXJlbmRlci1pbmxpbmUtY29kZXMiKSxlLmNvbmNlcHROYW1lQ29kZXMmJmUuY29uY2VwdE5hbWVDb2RlcyYmaS5wdXNoKCItLWNvbmNlcHQtbmFtZS1jb2RlcyIpLGUubnVtZXJpY1VuaXRDb2RlcyYmZS5udW1lcmljVW5pdENvZGVzJiZpLnB1c2goIi0tbnVtZXJpYy11bml0LWNvZGVzIiksZS5jb2RlVmFsdWVVbml0JiZlLmNvZGVWYWx1ZVVuaXQmJmkucHVzaCgiLS1jb2RlLXZhbHVlLXVuaXQiKSxlLmNvZGVNZWFuaW5nVW5pdCYmZS5jb2RlTWVhbmluZ1VuaXQmJmkucHVzaCgiLS1jb2RlLW1lYW5pbmctdW5pdCIpLGUucmVuZGVyQWxsQ29kZXMmJmUucmVuZGVyQWxsQ29kZXMmJmkucHVzaCgiLS1yZW5kZXItYWxsLWNvZGVzIiksZS5jb2RlRGV0YWlsc1Rvb2x0aXAmJmUuY29kZURldGFpbHNUb29sdGlwJiZpLnB1c2goIi0tY29kZS1kZXRhaWxzLXRvb2x0aXAiKTtsZXQgYz0ic3RydWN0dXJlZC1yZXBvcnQtdG8taHRtbCIsQj1lPy53ZWJXb3JrZXI7Qj09PXZvaWQgMCYmKEI9YXdhaXQgRigpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6YSxzdGRlcnI6ZixvdXRwdXRzOmd9PWF3YWl0IHkoYyxpLHQsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOkIsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGEhPT0wJiZmIT09IiIpdGhyb3cgbmV3IEVycm9yKGYpO3JldHVybnt3ZWJXb3JrZXI6cyxvdXRwdXRUZXh0OihnWzBdPy5kYXRhKS5kYXRhfX12YXIgZmk9Q2k7YXN5bmMgZnVuY3Rpb24gRWkoQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5UZXh0U3RyZWFtfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2kucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS51bmtub3duUmVsYXRpb25zaGlwJiZlLnVua25vd25SZWxhdGlvbnNoaXAmJmkucHVzaCgiLS11bmtub3duLXJlbGF0aW9uc2hpcCIpLGUuaW52YWxpZEl0ZW1WYWx1ZSYmZS5pbnZhbGlkSXRlbVZhbHVlJiZpLnB1c2goIi0taW52YWxpZC1pdGVtLXZhbHVlIiksZS5pZ25vcmVDb25zdHJhaW50cyYmZS5pZ25vcmVDb25zdHJhaW50cyYmaS5wdXNoKCItLWlnbm9yZS1jb25zdHJhaW50cyIpLGUuaWdub3JlSXRlbUVycm9ycyYmZS5pZ25vcmVJdGVtRXJyb3JzJiZpLnB1c2goIi0taWdub3JlLWl0ZW0tZXJyb3JzIiksZS5za2lwSW52YWxpZEl0ZW1zJiZlLnNraXBJbnZhbGlkSXRlbXMmJmkucHVzaCgiLS1za2lwLWludmFsaWQtaXRlbXMiKSxlLm5vRG9jdW1lbnRIZWFkZXImJmUubm9Eb2N1bWVudEhlYWRlciYmaS5wdXNoKCItLW5vLWRvY3VtZW50LWhlYWRlciIpLGUubnVtYmVyTmVzdGVkSXRlbXMmJmUubnVtYmVyTmVzdGVkSXRlbXMmJmkucHVzaCgiLS1udW1iZXItbmVzdGVkLWl0ZW1zIiksZS5zaG9ydGVuTG9uZ1ZhbHVlcyYmZS5zaG9ydGVuTG9uZ1ZhbHVlcyYmaS5wdXNoKCItLXNob3J0ZW4tbG9uZy12YWx1ZXMiKSxlLnByaW50SW5zdGFuY2VVaWQmJmUucHJpbnRJbnN0YW5jZVVpZCYmaS5wdXNoKCItLXByaW50LWluc3RhbmNlLXVpZCIpLGUucHJpbnRTb3BjbGFzc1Nob3J0JiZlLnByaW50U29wY2xhc3NTaG9ydCYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLXNob3J0IiksZS5wcmludFNvcGNsYXNzTG9uZyYmZS5wcmludFNvcGNsYXNzTG9uZyYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLWxvbmciKSxlLnByaW50U29wY2xhc3NVaWQmJmUucHJpbnRTb3BjbGFzc1VpZCYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLXVpZCIpLGUucHJpbnRBbGxDb2RlcyYmZS5wcmludEFsbENvZGVzJiZpLnB1c2goIi0tcHJpbnQtYWxsLWNvZGVzIiksZS5wcmludEludmFsaWRDb2RlcyYmZS5wcmludEludmFsaWRDb2RlcyYmaS5wdXNoKCItLXByaW50LWludmFsaWQtY29kZXMiKSxlLnByaW50VGVtcGxhdGVJZCYmZS5wcmludFRlbXBsYXRlSWQmJmkucHVzaCgiLS1wcmludC10ZW1wbGF0ZS1pZCIpLGUuaW5kaWNhdGVFbmhhbmNlZCYmZS5pbmRpY2F0ZUVuaGFuY2VkJiZpLnB1c2goIi0taW5kaWNhdGUtZW5oYW5jZWQiKSxlLnByaW50Q29sb3ImJmUucHJpbnRDb2xvciYmaS5wdXNoKCItLXByaW50LWNvbG9yIik7bGV0IGM9InN0cnVjdHVyZWQtcmVwb3J0LXRvLXRleHQiLEI9ZT8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOmEsc3RkZXJyOmYsb3V0cHV0czpnfT1hd2FpdCB5KGMsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpCLG5vQ29weTplPy5ub0NvcHl9KTtpZihhIT09MCYmZiE9PSIiKXRocm93IG5ldyBFcnJvcihmKTtyZXR1cm57d2ViV29ya2VyOnMsb3V0cHV0VGV4dDooZ1swXT8uZGF0YSkuZGF0YX19dmFyIHBpPUVpO2FzeW5jIGZ1bmN0aW9uIFFpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBDPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEMpfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aWYoaS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgZS50YWdzVG9SZWFkPCJ1Iil7bGV0IEM9bi5sZW5ndGgudG9TdHJpbmcoKTtuLnB1c2goe3R5cGU6RS5Kc29uQ29tcGF0aWJsZSxkYXRhOmUudGFnc1RvUmVhZH0pLGkucHVzaCgiLS10YWdzLXRvLXJlYWQiLEMpfWxldCBjPSJyZWFkLWRpY29tLXRhZ3MiLHt3ZWJXb3JrZXI6QixyZXR1cm5WYWx1ZTpzLHN0ZGVycjphLG91dHB1dHM6Zn09YXdhaXQgeShjLGksdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6ZT8ud2ViV29ya2VyPz9udWxsfSk7aWYocyE9PTApdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6Qix0YWdzOmZbMF0uZGF0YX19dmFyIG1pPVFpO2FzeW5jIGZ1bmN0aW9uIGRpKEEsZT0hMSx0PXt9KXtsZXQgcj1be3R5cGU6RS5JbWFnZX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZX1dLG49W10saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksaS5wdXNoKCItLWlucHV0LWltYWdlcyIpLEEuZm9yRWFjaChDPT57bi5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOkN9KSxpLnB1c2goQy5wYXRoKX0pLHR5cGVvZiBlPCJ1IiYmZSYmaS5wdXNoKCItLXNpbmdsZS1zb3J0ZWQtc2VyaWVzIik7bGV0IGM9InJlYWQtaW1hZ2UtZGljb20tZmlsZS1zZXJpZXMiLHt3ZWJXb3JrZXI6QixyZXR1cm5WYWx1ZTpzLHN0ZGVycjphLG91dHB1dHM6Zn09YXdhaXQgeShjLGkscixuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6dD8ud2ViV29ya2VyPz9udWxsfSk7aWYocyE9PTApdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6QixvdXRwdXRJbWFnZTpmWzBdLmRhdGEsc29ydGVkRmlsZW5hbWVzOmZbMV0uZGF0YX19dmFyIGxlPWRpO3ZhciBoaT10eXBlb2YgZ2xvYmFsVGhpcy5uYXZpZ2F0b3I/LmhhcmR3YXJlQ29uY3VycmVuY3k9PSJudW1iZXIiP2dsb2JhbFRoaXMubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k6NCx3dD04O2FzeW5jIGZ1bmN0aW9uIHlpKEE9e2lucHV0SW1hZ2VzOltdfSl7bGV0IGU9QS53ZWJXb3JrZXJQb29sPz9udWxsO2U9PT1udWxsJiYoZT1uZXcgT0EoaGksbGUpKTtsZXQgdD1bXTtpZihBLmlucHV0SW1hZ2VzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignImlucHV0LWltYWdlcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtpZihhd2FpdCBQcm9taXNlLmFsbChBLmlucHV0SW1hZ2VzLm1hcChhc3luYyByPT57bGV0IG49cjtpZihyIGluc3RhbmNlb2YgRmlsZSl7bGV0IGk9YXdhaXQgci5hcnJheUJ1ZmZlcigpO249e3BhdGg6ci5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoaSl9fXQucHVzaChuKX0pKSxBLnNpbmdsZVNvcnRlZFNlcmllcyl7bGV0IHI9W107Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDtjKz13dCl7bGV0IEI9dC5zbGljZShjLGMrd3QpO3IucHVzaChbQixBLnNpbmdsZVNvcnRlZFNlcmllcyx7fV0pfWxldCBuPWF3YWl0IGUucnVuVGFza3MocikucHJvbWlzZSxpPW4ubWFwKGM9PmMub3V0cHV0SW1hZ2UpLG89bi5yZWR1Y2UoKGMsQik9PmMuY29uY2F0KEIuc29ydGVkRmlsZW5hbWVzKSxbXSk7cmV0dXJue291dHB1dEltYWdlOlRBKGkpLHdlYldvcmtlclBvb2w6ZSxzb3J0ZWRGaWxlbmFtZXM6b319ZWxzZXtsZXQgcj1bW3QsQS5zaW5nbGVTb3J0ZWRTZXJpZXMse31dXSxuPWF3YWl0IGUucnVuVGFza3MocikucHJvbWlzZTtyZXR1cm57b3V0cHV0SW1hZ2U6blswXS5vdXRwdXRJbWFnZSx3ZWJXb3JrZXJQb29sOmUsc29ydGVkRmlsZW5hbWVzOm5bMF0uc29ydGVkRmlsZW5hbWVzfX19dmFyIHdpPXlpO2FzeW5jIGZ1bmN0aW9uIERpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSW1hZ2V9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGV9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBwPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KHApfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKTtsZXQgQj0icmVhZC1zZWdtZW50YXRpb24iLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOmcsb3V0cHV0czpDfT1hd2FpdCB5KEIsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihmIT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOmEsc2VnSW1hZ2U6Q1swXT8uZGF0YSxtZXRhSW5mbzpDWzFdPy5kYXRhfX12YXIgU2k9RGk7YXN5bmMgZnVuY3Rpb24ga2koQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5JbWFnZX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IHA9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkocCl9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUubWVyZ2VTZWdtZW50cyYmZS5tZXJnZVNlZ21lbnRzJiZpLnB1c2goIi0tbWVyZ2Utc2VnbWVudHMiKTtsZXQgQj0icmVhZC1vdmVybGFwcGluZy1zZWdtZW50YXRpb24iLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOmcsb3V0cHV0czpDfT1hd2FpdCB5KEIsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihmIT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOmEsc2VnSW1hZ2U6Q1swXT8uZGF0YSxtZXRhSW5mbzpDWzFdPy5kYXRhfX12YXIgRmk9a2k7YXN5bmMgZnVuY3Rpb24gYmkoQSxlLHQscj17cmVmRGljb21TZXJpZXM6W119KXtsZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLGk9W3t0eXBlOkUuSW1hZ2UsZGF0YTpBfSx7dHlwZTpFLkpzb25Db21wYXRpYmxlLGRhdGE6ZX1dLG89W107by5wdXNoKCIwIiksby5wdXNoKCIxIik7bGV0IEI9dDtpZihvLnB1c2goQiksby5wdXNoKCItLW1lbW9yeS1pbyIpLHIucmVmRGljb21TZXJpZXMpe2lmKHIucmVmRGljb21TZXJpZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcicmVmLWRpY29tLXNlcmllcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtvLnB1c2goIi0tcmVmLWRpY29tLXNlcmllcyIpLGF3YWl0IFByb21pc2UuYWxsKHIucmVmRGljb21TZXJpZXMubWFwKGFzeW5jIFE9PntsZXQgZD1RO2lmKFEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgWj1hd2FpdCBRLmFycmF5QnVmZmVyKCk7ZD17cGF0aDpRLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShaKX19aS5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOmR9KTtsZXQgUz1RIGluc3RhbmNlb2YgRmlsZT9RLm5hbWU6ZC5wYXRoO28ucHVzaChTKX0pKX1yLnNraXBFbXB0eVNsaWNlcyYmci5za2lwRW1wdHlTbGljZXMmJm8ucHVzaCgiLS1za2lwLWVtcHR5LXNsaWNlcyIpLHIudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmci51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZvLnB1c2goIi0tdXNlLWxhYmVsaWQtYXMtc2VnbWVudG51bWJlciIpO2xldCBzPSJ3cml0ZS1zZWdtZW50YXRpb24iLGE9cj8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjpmLHJldHVyblZhbHVlOmcsc3RkZXJyOkMsb3V0cHV0czp1fT1hd2FpdCB5KHMsbyxuLGkse3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjphLG5vQ29weTpyPy5ub0NvcHl9KTtpZihnIT09MCYmQyE9PSIiKXRocm93IG5ldyBFcnJvcihDKTtyZXR1cm57d2ViV29ya2VyOmYsb3V0cHV0RGljb21GaWxlOnVbMF0/LmRhdGF9fXZhciBSaT1iaTthc3luYyBmdW5jdGlvbiBVaShBLGUsdCxyPXtyZWZEaWNvbVNlcmllczpbXX0pe2xldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0saT1be3R5cGU6RS5JbWFnZSxkYXRhOkF9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGUsZGF0YTplfV0sbz1bXTtvLnB1c2goIjAiKSxvLnB1c2goIjEiKTtsZXQgQj10O2lmKG8ucHVzaChCKSxvLnB1c2goIi0tbWVtb3J5LWlvIiksci5yZWZEaWNvbVNlcmllcyl7aWYoci5yZWZEaWNvbVNlcmllcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJyZWYtZGljb20tc2VyaWVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO28ucHVzaCgiLS1yZWYtZGljb20tc2VyaWVzIiksYXdhaXQgUHJvbWlzZS5hbGwoci5yZWZEaWNvbVNlcmllcy5tYXAoYXN5bmMgUT0+e2xldCBkPVE7aWYoUSBpbnN0YW5jZW9mIEZpbGUpe2xldCBaPWF3YWl0IFEuYXJyYXlCdWZmZXIoKTtkPXtwYXRoOlEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFopfX1pLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6ZH0pO2xldCBTPVEgaW5zdGFuY2VvZiBGaWxlP1EubmFtZTpkLnBhdGg7by5wdXNoKFMpfSkpfXIuc2tpcEVtcHR5U2xpY2VzJiZyLnNraXBFbXB0eVNsaWNlcyYmby5wdXNoKCItLXNraXAtZW1wdHktc2xpY2VzIiksci51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZyLnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJm8ucHVzaCgiLS11c2UtbGFiZWxpZC1hcy1zZWdtZW50bnVtYmVyIik7bGV0IHM9IndyaXRlLW92ZXJsYXBwaW5nLXNlZ21lbnRhdGlvbiIsYT1yPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgRigpKTtsZXR7d2ViV29ya2VyOmYscmV0dXJuVmFsdWU6ZyxzdGRlcnI6QyxvdXRwdXRzOnV9PWF3YWl0IHkocyxvLG4saSx7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOmEsbm9Db3B5OnI/Lm5vQ29weX0pO2lmKGchPT0wJiZDIT09IiIpdGhyb3cgbmV3IEVycm9yKEMpO3JldHVybnt3ZWJXb3JrZXI6ZixvdXRwdXREaWNvbUZpbGU6dVswXT8uZGF0YX19dmFyIE5pPVVpO2FzeW5jIGZ1bmN0aW9uIFRpKEEsZSx0PXtyZWZEaWNvbVNlcmllczpbXSxzZWdJbWFnZXM6W119KXtsZXQgcj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG49W3t0eXBlOkUuSnNvbkNvbXBhdGlibGUsZGF0YTpBfV0saT1bXTtpLnB1c2goIjAiKTtsZXQgST1lO2lmKGkucHVzaChJKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5yZWZEaWNvbVNlcmllcyl7aWYodC5yZWZEaWNvbVNlcmllcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJyZWYtZGljb20tc2VyaWVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO2kucHVzaCgiLS1yZWYtZGljb20tc2VyaWVzIiksYXdhaXQgUHJvbWlzZS5hbGwodC5yZWZEaWNvbVNlcmllcy5tYXAoYXN5bmMgdT0+e2xldCBwPXU7aWYodSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IHUuYXJyYXlCdWZmZXIoKTtwPXtwYXRoOnUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1uLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cH0pO2xldCBRPXUgaW5zdGFuY2VvZiBGaWxlP3UubmFtZTpwLnBhdGg7aS5wdXNoKFEpfSkpfWlmKHQuc2VnSW1hZ2VzKXtpZih0LnNlZ0ltYWdlcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzZWctaW1hZ2VzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO2kucHVzaCgiLS1zZWctaW1hZ2VzIiksYXdhaXQgUHJvbWlzZS5hbGwodC5zZWdJbWFnZXMubWFwKGFzeW5jIHU9PntsZXQgcD11O2lmKHUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCB1LmFycmF5QnVmZmVyKCk7cD17cGF0aDp1Lm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bi5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnB9KTtsZXQgUT11IGluc3RhbmNlb2YgRmlsZT91Lm5hbWU6cC5wYXRoO2kucHVzaChRKX0pKX10LnNraXBFbXB0eVNsaWNlcyYmdC5za2lwRW1wdHlTbGljZXMmJmkucHVzaCgiLS1za2lwLWVtcHR5LXNsaWNlcyIpLHQudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmdC51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZpLnB1c2goIi0tdXNlLWxhYmVsaWQtYXMtc2VnbWVudG51bWJlciIpO2xldCBjPSJ3cml0ZS1tdWx0aS1zZWdtZW50YXRpb24iLEI9dD8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOmEsc3RkZXJyOmYsb3V0cHV0czpnfT1hd2FpdCB5KGMsaSxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpCLG5vQ29weTp0Py5ub0NvcHl9KTtpZihhIT09MCYmZiE9PSIiKXRocm93IG5ldyBFcnJvcihmKTtyZXR1cm57d2ViV29ya2VyOnMsb3V0cHV0RGljb21GaWxlOmdbMF0/LmRhdGF9fXZhciBHaT1UaTt2YXIgRHQ9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIElJPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZUk9KEEsdCk9Pntmb3IodmFyIEkgaW4gdClJSShBLEkse2dldDp0W0ldLGVudW1lcmFibGU6ITB9KX07dmFyIHZBPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGdJPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHJJPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxwQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLCRBPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLG9JPXtjYW5IYW5kbGU6QT0+JEEoQSkmJkFbdkFdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6dCxwb3J0MjpJfT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGlBKEEsdCksW0ksW0ldXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxuSShBKX19LGlJPXtjYW5IYW5kbGU6QT0+JEEoQSkmJmVBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IHQ7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj90PXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06dD17aXNFcnJvcjohMSx2YWx1ZTpBfSxbdCxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxBdD1uZXcgTWFwKFtbInByb3h5IixvSV0sWyJ0aHJvdyIsaUldXSk7ZnVuY3Rpb24gQ0koQSx0KXtmb3IobGV0IEkgb2YgQSlpZih0PT09SXx8ST09PSIqInx8SSBpbnN0YW5jZW9mIFJlZ0V4cCYmSS50ZXN0KHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGlBKEEsdD1nbG9iYWxUaGlzLEk9WyIqIl0pe3QuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gZShnKXtpZighZ3x8IWcuZGF0YSlyZXR1cm47aWYoIUNJKEksZy5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luIFwnJHtnLm9yaWdpbn1cJyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6cix0eXBlOm8scGF0aDpufT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxnLmRhdGEpLGE9KGcuZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoYiksUTt0cnl7bGV0IEI9bi5zbGljZSgwLC0xKS5yZWR1Y2UoKGYscyk9PmZbc10sQSksaT1uLnJlZHVjZSgoZixzKT0+ZltzXSxBKTtzd2l0Y2gobyl7Y2FzZSJHRVQiOlE9aTticmVhaztjYXNlIlNFVCI6QltuLnNsaWNlKC0xKVswXV09YihnLmRhdGEudmFsdWUpLFE9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6UT1pLmFwcGx5KEIsYSk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgaSguLi5hKTtRPWFJKGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpzfT1uZXcgTWVzc2FnZUNoYW5uZWw7aUEoQSxzKSxRPUZBKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOlE9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChCKXtRPXt2YWx1ZTpCLFtlQV06MH19UHJvbWlzZS5yZXNvbHZlKFEpLmNhdGNoKEI9Pih7dmFsdWU6QixbZUFdOjB9KSkudGhlbihCPT57bGV0W2ksZl09b0EoQik7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse2lkOnJ9KSxmKSxvPT09IlJFTEVBU0UiJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixlKSx0dCh0KSxwQSBpbiBBJiZ0eXBlb2YgQVtwQV09PSJmdW5jdGlvbiImJkFbcEFdKCkpfSkuY2F0Y2goQj0+e2xldFtpLGZdPW9BKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbZUFdOjB9KTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpfSl9KSx0LnN0YXJ0JiZ0LnN0YXJ0KCl9ZnVuY3Rpb24gQkkoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gdHQoQSl7QkkoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBuSShBLHQpe3JldHVybiBTQShBLFtdLHQpfWZ1bmN0aW9uIElBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBJdChBKXtyZXR1cm4gcShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9Pnt0dChBKX0pfXZhciBnQT1uZXcgV2Vha01hcCxyQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgdD0oZ0EuZ2V0KEEpfHwwKS0xO2dBLnNldChBLHQpLHQ9PT0wJiZJdChBKX0pO2Z1bmN0aW9uIHNJKEEsdCl7bGV0IEk9KGdBLmdldCh0KXx8MCkrMTtnQS5zZXQodCxJKSxyQSYmckEucmVnaXN0ZXIoQSx0LEEpfWZ1bmN0aW9uIFFJKEEpe3JBJiZyQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIFNBKEEsdD1bXSxJPWZ1bmN0aW9uKCl7fSl7bGV0IGU9ITEsZz1uZXcgUHJveHkoSSx7Z2V0KHIsbyl7aWYoSUEoZSksbz09PXJJKXJldHVybigpPT57UUkoZyksSXQoQSksZT0hMH07aWYobz09PSJ0aGVuIil7aWYodC5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5nfTtsZXQgbj1xKEEse3R5cGU6IkdFVCIscGF0aDp0Lm1hcChhPT5hLnRvU3RyaW5nKCkpfSkudGhlbihiKTtyZXR1cm4gbi50aGVuLmJpbmQobil9cmV0dXJuIFNBKEEsWy4uLnQsb10pfSxzZXQocixvLG4pe0lBKGUpO2xldFthLFFdPW9BKG4pO3JldHVybiBxKEEse3R5cGU6IlNFVCIscGF0aDpbLi4udCxvXS5tYXAoQj0+Qi50b1N0cmluZygpKSx2YWx1ZTphfSxRKS50aGVuKGIpfSxhcHBseShyLG8sbil7SUEoZSk7bGV0IGE9dFt0Lmxlbmd0aC0xXTtpZihhPT09Z0kpcmV0dXJuIHEoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihiKTtpZihhPT09ImJpbmQiKXJldHVybiBTQShBLHQuc2xpY2UoMCwtMSkpO2xldFtRLEJdPV9BKG4pO3JldHVybiBxKEEse3R5cGU6IkFQUExZIixwYXRoOnQubWFwKGk9PmkudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OlF9LEIpLnRoZW4oYil9LGNvbnN0cnVjdChyLG8pe0lBKGUpO2xldFtuLGFdPV9BKG8pO3JldHVybiBxKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDp0Lm1hcChRPT5RLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpufSxhKS50aGVuKGIpfX0pO3JldHVybiBzSShnLEEpLGd9ZnVuY3Rpb24gRUkoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gX0EoQSl7bGV0IHQ9QS5tYXAob0EpO3JldHVyblt0Lm1hcChJPT5JWzBdKSxFSSh0Lm1hcChJPT5JWzFdKSldfXZhciBldD1uZXcgV2Vha01hcDtmdW5jdGlvbiBGQShBLHQpe3JldHVybiBldC5zZXQoQSx0KSxBfWZ1bmN0aW9uIGFJKEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1t2QV06ITB9KX1mdW5jdGlvbiBvQShBKXtmb3IobGV0W3QsSV1vZiBBdClpZihJLmNhbkhhbmRsZShBKSl7bGV0W2UsZ109SS5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOnQsdmFsdWU6ZX0sZ119cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGV0LmdldChBKXx8W11dfWZ1bmN0aW9uIGIoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gQXQuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBxKEEsdCxJKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e2xldCBnPWNJKCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG8peyFvLmRhdGF8fCFvLmRhdGEuaWR8fG8uZGF0YS5pZCE9PWd8fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLGUoby5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpnfSx0KSxJKX0pfWZ1bmN0aW9uIGNJKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBXKEEsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkodCxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6Zkl9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOlVBfT1PYmplY3QsQkE9KEE9PnQ9PntsZXQgST1mSS5jYWxsKHQpO3JldHVybiBBW0ldfHwoQVtJXT1JLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksVT1BPT4oQT1BLnRvTG93ZXJDYXNlKCksdD0+QkEodCk9PT1BKSxuQT1BPT50PT50eXBlb2YgdD09PUEse2lzQXJyYXk6S309QXJyYXksWj1uQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gbEkoQSl7cmV0dXJuIEEhPT1udWxsJiYhWihBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFaKEEuY29uc3RydWN0b3IpJiZGKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBpdD1VKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIERJKEEpe2xldCB0O3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/dD1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6dD1BJiZBLmJ1ZmZlciYmaXQoQS5idWZmZXIpLHR9dmFyIHVJPW5BKCJzdHJpbmciKSxGPW5BKCJmdW5jdGlvbiIpLEN0PW5BKCJudW1iZXIiKSxzQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLGhJPUE9PkE9PT0hMHx8QT09PSExLENBPUE9PntpZihCQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCB0PVVBKEEpO3JldHVybih0PT09bnVsbHx8dD09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LGRJPVUoIkRhdGUiKSx5ST1VKCJGaWxlIiksd0k9VSgiQmxvYiIpLG1JPVUoIkZpbGVMaXN0IikscEk9QT0+c0EoQSkmJkYoQS5waXBlKSxTST1BPT57bGV0IHQ7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8RihBLmFwcGVuZCkmJigodD1CQShBKSk9PT0iZm9ybWRhdGEifHx0PT09Im9iamVjdCImJkYoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sRkk9VSgiVVJMU2VhcmNoUGFyYW1zIiksUkk9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIiIpO2Z1bmN0aW9uIFYoQSx0LHthbGxPd25LZXlzOkk9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgZSxnO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxLKEEpKWZvcihlPTAsZz1BLmxlbmd0aDtlPGc7ZSsrKXQuY2FsbChudWxsLEFbZV0sZSxBKTtlbHNle2xldCByPUk/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksbz1yLmxlbmd0aCxuO2ZvcihlPTA7ZTxvO2UrKyluPXJbZV0sdC5jYWxsKG51bGwsQVtuXSxuLEEpfX1mdW5jdGlvbiBCdChBLHQpe3Q9dC50b0xvd2VyQ2FzZSgpO2xldCBJPU9iamVjdC5rZXlzKEEpLGU9SS5sZW5ndGgsZztmb3IoO2UtLSA+MDspaWYoZz1JW2VdLHQ9PT1nLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGc7cmV0dXJuIG51bGx9dmFyIG50PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsc3Q9QT0+IVooQSkmJkEhPT1udDtmdW5jdGlvbiBOQSgpe2xldHtjYXNlbGVzczpBfT1zdCh0aGlzKSYmdGhpc3x8e30sdD17fSxJPShlLGcpPT57bGV0IHI9QSYmQnQodCxnKXx8ZztDQSh0W3JdKSYmQ0EoZSk/dFtyXT1OQSh0W3JdLGUpOkNBKGUpP3Rbcl09TkEoe30sZSk6SyhlKT90W3JdPWUuc2xpY2UoKTp0W3JdPWV9O2ZvcihsZXQgZT0wLGc9YXJndW1lbnRzLmxlbmd0aDtlPGc7ZSsrKWFyZ3VtZW50c1tlXSYmVihhcmd1bWVudHNbZV0sSSk7cmV0dXJuIHR9dmFyIE5JPShBLHQsSSx7YWxsT3duS2V5czplfT17fSk9PihWKHQsKGcscik9PntJJiZGKGcpP0Fbcl09VyhnLEkpOkFbcl09Z30se2FsbE93bktleXM6ZX0pLEEpLFVJPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksR0k9KEEsdCxJLGUpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSxlKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOnQucHJvdG90eXBlfSksSSYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSxJKX0sa0k9KEEsdCxJLGUpPT57bGV0IGcscixvLG49e307aWYodD10fHx7fSxBPT1udWxsKXJldHVybiB0O2Rve2ZvcihnPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLHI9Zy5sZW5ndGg7ci0tID4wOylvPWdbcl0sKCFlfHxlKG8sQSx0KSkmJiFuW29dJiYodFtvXT1BW29dLG5bb109ITApO0E9SSE9PSExJiZVQShBKX13aGlsZShBJiYoIUl8fEkoQSx0KSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gdH0sTEk9KEEsdCxJKT0+e0E9U3RyaW5nKEEpLChJPT09dm9pZCAwfHxJPkEubGVuZ3RoKSYmKEk9QS5sZW5ndGgpLEktPXQubGVuZ3RoO2xldCBlPUEuaW5kZXhPZih0LEkpO3JldHVybiBlIT09LTEmJmU9PT1JfSxKST1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoSyhBKSlyZXR1cm4gQTtsZXQgdD1BLmxlbmd0aDtpZighQ3QodCkpcmV0dXJuIG51bGw7bGV0IEk9bmV3IEFycmF5KHQpO2Zvcig7dC0tID4wOylJW3RdPUFbdF07cmV0dXJuIEl9LEhJPShBPT50PT5BJiZ0IGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZVQShVaW50OEFycmF5KSksWUk9KEEsdCk9PntsZXQgZT0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLGc7Zm9yKDsoZz1lLm5leHQoKSkmJiFnLmRvbmU7KXtsZXQgcj1nLnZhbHVlO3QuY2FsbChBLHJbMF0sclsxXSl9fSxiST0oQSx0KT0+e2xldCBJLGU9W107Zm9yKDsoST1BLmV4ZWModCkpIT09bnVsbDspZS5wdXNoKEkpO3JldHVybiBlfSxNST1VKCJIVE1MRm9ybUVsZW1lbnQiKSxxST1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxmdW5jdGlvbihJLGUsZyl7cmV0dXJuIGUudG9VcHBlckNhc2UoKStnfSkscnQ9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4odCxJKT0+QS5jYWxsKHQsSSkpKE9iamVjdC5wcm90b3R5cGUpLEtJPVUoIlJlZ0V4cCIpLFF0PShBLHQpPT57bGV0IEk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSksZT17fTtWKEksKGcscik9PntsZXQgbzsobz10KGcscixBKSkhPT0hMSYmKGVbcl09b3x8Zyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLGUpfSxPST1BPT57UXQoQSwodCxJKT0+e2lmKEYoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZihJKSE9PS0xKXJldHVybiExO2xldCBlPUFbSV07aWYoRihlKSl7aWYodC5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiB0KXt0LndyaXRhYmxlPSExO3JldHVybn10LnNldHx8KHQuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFwnIitJKyJcJyIpfSl9fSl9LFRJPShBLHQpPT57bGV0IEk9e30sZT1nPT57Zy5mb3JFYWNoKHI9PntJW3JdPSEwfSl9O3JldHVybiBLKEEpP2UoQSk6ZShTdHJpbmcoQSkuc3BsaXQodCkpLEl9LFBJPSgpPT57fSx4ST0oQSx0KT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6dCksUkE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixvdD0iMDEyMzQ1Njc4OSIsRXQ9e0RJR0lUOm90LEFMUEhBOlJBLEFMUEhBX0RJR0lUOlJBK1JBLnRvVXBwZXJDYXNlKCkrb3R9LGpJPShBPTE2LHQ9RXQuQUxQSEFfRElHSVQpPT57bGV0IEk9IiIse2xlbmd0aDplfT10O2Zvcig7QS0tOylJKz10W01hdGgucmFuZG9tKCkqZXwwXTtyZXR1cm4gSX07ZnVuY3Rpb24gV0koQSl7cmV0dXJuISEoQSYmRihBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIFpJPUE9PntsZXQgdD1uZXcgQXJyYXkoMTApLEk9KGUsZyk9PntpZihzQShlKSl7aWYodC5pbmRleE9mKGUpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gZSkpe3RbZ109ZTtsZXQgcj1LKGUpP1tdOnt9O3JldHVybiBWKGUsKG8sbik9PntsZXQgYT1JKG8sZysxKTshWihhKSYmKHJbbl09YSl9KSx0W2ddPXZvaWQgMCxyfX1yZXR1cm4gZX07cmV0dXJuIEkoQSwwKX0sVkk9VSgiQXN5bmNGdW5jdGlvbiIpLFhJPUE9PkEmJihzQShBKXx8RihBKSkmJkYoQS50aGVuKSYmRihBLmNhdGNoKSxDPXtpc0FycmF5OkssaXNBcnJheUJ1ZmZlcjppdCxpc0J1ZmZlcjpsSSxpc0Zvcm1EYXRhOlNJLGlzQXJyYXlCdWZmZXJWaWV3OkRJLGlzU3RyaW5nOnVJLGlzTnVtYmVyOkN0LGlzQm9vbGVhbjpoSSxpc09iamVjdDpzQSxpc1BsYWluT2JqZWN0OkNBLGlzVW5kZWZpbmVkOlosaXNEYXRlOmRJLGlzRmlsZTp5SSxpc0Jsb2I6d0ksaXNSZWdFeHA6S0ksaXNGdW5jdGlvbjpGLGlzU3RyZWFtOnBJLGlzVVJMU2VhcmNoUGFyYW1zOkZJLGlzVHlwZWRBcnJheTpISSxpc0ZpbGVMaXN0Om1JLGZvckVhY2g6VixtZXJnZTpOQSxleHRlbmQ6TkksdHJpbTpSSSxzdHJpcEJPTTpVSSxpbmhlcml0czpHSSx0b0ZsYXRPYmplY3Q6a0ksa2luZE9mOkJBLGtpbmRPZlRlc3Q6VSxlbmRzV2l0aDpMSSx0b0FycmF5OkpJLGZvckVhY2hFbnRyeTpZSSxtYXRjaEFsbDpiSSxpc0hUTUxGb3JtOk1JLGhhc093blByb3BlcnR5OnJ0LGhhc093blByb3A6cnQscmVkdWNlRGVzY3JpcHRvcnM6UXQsZnJlZXplTWV0aG9kczpPSSx0b09iamVjdFNldDpUSSx0b0NhbWVsQ2FzZTpxSSxub29wOlBJLHRvRmluaXRlTnVtYmVyOnhJLGZpbmRLZXk6QnQsZ2xvYmFsOm50LGlzQ29udGV4dERlZmluZWQ6c3QsQUxQSEFCRVQ6RXQsZ2VuZXJhdGVTdHJpbmc6akksaXNTcGVjQ29tcGxpYW50Rm9ybTpXSSx0b0pTT05PYmplY3Q6WkksaXNBc3luY0ZuOlZJLGlzVGhlbmFibGU6WEl9O2Z1bmN0aW9uIE8oQSx0LEksZSxnKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLHQmJih0aGlzLmNvZGU9dCksSSYmKHRoaXMuY29uZmlnPUkpLGUmJih0aGlzLnJlcXVlc3Q9ZSksZyYmKHRoaXMucmVzcG9uc2U9Zyl9Qy5pbmhlcml0cyhPLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6Qy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgYXQ9Ty5wcm90b3R5cGUsY3Q9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57Y3RbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTyxjdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGF0LCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO08uZnJvbT0oQSx0LEksZSxnLHIpPT57bGV0IG89T2JqZWN0LmNyZWF0ZShhdCk7cmV0dXJuIEMudG9GbGF0T2JqZWN0KEEsbyxmdW5jdGlvbihhKXtyZXR1cm4gYSE9PUVycm9yLnByb3RvdHlwZX0sbj0+biE9PSJpc0F4aW9zRXJyb3IiKSxPLmNhbGwobyxBLm1lc3NhZ2UsdCxJLGUsZyksby5jYXVzZT1BLG8ubmFtZT1BLm5hbWUsciYmT2JqZWN0LmFzc2lnbihvLHIpLG99O3ZhciBsPU87dmFyIFFBPW51bGw7ZnVuY3Rpb24gR0EoQSl7cmV0dXJuIEMuaXNQbGFpbk9iamVjdChBKXx8Qy5pc0FycmF5KEEpfWZ1bmN0aW9uIGx0KEEpe3JldHVybiBDLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIGZ0KEEsdCxJKXtyZXR1cm4gQT9BLmNvbmNhdCh0KS5tYXAoZnVuY3Rpb24oZyxyKXtyZXR1cm4gZz1sdChnKSwhSSYmcj8iWyIrZysiXSI6Z30pLmpvaW4oST8iLiI6IiIpOnR9ZnVuY3Rpb24gekkoQSl7cmV0dXJuIEMuaXNBcnJheShBKSYmIUEuc29tZShHQSl9dmFyIF9JPUMudG9GbGF0T2JqZWN0KEMse30sbnVsbCxmdW5jdGlvbih0KXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QodCl9KTtmdW5jdGlvbiB2SShBLHQsSSl7aWYoIUMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7dD10fHxuZXcoUUF8fEZvcm1EYXRhKSxJPUMudG9GbGF0T2JqZWN0KEkse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihjLHUpe3JldHVybiFDLmlzVW5kZWZpbmVkKHVbY10pfSk7bGV0IGU9SS5tZXRhVG9rZW5zLGc9SS52aXNpdG9yfHxCLHI9SS5kb3RzLG89SS5pbmRleGVzLGE9KEkuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmQy5pc1NwZWNDb21wbGlhbnRGb3JtKHQpO2lmKCFDLmlzRnVuY3Rpb24oZykpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBRKEUpe2lmKEU9PT1udWxsKXJldHVybiIiO2lmKEMuaXNEYXRlKEUpKXJldHVybiBFLnRvSVNPU3RyaW5nKCk7aWYoIWEmJkMuaXNCbG9iKEUpKXRocm93IG5ldyBsKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBDLmlzQXJyYXlCdWZmZXIoRSl8fEMuaXNUeXBlZEFycmF5KEUpP2EmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtFXSk6QnVmZmVyLmZyb20oRSk6RX1mdW5jdGlvbiBCKEUsYyx1KXtsZXQgeT1FO2lmKEUmJiF1JiZ0eXBlb2YgRT09Im9iamVjdCIpe2lmKEMuZW5kc1dpdGgoYywie30iKSljPWU/YzpjLnNsaWNlKDAsLTIpLEU9SlNPTi5zdHJpbmdpZnkoRSk7ZWxzZSBpZihDLmlzQXJyYXkoRSkmJnpJKEUpfHwoQy5pc0ZpbGVMaXN0KEUpfHxDLmVuZHNXaXRoKGMsIltdIikpJiYoeT1DLnRvQXJyYXkoRSkpKXJldHVybiBjPWx0KGMpLHkuZm9yRWFjaChmdW5jdGlvbihOLHRJKXshKEMuaXNVbmRlZmluZWQoTil8fE49PT1udWxsKSYmdC5hcHBlbmQobz09PSEwP2Z0KFtjXSx0SSxyKTpvPT09bnVsbD9jOmMrIltdIixRKE4pKX0pLCExfXJldHVybiBHQShFKT8hMDoodC5hcHBlbmQoZnQodSxjLHIpLFEoRSkpLCExKX1sZXQgaT1bXSxmPU9iamVjdC5hc3NpZ24oX0kse2RlZmF1bHRWaXNpdG9yOkIsY29udmVydFZhbHVlOlEsaXNWaXNpdGFibGU6R0F9KTtmdW5jdGlvbiBzKEUsYyl7aWYoIUMuaXNVbmRlZmluZWQoRSkpe2lmKGkuaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitjLmpvaW4oIi4iKSk7aS5wdXNoKEUpLEMuZm9yRWFjaChFLGZ1bmN0aW9uKHksUil7KCEoQy5pc1VuZGVmaW5lZCh5KXx8eT09PW51bGwpJiZnLmNhbGwodCx5LEMuaXNTdHJpbmcoUik/Ui50cmltKCk6UixjLGYpKT09PSEwJiZzKHksYz9jLmNvbmNhdChSKTpbUl0pfSksaS5wb3AoKX19aWYoIUMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBzKEEpLHR9dmFyIEo9dkk7ZnVuY3Rpb24gRHQoQSl7bGV0IHQ9eyIhIjoiJTI1MjEiLCJcJyI6IiUyNTI3IiwiKCI6IiUyNTI4IiwiKSI6IiUyNTI5IiwifiI6IiUyNTdFIiwiJTI1MjAiOiIrIiwiJTI1MDAiOiJcXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shXCcoKX5dfCUyNTIwfCUyNTAwL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX1mdW5jdGlvbiB1dChBLHQpe3RoaXMuX3BhaXJzPVtdLEEmJkooQSx0aGlzLHQpfXZhciBodD11dC5wcm90b3R5cGU7aHQuYXBwZW5kPWZ1bmN0aW9uKHQsSSl7dGhpcy5fcGFpcnMucHVzaChbdCxJXSl9O2h0LnRvU3RyaW5nPWZ1bmN0aW9uKHQpe2xldCBJPXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUsRHQpfTpEdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKGcpe3JldHVybiBJKGdbMF0pKyI9IitJKGdbMV0pfSwiIikuam9pbigiJiIpfTt2YXIgRUE9dXQ7ZnVuY3Rpb24gJEkoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lMjUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNTI0L2csIiQiKS5yZXBsYWNlKC8lMjUyQy9naSwiLCIpLnJlcGxhY2UoLyUyNTIwL2csIisiKS5yZXBsYWNlKC8lMjU1Qi9naSwiWyIpLnJlcGxhY2UoLyUyNTVEL2dpLCJdIil9ZnVuY3Rpb24gWChBLHQsSSl7aWYoIXQpcmV0dXJuIEE7bGV0IGU9SSYmSS5lbmNvZGV8fCRJLGc9SSYmSS5zZXJpYWxpemUscjtpZihnP3I9Zyh0LEkpOnI9Qy5pc1VSTFNlYXJjaFBhcmFtcyh0KT90LnRvU3RyaW5nKCk6bmV3IEVBKHQsSSkudG9TdHJpbmcoZSkscil7bGV0IG89QS5pbmRleE9mKCIlMjMiKTtvIT09LTEmJihBPUEuc2xpY2UoMCxvKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrcn1yZXR1cm4gQX12YXIga0E9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZSh0LEksZSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOnQscmVqZWN0ZWQ6SSxzeW5jaHJvbm91czplP2Uuc3luY2hyb25vdXM6ITEscnVuV2hlbjplP2UucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdCh0KXt0aGlzLmhhbmRsZXJzW3RdJiYodGhpcy5oYW5kbGVyc1t0XT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKHQpe0MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKGUpe2UhPT1udWxsJiZ0KGUpfSl9fSxMQT1rQTt2YXIgYUE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBkdD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6RUE7dmFyIHl0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgd3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgbXQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6ZHQsRm9ybURhdGE6eXQsQmxvYjp3dH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBKQT17fTtlSShKQSx7aGFzQnJvd3NlckVudjooKT0+cHQsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5BZSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PnRlfSk7dmFyIHB0PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLEFlPShBPT5wdCYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLHRlPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgdz17Li4uSkEsLi4ubXR9O2Z1bmN0aW9uIEhBKEEsdCl7cmV0dXJuIEooQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKEksZSxnLHIpe3JldHVybiB3LmlzTm9kZSYmQy5pc0J1ZmZlcihJKT8odGhpcy5hcHBlbmQoZSxJLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOnIuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sdCkpfWZ1bmN0aW9uIEllKEEpe3JldHVybiBDLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZyxBKS5tYXAodD0+dFswXT09PSJbXSI/IiI6dFsxXXx8dFswXSl9ZnVuY3Rpb24gZWUoQSl7bGV0IHQ9e30sST1PYmplY3Qua2V5cyhBKSxlLGc9SS5sZW5ndGgscjtmb3IoZT0wO2U8ZztlKyspcj1JW2VdLHRbcl09QVtyXTtyZXR1cm4gdH1mdW5jdGlvbiBnZShBKXtmdW5jdGlvbiB0KEksZSxnLHIpe2xldCBvPUlbcisrXTtpZihvPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IG49TnVtYmVyLmlzRmluaXRlKCtvKSxhPXI+PUkubGVuZ3RoO3JldHVybiBvPSFvJiZDLmlzQXJyYXkoZyk/Zy5sZW5ndGg6byxhPyhDLmhhc093blByb3AoZyxvKT9nW29dPVtnW29dLGVdOmdbb109ZSwhbik6KCghZ1tvXXx8IUMuaXNPYmplY3QoZ1tvXSkpJiYoZ1tvXT1bXSksdChJLGUsZ1tvXSxyKSYmQy5pc0FycmF5KGdbb10pJiYoZ1tvXT1lZShnW29dKSksIW4pfWlmKEMuaXNGb3JtRGF0YShBKSYmQy5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCBJPXt9O3JldHVybiBDLmZvckVhY2hFbnRyeShBLChlLGcpPT57dChJZShlKSxnLEksMCl9KSxJfXJldHVybiBudWxsfXZhciBjQT1nZTtmdW5jdGlvbiByZShBLHQsSSl7aWYoQy5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKEEpLEMudHJpbShBKX1jYXRjaChlKXtpZihlLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IGV9cmV0dXJuKEl8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgWUE9e3RyYW5zaXRpb25hbDphQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKHQsSSl7bGV0IGU9SS5nZXRDb250ZW50VHlwZSgpfHwiIixnPWUuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLHI9Qy5pc09iamVjdCh0KTtpZihyJiZDLmlzSFRNTEZvcm0odCkmJih0PW5ldyBGb3JtRGF0YSh0KSksQy5pc0Zvcm1EYXRhKHQpKXJldHVybiBnP0pTT04uc3RyaW5naWZ5KGNBKHQpKTp0O2lmKEMuaXNBcnJheUJ1ZmZlcih0KXx8Qy5pc0J1ZmZlcih0KXx8Qy5pc1N0cmVhbSh0KXx8Qy5pc0ZpbGUodCl8fEMuaXNCbG9iKHQpKXJldHVybiB0O2lmKEMuaXNBcnJheUJ1ZmZlclZpZXcodCkpcmV0dXJuIHQuYnVmZmVyO2lmKEMuaXNVUkxTZWFyY2hQYXJhbXModCkpcmV0dXJuIEkuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksdC50b1N0cmluZygpO2xldCBuO2lmKHIpe2lmKGUuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIEhBKHQsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigobj1DLmlzRmlsZUxpc3QodCkpfHxlLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGE9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBKKG4/eyJmaWxlc1tdIjp0fTp0LGEmJm5ldyBhLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gcnx8Zz8oSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLHJlKHQpKTp0fV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKHQpe2xldCBJPXRoaXMudHJhbnNpdGlvbmFsfHxZQS50cmFuc2l0aW9uYWwsZT1JJiZJLmZvcmNlZEpTT05QYXJzaW5nLGc9dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYodCYmQy5pc1N0cmluZyh0KSYmKGUmJiF0aGlzLnJlc3BvbnNlVHlwZXx8Zykpe2xldCBvPSEoSSYmSS5zaWxlbnRKU09OUGFyc2luZykmJmc7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKG4pe2lmKG8pdGhyb3cgbi5uYW1lPT09IlN5bnRheEVycm9yIj9sLmZyb20obixsLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOm59fXJldHVybiB0fV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp3LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp3LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIwMCYmdDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e1lBLmhlYWRlcnNbQV09e319KTt2YXIgVD1ZQTt2YXIgb2U9Qy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxTdD1BPT57bGV0IHQ9e30sSSxlLGc7cmV0dXJuIEEmJkEuc3BsaXQoYCUwQWApLmZvckVhY2goZnVuY3Rpb24obyl7Zz1vLmluZGV4T2YoIjoiKSxJPW8uc3Vic3RyaW5nKDAsZykudHJpbSgpLnRvTG93ZXJDYXNlKCksZT1vLnN1YnN0cmluZyhnKzEpLnRyaW0oKSwhKCFJfHx0W0ldJiZvZVtJXSkmJihJPT09InNldC1jb29raWUiP3RbSV0/dFtJXS5wdXNoKGUpOnRbSV09W2VdOnRbSV09dFtJXT90W0ldKyIsICIrZTplKX0pLHR9O3ZhciBGdD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIHooQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBmQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6Qy5pc0FycmF5KEEpP0EubWFwKGZBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gaWUoQSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxJPS8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2csZTtmb3IoO2U9SS5leGVjKEEpOyl0W2VbMV1dPWVbMl07cmV0dXJuIHR9dmFyIENlPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhJTIzJCUmXCcqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIGJBKEEsdCxJLGUsZyl7aWYoQy5pc0Z1bmN0aW9uKGUpKXJldHVybiBlLmNhbGwodGhpcyx0LEkpO2lmKGcmJih0PUkpLCEhQy5pc1N0cmluZyh0KSl7aWYoQy5pc1N0cmluZyhlKSlyZXR1cm4gdC5pbmRleE9mKGUpIT09LTE7aWYoQy5pc1JlZ0V4cChlKSlyZXR1cm4gZS50ZXN0KHQpfX1mdW5jdGlvbiBCZShBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csKHQsSSxlKT0+SS50b1VwcGVyQ2FzZSgpK2UpfWZ1bmN0aW9uIG5lKEEsdCl7bGV0IEk9Qy50b0NhbWVsQ2FzZSgiICIrdCk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKGU9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxlK0kse3ZhbHVlOmZ1bmN0aW9uKGcscixvKXtyZXR1cm4gdGhpc1tlXS5jYWxsKHRoaXMsdCxnLHIsbyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dCYmdGhpcy5zZXQodCl9c2V0KHQsSSxlKXtsZXQgZz10aGlzO2Z1bmN0aW9uIHIobixhLFEpe2xldCBCPXooYSk7aWYoIUIpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBpPUMuZmluZEtleShnLEIpOyghaXx8Z1tpXT09PXZvaWQgMHx8UT09PSEwfHxRPT09dm9pZCAwJiZnW2ldIT09ITEpJiYoZ1tpfHxhXT1mQShuKSl9bGV0IG89KG4sYSk9PkMuZm9yRWFjaChuLChRLEIpPT5yKFEsQixhKSk7cmV0dXJuIEMuaXNQbGFpbk9iamVjdCh0KXx8dCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/byh0LEkpOkMuaXNTdHJpbmcodCkmJih0PXQudHJpbSgpKSYmIUNlKHQpP28oU3QodCksSSk6dCE9bnVsbCYmcihJLHQsZSksdGhpc31nZXQodCxJKXtpZih0PXoodCksdCl7bGV0IGU9Qy5maW5kS2V5KHRoaXMsdCk7aWYoZSl7bGV0IGc9dGhpc1tlXTtpZighSSlyZXR1cm4gZztpZihJPT09ITApcmV0dXJuIGllKGcpO2lmKEMuaXNGdW5jdGlvbihJKSlyZXR1cm4gSS5jYWxsKHRoaXMsZyxlKTtpZihDLmlzUmVnRXhwKEkpKXJldHVybiBJLmV4ZWMoZyk7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtyZXR1cm4hIShlJiZ0aGlzW2VdIT09dm9pZCAwJiYoIUl8fGJBKHRoaXMsdGhpc1tlXSxlLEkpKSl9cmV0dXJuITF9ZGVsZXRlKHQsSSl7bGV0IGU9dGhpcyxnPSExO2Z1bmN0aW9uIHIobyl7aWYobz16KG8pLG8pe2xldCBuPUMuZmluZEtleShlLG8pO24mJighSXx8YkEoZSxlW25dLG4sSSkpJiYoZGVsZXRlIGVbbl0sZz0hMCl9fXJldHVybiBDLmlzQXJyYXkodCk/dC5mb3JFYWNoKHIpOnIodCksZ31jbGVhcih0KXtsZXQgST1PYmplY3Qua2V5cyh0aGlzKSxlPUkubGVuZ3RoLGc9ITE7Zm9yKDtlLS07KXtsZXQgcj1JW2VdOyghdHx8YkEodGhpcyx0aGlzW3JdLHIsdCwhMCkpJiYoZGVsZXRlIHRoaXNbcl0sZz0hMCl9cmV0dXJuIGd9bm9ybWFsaXplKHQpe2xldCBJPXRoaXMsZT17fTtyZXR1cm4gQy5mb3JFYWNoKHRoaXMsKGcscik9PntsZXQgbz1DLmZpbmRLZXkoZSxyKTtpZihvKXtJW29dPWZBKGcpLGRlbGV0ZSBJW3JdO3JldHVybn1sZXQgbj10P0JlKHIpOlN0cmluZyhyKS50cmltKCk7biE9PXImJmRlbGV0ZSBJW3JdLElbbl09ZkEoZyksZVtuXT0hMH0pLHRoaXN9Y29uY2F0KC4uLnQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLnQpfXRvSlNPTih0KXtsZXQgST1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBDLmZvckVhY2godGhpcywoZSxnKT0+e2UhPW51bGwmJmUhPT0hMSYmKElbZ109dCYmQy5pc0FycmF5KGUpP2Uuam9pbigiLCAiKTplKX0pLEl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW3QsSV0pPT50KyI6ICIrSSkuam9pbihgJTBBYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM/dDpuZXcgdGhpcyh0KX1zdGF0aWMgY29uY2F0KHQsLi4uSSl7bGV0IGU9bmV3IHRoaXModCk7cmV0dXJuIEkuZm9yRWFjaChnPT5lLnNldChnKSksZX1zdGF0aWMgYWNjZXNzb3IodCl7bGV0IGU9KHRoaXNbRnRdPXRoaXNbRnRdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsZz10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiByKG8pe2xldCBuPXoobyk7ZVtuXXx8KG5lKGcsbyksZVtuXT0hMCl9cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSx0aGlzfX07UC5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7Qy5yZWR1Y2VEZXNjcmlwdG9ycyhQLnByb3RvdHlwZSwoe3ZhbHVlOkF9LHQpPT57bGV0IEk9dFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQoZSl7dGhpc1tJXT1lfX19KTtDLmZyZWV6ZU1ldGhvZHMoUCk7dmFyIG09UDtmdW5jdGlvbiBfKEEsdCl7bGV0IEk9dGhpc3x8VCxlPXR8fEksZz1tLmZyb20oZS5oZWFkZXJzKSxyPWUuZGF0YTtyZXR1cm4gQy5mb3JFYWNoKEEsZnVuY3Rpb24obil7cj1uLmNhbGwoSSxyLGcubm9ybWFsaXplKCksdD90LnN0YXR1czp2b2lkIDApfSksZy5ub3JtYWxpemUoKSxyfWZ1bmN0aW9uIHYoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBSdChBLHQsSSl7bC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixsLkVSUl9DQU5DRUxFRCx0LEkpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Qy5pbmhlcml0cyhSdCxsLHtfX0NBTkNFTF9fOiEwfSk7dmFyIEg9UnQ7ZnVuY3Rpb24gTUEoQSx0LEkpe2xldCBlPUkuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFJLnN0YXR1c3x8IWV8fGUoSS5zdGF0dXMpP0EoSSk6dChuZXcgbCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK0kuc3RhdHVzLFtsLkVSUl9CQURfUkVRVUVTVCxsLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IoSS5zdGF0dXMvMTAwKS00XSxJLmNvbmZpZyxJLnJlcXVlc3QsSSkpfXZhciBOdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSx0LEksZSxnLHIpe2xldCBvPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQodCldO0MuaXNOdW1iZXIoSSkmJm8ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKEkpLnRvR01UU3RyaW5nKCkpLEMuaXNTdHJpbmcoZSkmJm8ucHVzaCgicGF0aD0iK2UpLEMuaXNTdHJpbmcoZykmJm8ucHVzaCgiZG9tYWluPSIrZykscj09PSEwJiZvLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1vLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXFxccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIHFBKEEpe3JldHVybi9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIEtBKEEsdCl7cmV0dXJuIHQ/QS5yZXBsYWNlKC9cXC8/XFwvJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cXC8rLywiIik6QX1mdW5jdGlvbiAkKEEsdCl7cmV0dXJuIEEmJiFxQSh0KT9LQShBLHQpOnR9dmFyIFV0PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxJPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxlO2Z1bmN0aW9uIGcocil7bGV0IG89cjtyZXR1cm4gdCYmKEkuc2V0QXR0cmlidXRlKCJocmVmIixvKSxvPUkuaHJlZiksSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLHtocmVmOkkuaHJlZixwcm90b2NvbDpJLnByb3RvY29sP0kucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OkkuaG9zdCxzZWFyY2g6SS5zZWFyY2g/SS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sIiIpOiIiLGhhc2g6SS5oYXNoP0kuaGFzaC5yZXBsYWNlKC9eJTIzLywiIik6IiIsaG9zdG5hbWU6SS5ob3N0bmFtZSxwb3J0OkkucG9ydCxwYXRobmFtZTpJLnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj9JLnBhdGhuYW1lOiIvIitJLnBhdGhuYW1lfX1yZXR1cm4gZT1nKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihvKXtsZXQgbj1DLmlzU3RyaW5nKG8pP2cobyk6bztyZXR1cm4gbi5wcm90b2NvbD09PWUucHJvdG9jb2wmJm4uaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gT0EoQSl7bGV0IHQ9L14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWMoQSk7cmV0dXJuIHQmJnRbMV18fCIifWZ1bmN0aW9uIHNlKEEsdCl7QT1BfHwxMDtsZXQgST1uZXcgQXJyYXkoQSksZT1uZXcgQXJyYXkoQSksZz0wLHI9MCxvO3JldHVybiB0PXQhPT12b2lkIDA/dDoxZTMsZnVuY3Rpb24oYSl7bGV0IFE9RGF0ZS5ub3coKSxCPWVbcl07b3x8KG89USksSVtnXT1hLGVbZ109UTtsZXQgaT1yLGY9MDtmb3IoO2khPT1nOylmKz1JW2krK10saT1pJUE7aWYoZz0oZysxKSVBLGc9PT1yJiYocj0ocisxKSVBKSxRLW88dClyZXR1cm47bGV0IHM9QiYmUS1CO3JldHVybiBzP01hdGgucm91bmQoZioxZTMvcyk6dm9pZCAwfX12YXIgR3Q9c2U7ZnVuY3Rpb24ga3QoQSx0KXtsZXQgST0wLGU9R3QoNTAsMjUwKTtyZXR1cm4gZz0+e2xldCByPWcubG9hZGVkLG89Zy5sZW5ndGhDb21wdXRhYmxlP2cudG90YWw6dm9pZCAwLG49ci1JLGE9ZShuKSxRPXI8PW87ST1yO2xldCBCPXtsb2FkZWQ6cix0b3RhbDpvLHByb2dyZXNzOm8/ci9vOnZvaWQgMCxieXRlczpuLHJhdGU6YXx8dm9pZCAwLGVzdGltYXRlZDphJiZvJiZRPyhvLXIpL2E6dm9pZCAwLGV2ZW50Omd9O0JbdD8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKEIpfX12YXIgUWU9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixMdD1RZSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEksZSl7bGV0IGc9QS5kYXRhLHI9bS5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpvLHdpdGhYU1JGVG9rZW46bn09QSxhO2Z1bmN0aW9uIFEoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYSl9bGV0IEI7aWYoQy5pc0Zvcm1EYXRhKGcpKXtpZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8dy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpci5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoQj1yLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtjLC4uLnVdPUI/Qi5zcGxpdCgiOyIpLm1hcCh5PT55LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO3Iuc2V0Q29udGVudFR5cGUoW2N8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi51XS5qb2luKCI7ICIpKX19bGV0IGk9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IGM9QS5hdXRoLnVzZXJuYW1lfHwiIix1PUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7ci5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoYysiOiIrdSkpfWxldCBmPSQoQS5iYXNlVVJMLEEudXJsKTtpLm9wZW4oQS5tZXRob2QudG9VcHBlckNhc2UoKSxYKGYsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksaS50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBzKCl7aWYoIWkpcmV0dXJuO2xldCBjPW0uZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGkmJmkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHk9e2RhdGE6IW98fG89PT0idGV4dCJ8fG89PT0ianNvbiI/aS5yZXNwb25zZVRleHQ6aS5yZXNwb25zZSxzdGF0dXM6aS5zdGF0dXMsc3RhdHVzVGV4dDppLnN0YXR1c1RleHQsaGVhZGVyczpjLGNvbmZpZzpBLHJlcXVlc3Q6aX07TUEoZnVuY3Rpb24oTil7SShOKSxRKCl9LGZ1bmN0aW9uKE4pe2UoTiksUSgpfSx5KSxpPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBpP2kub25sb2FkZW5kPXM6aS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshaXx8aS5yZWFkeVN0YXRlIT09NHx8aS5zdGF0dXM9PT0wJiYhKGkucmVzcG9uc2VVUkwmJmkucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KHMpfSxpLm9uYWJvcnQ9ZnVuY3Rpb24oKXtpJiYoZShuZXcgbCgiUmVxdWVzdCBhYm9ydGVkIixsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGwpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBsKCJOZXR3b3JrIEVycm9yIixsLkVSUl9ORVRXT1JLLEEsaSkpLGk9bnVsbH0saS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgdT1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIseT1BLnRyYW5zaXRpb25hbHx8YUE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodT1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLGUobmV3IGwodSx5LmNsYXJpZnlUaW1lb3V0RXJyb3I/bC5FVElNRURPVVQ6bC5FQ09OTkFCT1JURUQsQSxpKSksaT1udWxsfSx3Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKG4mJkMuaXNGdW5jdGlvbihuKSYmKG49bihBKSksbnx8biE9PSExJiZVdChmKSkpe2xldCBjPUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJk50LnJlYWQoQS54c3JmQ29va2llTmFtZSk7YyYmci5zZXQoQS54c3JmSGVhZGVyTmFtZSxjKX1nPT09dm9pZCAwJiZyLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGkmJkMuZm9yRWFjaChyLnRvSlNPTigpLGZ1bmN0aW9uKHUseSl7aS5zZXRSZXF1ZXN0SGVhZGVyKHksdSl9KSxDLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KGkud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLG8mJm8hPT0ianNvbiImJihpLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZpLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkudXBsb2FkJiZpLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa3QoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGE9Yz0+e2kmJihlKCFjfHxjLnR5cGU/bmV3IEgobnVsbCxBLGkpOmMpLGkuYWJvcnQoKSxpPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShhKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/YSgpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixhKSkpO2xldCBFPU9BKGYpO2lmKEUmJncucHJvdG9jb2xzLmluZGV4T2YoRSk9PT0tMSl7ZShuZXcgbCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitFKyI6IixsLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWkuc2VuZChnfHxudWxsKX0pfTt2YXIgVEE9e2h0dHA6UUEseGhyOkx0fTtDLmZvckVhY2goVEEsKEEsdCk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTp0fSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOnR9KX19KTt2YXIgSnQ9QT0+YC0gJHtBfWAsRWU9QT0+Qy5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLGxBPXtnZXRBZGFwdGVyOkE9PntBPUMuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOnR9PUEsSSxlLGc9e307Zm9yKGxldCByPTA7cjx0O3IrKyl7ST1BW3JdO2xldCBvO2lmKGU9SSwhRWUoSSkmJihlPVRBWyhvPVN0cmluZyhJKSkudG9Mb3dlckNhc2UoKV0sZT09PXZvaWQgMCkpdGhyb3cgbmV3IGwoYFVua25vd24gYWRhcHRlciBcJyR7b31cJ2ApO2lmKGUpYnJlYWs7Z1tvfHwiJTIzIityXT1lfWlmKCFlKXtsZXQgcj1PYmplY3QuZW50cmllcyhnKS5tYXAoKFtuLGFdKT0+YGFkYXB0ZXIgJHtufSBgKyhhPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksbz10P3IubGVuZ3RoPjE/YHNpbmNlIDolMEFgK3IubWFwKEp0KS5qb2luKGAlMEFgKToiICIrSnQoclswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgbCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK28sIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBlfSxhZGFwdGVyczpUQX07ZnVuY3Rpb24gUEEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEgobnVsbCxBKX1mdW5jdGlvbiBEQShBKXtyZXR1cm4gUEEoQSksQS5oZWFkZXJzPW0uZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxsQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8VC5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBQQShBKSxlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlKSxlLmhlYWRlcnM9bS5mcm9tKGUuaGVhZGVycyksZX0sZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSl8fChQQShBKSxlJiZlLnJlc3BvbnNlJiYoZS5yZXNwb25zZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZS5yZXNwb25zZSksZS5yZXNwb25zZS5oZWFkZXJzPW0uZnJvbShlLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QoZSl9KX12YXIgSHQ9QT0+QSBpbnN0YW5jZW9mIG0/ey4uLkF9OkE7ZnVuY3Rpb24gayhBLHQpe3Q9dHx8e307bGV0IEk9e307ZnVuY3Rpb24gZShRLEIsaSl7cmV0dXJuIEMuaXNQbGFpbk9iamVjdChRKSYmQy5pc1BsYWluT2JqZWN0KEIpP0MubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6aX0sUSxCKTpDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZSh7fSxCKTpDLmlzQXJyYXkoQik/Qi5zbGljZSgpOkJ9ZnVuY3Rpb24gZyhRLEIsaSl7aWYoQy5pc1VuZGVmaW5lZChCKSl7aWYoIUMuaXNVbmRlZmluZWQoUSkpcmV0dXJuIGUodm9pZCAwLFEsaSl9ZWxzZSByZXR1cm4gZShRLEIsaSl9ZnVuY3Rpb24gcihRLEIpe2lmKCFDLmlzVW5kZWZpbmVkKEIpKXJldHVybiBlKHZvaWQgMCxCKX1mdW5jdGlvbiBvKFEsQil7aWYoQy5pc1VuZGVmaW5lZChCKSl7aWYoIUMuaXNVbmRlZmluZWQoUSkpcmV0dXJuIGUodm9pZCAwLFEpfWVsc2UgcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG4oUSxCLGkpe2lmKGkgaW4gdClyZXR1cm4gZShRLEIpO2lmKGkgaW4gQSlyZXR1cm4gZSh2b2lkIDAsUSl9bGV0IGE9e3VybDpyLG1ldGhvZDpyLGRhdGE6cixiYXNlVVJMOm8sdHJhbnNmb3JtUmVxdWVzdDpvLHRyYW5zZm9ybVJlc3BvbnNlOm8scGFyYW1zU2VyaWFsaXplcjpvLHRpbWVvdXQ6byx0aW1lb3V0TWVzc2FnZTpvLHdpdGhDcmVkZW50aWFsczpvLHdpdGhYU1JGVG9rZW46byxhZGFwdGVyOm8scmVzcG9uc2VUeXBlOm8seHNyZkNvb2tpZU5hbWU6byx4c3JmSGVhZGVyTmFtZTpvLG9uVXBsb2FkUHJvZ3Jlc3M6byxvbkRvd25sb2FkUHJvZ3Jlc3M6byxkZWNvbXByZXNzOm8sbWF4Q29udGVudExlbmd0aDpvLG1heEJvZHlMZW5ndGg6byxiZWZvcmVSZWRpcmVjdDpvLHRyYW5zcG9ydDpvLGh0dHBBZ2VudDpvLGh0dHBzQWdlbnQ6byxjYW5jZWxUb2tlbjpvLHNvY2tldFBhdGg6byxyZXNwb25zZUVuY29kaW5nOm8sdmFsaWRhdGVTdGF0dXM6bixoZWFkZXJzOihRLEIpPT5nKEh0KFEpLEh0KEIpLCEwKX07cmV0dXJuIEMuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsdCkpLGZ1bmN0aW9uKEIpe2xldCBpPWFbQl18fGcsZj1pKEFbQl0sdFtCXSxCKTtDLmlzVW5kZWZpbmVkKGYpJiZpIT09bnx8KElbQl09Zil9KSxJfXZhciB1QT0iMS42LjgiO3ZhciB4QT17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKEEsdCk9Pnt4QVtBXT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PT1BfHwiYSIrKHQ8MT8ibiAiOiIgIikrQX19KTt2YXIgWXQ9e307eEEudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKHQsSSxlKXtmdW5jdGlvbiBnKHIsbyl7cmV0dXJuIltBeGlvcyB2Iit1QSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFwnIityKyJcJyIrbysoZT8iLiAiK2U6IiIpfXJldHVybihyLG8sbik9PntpZih0PT09ITEpdGhyb3cgbmV3IGwoZyhvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKEk/IiBpbiAiK0k6IiIpKSxsLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gSSYmIVl0W29dJiYoWXRbb109ITAsY29uc29sZS53YXJuKGcobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrSSsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSx0P3QocixvLG4pOiEwfX07ZnVuY3Rpb24gYWUoQSx0LEkpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgbCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IGU9T2JqZWN0LmtleXMoQSksZz1lLmxlbmd0aDtmb3IoO2ctLSA+MDspe2xldCByPWVbZ10sbz10W3JdO2lmKG8pe2xldCBuPUFbcl0sYT1uPT09dm9pZCAwfHxvKG4scixBKTtpZihhIT09ITApdGhyb3cgbmV3IGwoIm9wdGlvbiAiK3IrIiBtdXN0IGJlICIrYSxsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZihJIT09ITApdGhyb3cgbmV3IGwoIlVua25vd24gb3B0aW9uICIrcixsLkVSUl9CQURfT1BUSU9OKX19dmFyIGhBPXthc3NlcnRPcHRpb25zOmFlLHZhbGlkYXRvcnM6eEF9O3ZhciBZPWhBLnZhbGlkYXRvcnMseD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZmF1bHRzPXQsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IExBLHJlc3BvbnNlOm5ldyBMQX19YXN5bmMgcmVxdWVzdCh0LEkpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdCh0LEkpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcil7bGV0IGc7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZz17fSk6Zz1uZXcgRXJyb3I7bGV0IHI9Zy5zdGFjaz9nLnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sIiIpOiIiO2Uuc3RhY2s/ciYmIVN0cmluZyhlLnN0YWNrKS5lbmRzV2l0aChyLnJlcGxhY2UoL14uK1xcbi4rXFxuLywiIikpJiYoZS5zdGFjays9YCUwQWArcik6ZS5zdGFjaz1yfXRocm93IGV9fV9yZXF1ZXN0KHQsSSl7dHlwZW9mIHQ9PSJzdHJpbmciPyhJPUl8fHt9LEkudXJsPXQpOkk9dHx8e30sST1rKHRoaXMuZGVmYXVsdHMsSSk7bGV0e3RyYW5zaXRpb25hbDplLHBhcmFtc1NlcmlhbGl6ZXI6ZyxoZWFkZXJzOnJ9PUk7ZSE9PXZvaWQgMCYmaEEuYXNzZXJ0T3B0aW9ucyhlLHtzaWxlbnRKU09OUGFyc2luZzpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pfSwhMSksZyE9bnVsbCYmKEMuaXNGdW5jdGlvbihnKT9JLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpnfTpoQS5hc3NlcnRPcHRpb25zKGcse2VuY29kZTpZLmZ1bmN0aW9uLHNlcmlhbGl6ZTpZLmZ1bmN0aW9ufSwhMCkpLEkubWV0aG9kPShJLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBvPXImJkMubWVyZ2Uoci5jb21tb24scltJLm1ldGhvZF0pO3ImJkMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIHJbRV19KSxJLmhlYWRlcnM9bS5jb25jYXQobyxyKTtsZXQgbj1bXSxhPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihjKXt0eXBlb2YgYy5ydW5XaGVuPT0iZnVuY3Rpb24iJiZjLnJ1bldoZW4oSSk9PT0hMXx8KGE9YSYmYy5zeW5jaHJvbm91cyxuLnVuc2hpZnQoYy5mdWxmaWxsZWQsYy5yZWplY3RlZCkpfSk7bGV0IFE9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihjKXtRLnB1c2goYy5mdWxmaWxsZWQsYy5yZWplY3RlZCl9KTtsZXQgQixpPTAsZjtpZighYSl7bGV0IEU9W0RBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsbiksRS5wdXNoLmFwcGx5KEUsUSksZj1FLmxlbmd0aCxCPVByb21pc2UucmVzb2x2ZShJKTtpPGY7KUI9Qi50aGVuKEVbaSsrXSxFW2krK10pO3JldHVybiBCfWY9bi5sZW5ndGg7bGV0IHM9STtmb3IoaT0wO2k8Zjspe2xldCBFPW5baSsrXSxjPW5baSsrXTt0cnl7cz1FKHMpfWNhdGNoKHUpe2MuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7Qj1EQS5jYWxsKHRoaXMscyl9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihpPTAsZj1RLmxlbmd0aDtpPGY7KUI9Qi50aGVuKFFbaSsrXSxRW2krK10pO3JldHVybiBCfWdldFVyaSh0KXt0PWsodGhpcy5kZWZhdWx0cyx0KTtsZXQgST0kKHQuYmFzZVVSTCx0LnVybCk7cmV0dXJuIFgoSSx0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpfX07Qy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbih0KXt4LnByb3RvdHlwZVt0XT1mdW5jdGlvbihJLGUpe3JldHVybiB0aGlzLnJlcXVlc3QoayhlfHx7fSx7bWV0aG9kOnQsdXJsOkksZGF0YTooZXx8e30pLmRhdGF9KSl9fSk7Qy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gSShlKXtyZXR1cm4gZnVuY3Rpb24ocixvLG4pe3JldHVybiB0aGlzLnJlcXVlc3QoayhufHx7fSx7bWV0aG9kOnQsaGVhZGVyczplP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpyLGRhdGE6b30pKX19eC5wcm90b3R5cGVbdF09SSgpLHgucHJvdG90eXBlW3QrIkZvcm0iXT1JKCEwKX0pO3ZhciBBQT14O3ZhciBqQT1jbGFzcyBBe2NvbnN0cnVjdG9yKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgSTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24ocil7ST1yfSk7bGV0IGU9dGhpczt0aGlzLnByb21pc2UudGhlbihnPT57aWYoIWUuX2xpc3RlbmVycylyZXR1cm47bGV0IHI9ZS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO3ItLSA+MDspZS5fbGlzdGVuZXJzW3JdKGcpO2UuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49Zz0+e2xldCByLG89bmV3IFByb21pc2Uobj0+e2Uuc3Vic2NyaWJlKG4pLHI9bn0pLnRoZW4oZyk7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7ZS51bnN1YnNjcmliZShyKX0sb30sdChmdW5jdGlvbihyLG8sbil7ZS5yZWFzb258fChlLnJlYXNvbj1uZXcgSChyLG8sbiksSShlLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZSh0KXtpZih0aGlzLnJlYXNvbil7dCh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaCh0KTp0aGlzLl9saXN0ZW5lcnM9W3RdfXVuc3Vic2NyaWJlKHQpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBJPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKHQpO0khPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShJLDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgdDtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24oZyl7dD1nfSksY2FuY2VsOnR9fX0sYnQ9akE7ZnVuY3Rpb24gV0EoQSl7cmV0dXJuIGZ1bmN0aW9uKEkpe3JldHVybiBBLmFwcGx5KG51bGwsSSl9fWZ1bmN0aW9uIFpBKEEpe3JldHVybiBDLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBWQT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoVkEpLmZvckVhY2goKFtBLHRdKT0+e1ZBW3RdPUF9KTt2YXIgTXQ9VkE7ZnVuY3Rpb24gcXQoQSl7bGV0IHQ9bmV3IEFBKEEpLEk9VyhBQS5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gQy5leHRlbmQoSSxBQS5wcm90b3R5cGUsdCx7YWxsT3duS2V5czohMH0pLEMuZXh0ZW5kKEksdCxudWxsLHthbGxPd25LZXlzOiEwfSksSS5jcmVhdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHF0KGsoQSxnKSl9LEl9dmFyIGg9cXQoVCk7aC5BeGlvcz1BQTtoLkNhbmNlbGVkRXJyb3I9SDtoLkNhbmNlbFRva2VuPWJ0O2guaXNDYW5jZWw9djtoLlZFUlNJT049dUE7aC50b0Zvcm1EYXRhPUo7aC5BeGlvc0Vycm9yPWw7aC5DYW5jZWw9aC5DYW5jZWxlZEVycm9yO2guYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLmFsbCh0KX07aC5zcHJlYWQ9V0E7aC5pc0F4aW9zRXJyb3I9WkE7aC5tZXJnZUNvbmZpZz1rO2guQXhpb3NIZWFkZXJzPW07aC5mb3JtVG9KU09OPUE9PmNBKEMuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7aC5nZXRBZGFwdGVyPWxBLmdldEFkYXB0ZXI7aC5IdHRwU3RhdHVzQ29kZT1NdDtoLmRlZmF1bHQ9aDt2YXIgZEE9aDt2YXJ7QXhpb3M6aW8sQXhpb3NFcnJvcjpDbyxDYW5jZWxlZEVycm9yOkJvLGlzQ2FuY2VsOm5vLENhbmNlbFRva2VuOnNvLFZFUlNJT046UW8sYWxsOkVvLENhbmNlbDphbyxpc0F4aW9zRXJyb3I6Y28sc3ByZWFkOmZvLHRvRm9ybURhdGE6bG8sQXhpb3NIZWFkZXJzOkRvLEh0dHBTdGF0dXNDb2RlOnVvLGZvcm1Ub0pTT046aG8sZ2V0QWRhcHRlcjp5byxtZXJnZUNvbmZpZzp3b309ZEE7dmFyIHRBLEwsekEsWEE9e2Vudjp7ZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aDpmdW5jdGlvbihBKXt6QT1uZXcgVWludDhBcnJheShMLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcil9fX0seUE9Y2xhc3N7aW5pdCgpe3JldHVybiB0QXx8KHR5cGVvZiBmZXRjaDwidSI/dEE9ZmV0Y2goImRhdGE6YXBwbGljYXRpb24vd2FzbTtiYXNlNjQsIitLdCkudGhlbih0PT50LmFycmF5QnVmZmVyKCkpLnRoZW4odD0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodCxYQSkpLnRoZW4odGhpcy5faW5pdCk6dEE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20oS3QsImJhc2U2NCIpLFhBKS50aGVuKHRoaXMuX2luaXQpLHRBKX1faW5pdCh0KXtMPXQuaW5zdGFuY2UsWEEuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKHQsST0wKXtpZighTCl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgZT10LmJ5dGVMZW5ndGgsZz1MLmV4cG9ydHMubWFsbG9jKGUpO3pBLnNldCh0LGcpLEk9SXx8TnVtYmVyKEwuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKGcsZSkpO2xldCByPUwuZXhwb3J0cy5tYWxsb2MoSSksbz1MLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKHIsSSxnLGUpLG49ekEuc2xpY2UocixyK28pO3JldHVybiBMLmV4cG9ydHMuZnJlZShnKSxMLmV4cG9ydHMuZnJlZShyKSxufX0sS3Q9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgT3Q9bmV3IHlBLFR0PSExO2FzeW5jIGZ1bmN0aW9uIGNlKEEsdCxJKXtsZXQgZT1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9lPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9lPUE6ZT1gJHt0fS8ke0F9YCxlLmVuZHNXaXRoKCIuanMiKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0zKSksZS5lbmRzV2l0aCgiLndhc20iKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC01KSk7bGV0IGc9YCR7ZX0ud2FzbWAscj1hd2FpdCBkQS5nZXQoYCR7Z30uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOkl9KTtUdHx8KGF3YWl0IE90LmluaXQoKSxUdD0hMCk7bGV0IG49T3QuZGVjb2RlKG5ldyBVaW50OEFycmF5KHIuZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke2V9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6bn0pfXZhciBQdD1jZTt2YXIgd0E9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBmZShBLHQsSSl7bGV0IGU9QSxnPUEscj1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihlPW5ldyBVUkwoQS5ocmVmKSxnPWUuaHJlZiksd0EuaGFzKGcpP3I9YXdhaXQgd0EuZ2V0KGcpOih3QS5zZXQoZyxQdChlLHQsSSkpLHI9YXdhaXQgd0EuZ2V0KGcpKSxyfXZhciB4dD1mZTt2YXIgbGU9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybToiVHJhbnNmb3JtIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxEPWxlO3ZhciBEZT17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LFM9RGU7dmFyIHVlPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSxqPXVlO2Z1bmN0aW9uIGhlKEEsdCl7bGV0IEk9bnVsbDtzd2l0Y2goQSl7Y2FzZSBTLlVJbnQ4OntJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQ4OntJPW5ldyBJbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQxNjp7ST1uZXcgVWludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDE2OntJPW5ldyBJbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50MzI6e0k9bmV3IFVpbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQzMjp7ST1uZXcgSW50MzJBcnJheSh0KTticmVha31jYXNlIFMuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj9JPW5ldyBCaWdVaW50NjRBcnJheSh0KTpJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj9JPW5ldyBCaWdJbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBqLkZsb2F0MzI6e0k9bmV3IEZsb2F0MzJBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQ2NDp7ST1uZXcgRmxvYXQ2NEFycmF5KHQpO2JyZWFrfWNhc2UibnVsbCI6e0k9bnVsbDticmVha31jYXNlIG51bGw6e0k9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiBJfXZhciBHPWhlO3ZhciBadD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixqdD1uZXcgVGV4dEVuY29kZXIsV3Q9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIGRlKEEsdCl7bGV0IEk9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sZT1BLmZzX29wZW4odCxJLmZsYWdzKSxyPUEuZnNfc3RhdCh0KS5zaXplLG89bnVsbDtadD9vPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTpvPW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgbj1uZXcgVWludDhBcnJheShvKTtyZXR1cm4gQS5mc19yZWFkKGUsbiwwLHIsMCksQS5mc19jbG9zZShlKSxufWZ1bmN0aW9uIFZ0KEEsdCxJKXtsZXQgZT1udWxsO1p0P2U9bmV3IFNoYXJlZEFycmF5QnVmZmVyKEkpOmU9bmV3IEFycmF5QnVmZmVyKEkpO2xldCBnPW5ldyBVaW50OEFycmF5KGUpLHI9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHQsSSk7cmV0dXJuIGcuc2V0KHIpLGd9ZnVuY3Rpb24gZChBLHQsSSxlKXtsZXQgZz0wO3JldHVybiB0IT09bnVsbCYmKGc9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSxlLHQuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLGcpKSxnfWZ1bmN0aW9uIE0oQSx0LEkpe2xldCBlPUpTT04uc3RyaW5naWZ5KHQpLGc9QS5sZW5ndGhCeXRlc1VURjgoZSkrMSxyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSxnXSk7QS5zdHJpbmdUb1VURjgoZSxyLGcpfWZ1bmN0aW9uIHAoQSx0LEksZSl7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxJXSkscj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxvPVZ0KEEsZyxyKTtyZXR1cm4gRyhlLG8uYnVmZmVyKX1mdW5jdGlvbiBtQShBLHQpe2xldCBJPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsdF0pLGU9QS5VVEY4VG9TdHJpbmcoSSk7cmV0dXJuIEpTT04ucGFyc2UoZSl9ZnVuY3Rpb24geWUoQSx0LEksZSl7ZSE9bnVsbCYmZS5sZW5ndGg+MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBpPWp0LmVuY29kZShRLmRhdGEuZGF0YSksZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBpPWp0LmVuY29kZShKU09OLnN0cmluZ2lmeShRLmRhdGEpKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBpPVEuZGF0YS5kYXRhLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBpPVEuZGF0YSxmPWQoQSxpLmRhdGEsQiwwKSxzPWQoQSxpLmRpcmVjdGlvbixCLDEpLEU9dHlwZW9mIGkubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oaS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTppLmltYWdlVHlwZSxuYW1lOmkubmFtZSxvcmlnaW46aS5vcmlnaW4sc3BhY2luZzppLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLHNpemU6aS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07TShBLGMsQik7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkuY2VsbHMsQiwxKSxFPWQoQSxpLnBvaW50RGF0YSxCLDIpLGM9ZChBLGkuY2VsbERhdGEsQiwzKSx1PXttZXNoVHlwZTppLm1lc2hUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6aS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLGNlbGxCdWZmZXJTaXplOmkuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07TShBLHUsQik7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnBvaW50RGF0YSxCLDEpLEU9e3BvaW50U2V0VHlwZTppLnBvaW50U2V0VHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWB9O00oQSxFLEIpO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS52ZXJ0aWNlcyxCLDEpLEU9ZChBLGkubGluZXMsQiwyKSxjPWQoQSxpLnBvbHlnb25zLEIsMyksdT1kKEEsaS50cmlhbmdsZVN0cmlwcyxCLDQpLHk9ZChBLGkucG9pbnREYXRhLEIsNSksUj1kKEEsaS5wb2ludERhdGEsQiw2KSxOPXtwb2x5RGF0YVR5cGU6aS5wb2x5RGF0YVR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOmkudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLGxpbmVzQnVmZmVyU2l6ZTppLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxwb2x5Z29uc0J1ZmZlclNpemU6aS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmkudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3l9YCxudW1iZXJPZkNlbGxQaXhlbHM6aS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtSfWB9O00oQSxOLEIpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBnPUEuc3RhY2tTYXZlKCkscj0wO3RyeXtyPUEuY2FsbE1haW4odC5zbGljZSgpKX1jYXRjaChRKXt0aHJvdyB0eXBlb2YgUT09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShRKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxRfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUoZyl9bGV0IG89QS5nZXRNb2R1bGVTdGRvdXQoKSxuPUEuZ2V0TW9kdWxlU3RkZXJyKCksYT1bXTtyZXR1cm4gSSE9bnVsbCYmSS5sZW5ndGg+MCYmcj09PTAmJkkuZm9yRWFjaChmdW5jdGlvbihRLEIpe2xldCBpPW51bGw7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPXtkYXRhOld0LmRlY29kZShjKX07YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHMsRSk7aT1KU09OLnBhcnNlKFd0LmRlY29kZShjKSk7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKTtpPXtkYXRhOlZ0KEEscyxFKX07YnJlYWt9Y2FzZSBELlRleHRGaWxlOntpPXtwYXRoOlEuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShRLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntpPXtwYXRoOlEuZGF0YS5wYXRoLGRhdGE6ZGUoQSxRLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IHM9bUEoQSxCKTtzLmRhdGE9cChBLEIsMCxzLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxzLmRpcmVjdGlvbj1wKEEsQiwxLGouRmxvYXQ2NCkscy5tZXRhZGF0YT1uZXcgTWFwKHMubWV0YWRhdGEpLGk9czticmVha31jYXNlIEQuTWVzaDp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxzLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxscz4wP3MuY2VsbHM9cChBLEIsMSxzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpzLmNlbGxzPUcocy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDIscy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxQaXhlbHM+MD9zLmNlbGxEYXRhPXAoQSxCLDMscy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2ludFNldDp7bGV0IHM9bUEoQSxCKTtjb25zb2xlLmxvZyhzKSxzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOnMucG9pbnRzPUcocy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMSxzLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAsai5GbG9hdDMyKTpzLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LHMudmVydGljZXNCdWZmZXJTaXplPjA/cy52ZXJ0aWNlcz1wKEEsQiwxLFMuVUludDMyKTpzLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxzLmxpbmVzQnVmZmVyU2l6ZT4wP3MubGluZXM9cChBLEIsMixTLlVJbnQzMik6cy5saW5lcz1uZXcgVWludDMyQXJyYXkscy5wb2x5Z29uc0J1ZmZlclNpemU+MD9zLnBvbHlnb25zPXAoQSxCLDMsUy5VSW50MzIpOnMucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LHMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/cy50cmlhbmdsZVN0cmlwcz1wKEEsQiw0LFMuVUludDMyKTpzLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiw1LHMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxQaXhlbHM+MD9zLmNlbGxEYXRhPXAoQSxCLDYscy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6cy5jZWxsRGF0YT1HKHMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpRLnR5cGUsZGF0YTppfTthLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6cixzdGRvdXQ6byxzdGRlcnI6bixvdXRwdXRzOmF9fXZhciBYdD15ZTt2YXIgd2U9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIG1lKEEsdCl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgST1bXTtmb3IobGV0IGU9MDtlPEEubGVuZ3RoO2UrKyl7bGV0IGc9cGUoQVtlXSx0KTtnIT09bnVsbCYmSS5wdXNoKGcpfXJldHVybiBJfWZ1bmN0aW9uIHBlKEEsdCl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgST1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD9JPUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKEk9QSksd2UmJkkgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOnQ/STpJLnNsaWNlKDApfXZhciB6dD1tZTtmdW5jdGlvbiBTZShBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgX3Q9U2U7ZnVuY3Rpb24gRmUoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIHZ0PUZlO2Z1bmN0aW9uIFJlKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciAkdD1SZTthc3luYyBmdW5jdGlvbiBOZShBLHQsSSxlKXtsZXQgZz1YdChBLHQsSSxlKSxyPVtdO3JldHVybiBnLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihvKXtpZihvLnR5cGU9PT1ELkJpbmFyeVN0cmVhbXx8by50eXBlPT09RC5CaW5hcnlGaWxlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKG4pfWVsc2UgaWYoby50eXBlPT09RC5JbWFnZSl7bGV0IG49by5kYXRhO3IucHVzaCguLi5fdChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELk1lc2gpe2xldCBuPW8uZGF0YTtyLnB1c2goLi4udnQobikpfWVsc2UgaWYoby50eXBlPT09RC5Qb2x5RGF0YSl7bGV0IG49by5kYXRhO3IucHVzaCguLi4kdChuKSl9fSksRkEoZyx6dChyLCEwKSl9dmFyIEFJPU5lO3ZhciBVZT17cnVuUGlwZWxpbmU6YXN5bmMgZnVuY3Rpb24oQSx0LEksZSxnLHIpe2xldCBvPWF3YWl0IHh0KEEsdCxyKTtyZXR1cm4gYXdhaXQgQUkobyxJLGUsZyl9fTtpQShVZSk7JTBBLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjolMEElMEFjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOiUwQSAgKCoqJTBBICAgKiBAbGljZW5zZSUwQSAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQyUwQSAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAlMEEgICAqKSUwQSovJTBBJztodChEdCk7ZXhwb3J0e0JpIGFzIGFwcGx5UHJlc2VudGF0aW9uU3RhdGVUb0ltYWdlLEYgYXMgZ2V0RGVmYXVsdFdlYldvcmtlcixoIGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLHcgYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCxjaSBhcyByZWFkRGljb21FbmNhcHN1bGF0ZWRQZGYsbWkgYXMgcmVhZERpY29tVGFncyx3aSBhcyByZWFkSW1hZ2VEaWNvbUZpbGVTZXJpZXMsbGUgYXMgcmVhZEltYWdlRGljb21GaWxlU2VyaWVzV29ya2VyRnVuY3Rpb24sRmkgYXMgcmVhZE92ZXJsYXBwaW5nU2VnbWVudGF0aW9uLFNpIGFzIHJlYWRTZWdtZW50YXRpb24sZUkgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixodCBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxfcyBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLGZpIGFzIHN0cnVjdHVyZWRSZXBvcnRUb0h0bWwscGkgYXMgc3RydWN0dXJlZFJlcG9ydFRvVGV4dCxSQSBhcyB2ZXJzaW9uLEdpIGFzIHdyaXRlTXVsdGlTZWdtZW50YXRpb24sTmkgYXMgd3JpdGVPdmVybGFwcGluZ1NlZ21lbnRhdGlvbixSaSBhcyB3cml0ZVNlZ21lbnRhdGlvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" +default_js_module = """data:text/javascript;base64,dmFyIFN0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIga3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlTdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEZ0PSI3LjIuMiIsUkE9RnQ7dmFyIGJ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sYj1idDt2YXIgUnQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFc9UnQ7ZnVuY3Rpb24gVXQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIGIuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBiLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIGIuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIGIuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBiLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBiLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgYi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBiLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIFcuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgVy5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIEc9VXQ7dmFyIE50PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sQmU9TnQ7dmFyIFVBPWNsYXNze2RpbWVuc2lvbjtjb21wb25lbnRUeXBlO3BpeGVsVHlwZTtjb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PWIuVUludDgscj1CZS5TY2FsYXIsbj0xKXt0aGlzLmRpbWVuc2lvbj1lLHRoaXMuY29tcG9uZW50VHlwZT10LHRoaXMucGl4ZWxUeXBlPXIsdGhpcy5jb21wb25lbnRzPW59fSx1ZT1VQTtmdW5jdGlvbiBUdChBLGUsdCxyLG4pe0Fbcit0KmVdPW59dmFyIGNlPVR0O3ZhciBOQT1jbGFzc3tpbWFnZVR5cGU7bmFtZT0iSW1hZ2UiO29yaWdpbjtzcGFjaW5nO2RpcmVjdGlvbjtzaXplO21ldGFkYXRhO2RhdGE7Y29uc3RydWN0b3IoZT1uZXcgdWUpe3RoaXMuaW1hZ2VUeXBlPWU7bGV0IHQ9ZS5kaW1lbnNpb247dGhpcy5vcmlnaW49bmV3IEFycmF5KHQpLHRoaXMub3JpZ2luLmZpbGwoMCksdGhpcy5zcGFjaW5nPW5ldyBBcnJheSh0KSx0aGlzLnNwYWNpbmcuZmlsbCgxKSx0aGlzLmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KHQqdCksdGhpcy5kaXJlY3Rpb24uZmlsbCgwKTtmb3IobGV0IHI9MDtyPHQ7cisrKWNlKHRoaXMuZGlyZWN0aW9uLHQscixyLDEpO3RoaXMuc2l6ZT1uZXcgQXJyYXkodCksdGhpcy5zaXplLmZpbGwoMCksdGhpcy5tZXRhZGF0YT1uZXcgTWFwLHRoaXMuZGF0YT1udWxsfX0sQ2U9TkE7ZnVuY3Rpb24gR3QoQSl7aWYoQS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgZT1BWzBdO2lmKGUuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgQ2UoZS5pbWFnZVR5cGUpO3Qub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLHQuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyk7bGV0IHI9dC5pbWFnZVR5cGUuZGltZW5zaW9uO3QuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCk7bGV0IG49ci0xO3Quc2l6ZT1BcnJheS5mcm9tKGUuc2l6ZSk7bGV0IGk9QS5yZWR1Y2UoKHMsYSk9PnMrYS5zaXplW25dLDApO3Quc2l6ZVtuXT1pO2xldCBvPXQuc2l6ZS5yZWR1Y2UoKHMsYSk9PnMqYSwxKSp0LmltYWdlVHlwZS5jb21wb25lbnRzLEk9ZS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgSShvKTtsZXQgYz10LmltYWdlVHlwZS5jb21wb25lbnRzO2ZvcihsZXQgcz0wO3M8dC5zaXplLmxlbmd0aC0xO3MrKyljKj10LnNpemVbc107bGV0IEI9MDtpZih0LmRhdGEhPW51bGwpZm9yKGxldCBzPTA7czxBLmxlbmd0aDtzKyspdC5kYXRhLnNldChBW3NdLmRhdGEsYypCKSxCKz1BW3NdLnNpemVbbl07ZWxzZSB0aHJvdyBFcnJvcigiQ291bGQgbm90IGNyZWF0ZSByZXN1bHQgaW1hZ2UgZGF0YS4iKTtyZXR1cm4gdH12YXIgVEE9R3Q7dmFyIEdBPWNsYXNze2Zjbjt3b3JrZXJRdWV1ZTtydW5JbmZvO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mY249dCx0aGlzLndvcmtlclF1ZXVlPW5ldyBBcnJheShlKSx0aGlzLndvcmtlclF1ZXVlLmZpbGwobnVsbCksdGhpcy5ydW5JbmZvPVtdfXJ1blRhc2tzKGUsdD1udWxsKXtsZXQgcj17dGFza1F1ZXVlOltdLHJlc3VsdHM6W10sYWRkaW5nVGFza3M6ITEscG9zdHBvbmVkOiExLHJ1bm5pbmdXb3JrZXJzOjAsaW5kZXg6MCxjb21wbGV0ZWRUYXNrczowLHByb2dyZXNzQ2FsbGJhY2s6dCxjYW5jZWxlZDohMX07cmV0dXJuIHRoaXMucnVuSW5mby5wdXNoKHIpLHIuaW5kZXg9dGhpcy5ydW5JbmZvLmxlbmd0aC0xLHtwcm9taXNlOm5ldyBQcm9taXNlKChuLGkpPT57ci5yZXNvbHZlPW4sci5yZWplY3Q9aSxyLnJlc3VsdHM9bmV3IEFycmF5KGUubGVuZ3RoKSxyLmNvbXBsZXRlZFRhc2tzPTAsci5hZGRpbmdUYXNrcz0hMCxlLmZvckVhY2goKG8sSSk9Pnt0aGlzLmFkZFRhc2soci5pbmRleCxJLG8pfSksci5hZGRpbmdUYXNrcz0hMX0pLHJ1bklkOnIuaW5kZXh9fXRlcm1pbmF0ZVdvcmtlcnMoKXtmb3IobGV0IGU9MDtlPHRoaXMud29ya2VyUXVldWUubGVuZ3RoO2UrKyl7bGV0IHQ9dGhpcy53b3JrZXJRdWV1ZVtlXTt0Py50ZXJtaW5hdGUoKSx0aGlzLndvcmtlclF1ZXVlW2VdPW51bGx9fWNhbmNlbChlKXtsZXQgdD10aGlzLnJ1bkluZm9bZV07dCE9bnVsbCYmKHQuY2FuY2VsZWQ9ITApfWFkZFRhc2soZSx0LHIpe2xldCBuPXRoaXMucnVuSW5mb1tlXTtpZihuPy5jYW5jZWxlZD09PSEwKXtuLnJlamVjdCgiUmVtYWluaW5nIHRhc2tzIGNhbmNlbGVkIiksdGhpcy5jbGVhclRhc2sobi5pbmRleCk7cmV0dXJufWlmKHRoaXMud29ya2VyUXVldWUubGVuZ3RoPjApe2xldCBpPXRoaXMud29ya2VyUXVldWUucG9wKCk7bi5ydW5uaW5nV29ya2VycysrLHJbci5sZW5ndGgtMV0ud2ViV29ya2VyPWksdGhpcy5mY24oLi4ucikudGhlbigoe3dlYldvcmtlcjpvLC4uLkl9KT0+e2lmKHRoaXMud29ya2VyUXVldWUucHVzaChvKSx0aGlzLnJ1bkluZm9bZV0hPT1udWxsKXtpZihuLnJ1bm5pbmdXb3JrZXJzLS0sbi5yZXN1bHRzW3RdPUksbi5jb21wbGV0ZWRUYXNrcysrLG4ucHJvZ3Jlc3NDYWxsYmFjayE9bnVsbCYmbi5wcm9ncmVzc0NhbGxiYWNrKG4uY29tcGxldGVkVGFza3Msbi5yZXN1bHRzLmxlbmd0aCksbi50YXNrUXVldWUubGVuZ3RoPjApe2xldCBjPW4udGFza1F1ZXVlLnNoaWZ0KCk7dGhpcy5hZGRUYXNrKGUsY1swXSxjWzFdKX1lbHNlIGlmKCFuLmFkZGluZ1Rhc2tzJiZuLnJ1bm5pbmdXb3JrZXJzPT09MCl7bGV0IGM9bi5yZXN1bHRzO24ucmVzb2x2ZShjKSx0aGlzLmNsZWFyVGFzayhuLmluZGV4KX19fSkuY2F0Y2gobz0+e24ucmVqZWN0KG8pLHRoaXMuY2xlYXJUYXNrKG4uaW5kZXgpfSl9ZWxzZSBuLnJ1bm5pbmdXb3JrZXJzIT09MHx8bi5wb3N0cG9uZWQ/bi50YXNrUXVldWUucHVzaChbdCxyXSk6KG4ucG9zdHBvbmVkPSEwLHNldFRpbWVvdXQoKCk9PntuLnBvc3Rwb25lZD0hMSx0aGlzLmFkZFRhc2sobi5pbmRleCx0LHIpfSw1MCkpfWNsZWFyVGFzayhlKXt0aGlzLnJ1bkluZm9bZV0ucmVzdWx0cz1bXSx0aGlzLnJ1bkluZm9bZV0udGFza1F1ZXVlPVtdLHRoaXMucnVuSW5mb1tlXS5wcm9ncmVzc0NhbGxiYWNrPW51bGwsdGhpcy5ydW5JbmZvW2VdLmNhbmNlbGVkPW51bGwsdGhpcy5ydW5JbmZvW2VdLnJlamVjdD0oKT0+e30sdGhpcy5ydW5JbmZvW2VdLnJlc29sdmU9KCk9Pnt9fX0sT0E9R0E7dmFyIE90PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sRT1PdDt2YXIgRWU9U3ltYm9sKCJDb21saW5rLnByb3h5IiksTHQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IikseEE9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLExBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxJQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIikscGU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsUHQ9e2NhbkhhbmRsZTpBPT5wZShBKSYmQVtFZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gbWUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLEpBKEEpfX0seHQ9e2NhbkhhbmRsZTpBPT5wZShBKSYmSUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LFFlPW5ldyBNYXAoW1sicHJveHkiLFB0XSxbInRocm93Iix4dF1dKTtmdW5jdGlvbiBKdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbWUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG4pe2lmKCFufHwhbi5kYXRhKXJldHVybjtpZighSnQodCxuLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7bi5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6aSx0eXBlOm8scGF0aDpJfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxuLmRhdGEpLGM9KG4uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoSCksQjt0cnl7bGV0IHM9SS5zbGljZSgwLC0xKS5yZWR1Y2UoKGYsbCk9PmZbbF0sQSksYT1JLnJlZHVjZSgoZixsKT0+ZltsXSxBKTtzd2l0Y2gobyl7Y2FzZSJHRVQiOkI9YTticmVhaztjYXNlIlNFVCI6c1tJLnNsaWNlKC0xKVswXV09SChuLmRhdGEudmFsdWUpLEI9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6Qj1hLmFwcGx5KHMsYyk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgYSguLi5jKTtCPXF0KGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpsfT1uZXcgTWVzc2FnZUNoYW5uZWw7bWUoQSxsKSxCPUhBKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOkI9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChzKXtCPXt2YWx1ZTpzLFtJQV06MH19UHJvbWlzZS5yZXNvbHZlKEIpLmNhdGNoKHM9Pih7dmFsdWU6cyxbSUFdOjB9KSkudGhlbihzPT57bGV0W2EsZl09QkEocyk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOml9KSxmKSxvPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxkZShlKSxMQSBpbiBBJiZ0eXBlb2YgQVtMQV09PSJmdW5jdGlvbiImJkFbTEFdKCkpfSkuY2F0Y2gocz0+e2xldFthLGZdPUJBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbSUFdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6aX0pLGYpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gSHQoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gZGUoQSl7SHQoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBKQShBLGUpe3JldHVybiBQQShBLFtdLGUpfWZ1bmN0aW9uIHNBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBoZShBKXtyZXR1cm4gWShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntkZShBKX0pfXZhciBnQT1uZXcgV2Vha01hcCxsQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oZ0EuZ2V0KEEpfHwwKS0xO2dBLnNldChBLGUpLGU9PT0wJiZoZShBKX0pO2Z1bmN0aW9uIE10KEEsZSl7bGV0IHQ9KGdBLmdldChlKXx8MCkrMTtnQS5zZXQoZSx0KSxsQSYmbEEucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIFd0KEEpe2xBJiZsQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIFBBKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbj1uZXcgUHJveHkodCx7Z2V0KGksbyl7aWYoc0Eociksbz09PXhBKXJldHVybigpPT57V3QobiksaGUoQSkscj0hMH07aWYobz09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5ufTtsZXQgST1ZKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChjPT5jLnRvU3RyaW5nKCkpfSkudGhlbihIKTtyZXR1cm4gSS50aGVuLmJpbmQoSSl9cmV0dXJuIFBBKEEsWy4uLmUsb10pfSxzZXQoaSxvLEkpe3NBKHIpO2xldFtjLEJdPUJBKEkpO3JldHVybiBZKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxvXS5tYXAocz0+cy50b1N0cmluZygpKSx2YWx1ZTpjfSxCKS50aGVuKEgpfSxhcHBseShpLG8sSSl7c0Eocik7bGV0IGM9ZVtlLmxlbmd0aC0xXTtpZihjPT09THQpcmV0dXJuIFkoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihIKTtpZihjPT09ImJpbmQiKXJldHVybiBQQShBLGUuc2xpY2UoMCwtMSkpO2xldFtCLHNdPWZlKEkpO3JldHVybiBZKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkJ9LHMpLnRoZW4oSCl9LGNvbnN0cnVjdChpLG8pe3NBKHIpO2xldFtJLGNdPWZlKG8pO3JldHVybiBZKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChCPT5CLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpJfSxjKS50aGVuKEgpfX0pO3JldHVybiBNdChuLEEpLG59ZnVuY3Rpb24gWXQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gZmUoQSl7bGV0IGU9QS5tYXAoQkEpO3JldHVybltlLm1hcCh0PT50WzBdKSxZdChlLm1hcCh0PT50WzFdKSldfXZhciB5ZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBIQShBLGUpe3JldHVybiB5ZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIHF0KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tFZV06ITB9KX1mdW5jdGlvbiBCQShBKXtmb3IobGV0W2UsdF1vZiBRZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isbl09dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sbl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LHllLmdldChBKXx8W11dfWZ1bmN0aW9uIEgoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gUWUuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBZKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBuPUt0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKG8peyFvLmRhdGF8fCFvLmRhdGEuaWR8fG8uZGF0YS5pZCE9PW58fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLHIoby5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpufSxlKSx0KX0pfWZ1bmN0aW9uIEt0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBYKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6dnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOllBfT1PYmplY3QsY0E9KEE9PmU9PntsZXQgdD12dC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTz1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+Y0EoZSk9PT1BKSxDQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6cX09QXJyYXksJD1DQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24ganQoQSl7cmV0dXJuIEEhPT1udWxsJiYhJChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiEkKEEuY29uc3RydWN0b3IpJiZUKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBrZT1PKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIF90KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYma2UoQS5idWZmZXIpLGV9dmFyIHp0PUNBKCJzdHJpbmciKSxUPUNBKCJmdW5jdGlvbiIpLEZlPUNBKCJudW1iZXIiKSxmQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLFZ0PUE9PkE9PT0hMHx8QT09PSExLHVBPUE9PntpZihjQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPVlBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LFp0PU8oIkRhdGUiKSxYdD1PKCJGaWxlIiksJHQ9TygiQmxvYiIpLEFyPU8oIkZpbGVMaXN0IiksZXI9QT0+ZkEoQSkmJlQoQS5waXBlKSx0cj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8VChBLmFwcGVuZCkmJigoZT1jQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJlQoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0scnI9TygiVVJMU2VhcmNoUGFyYW1zIiksaXI9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uIEFBKEEsZSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IHIsbjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSkscShBKSlmb3Iocj0wLG49QS5sZW5ndGg7cjxuO3IrKyllLmNhbGwobnVsbCxBW3JdLHIsQSk7ZWxzZXtsZXQgaT10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG89aS5sZW5ndGgsSTtmb3Iocj0wO3I8bztyKyspST1pW3JdLGUuY2FsbChudWxsLEFbSV0sSSxBKX19ZnVuY3Rpb24gYmUoQSxlKXtlPWUudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxyPXQubGVuZ3RoLG47Zm9yKDtyLS0gPjA7KWlmKG49dFtyXSxlPT09bi50b0xvd2VyQ2FzZSgpKXJldHVybiBuO3JldHVybiBudWxsfXZhciBSZT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLFVlPUE9PiEkKEEpJiZBIT09UmU7ZnVuY3Rpb24gV0EoKXtsZXR7Y2FzZWxlc3M6QX09VWUodGhpcykmJnRoaXN8fHt9LGU9e30sdD0ocixuKT0+e2xldCBpPUEmJmJlKGUsbil8fG47dUEoZVtpXSkmJnVBKHIpP2VbaV09V0EoZVtpXSxyKTp1QShyKT9lW2ldPVdBKHt9LHIpOnEocik/ZVtpXT1yLnNsaWNlKCk6ZVtpXT1yfTtmb3IobGV0IHI9MCxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKylhcmd1bWVudHNbcl0mJkFBKGFyZ3VtZW50c1tyXSx0KTtyZXR1cm4gZX12YXIgbnI9KEEsZSx0LHthbGxPd25LZXlzOnJ9PXt9KT0+KEFBKGUsKG4saSk9Pnt0JiZUKG4pP0FbaV09WChuLHQpOkFbaV09bn0se2FsbE93bktleXM6cn0pLEEpLG9yPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksYXI9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sc3I9KEEsZSx0LHIpPT57bGV0IG4saSxvLEk9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLGk9bi5sZW5ndGg7aS0tID4wOylvPW5baV0sKCFyfHxyKG8sQSxlKSkmJiFJW29dJiYoZVtvXT1BW29dLElbb109ITApO0E9dCE9PSExJiZZQShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0sSXI9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxncj1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYocShBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighRmUoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LGxyPShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZZQShVaW50OEFycmF5KSksQnI9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG47Zm9yKDsobj1yLm5leHQoKSkmJiFuLmRvbmU7KXtsZXQgaT1uLnZhbHVlO2UuY2FsbChBLGlbMF0saVsxXSl9fSx1cj0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxjcj1PKCJIVE1MRm9ybUVsZW1lbnQiKSxDcj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbil7cmV0dXJuIHIudG9VcHBlckNhc2UoKStufSksRGU9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLGZyPU8oIlJlZ0V4cCIpLE5lPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTtBQSh0LChuLGkpPT57bGV0IG87KG89ZShuLGksQSkpIT09ITEmJihyW2ldPW98fG4pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxyKX0sRXI9QT0+e05lKEEsKGUsdCk9PntpZihUKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YodCkhPT0tMSlyZXR1cm4hMTtsZXQgcj1BW3RdO2lmKFQocikpe2lmKGUuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gZSl7ZS53cml0YWJsZT0hMTtyZXR1cm59ZS5zZXR8fChlLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIit0KyInIil9KX19KX0scHI9KEEsZSk9PntsZXQgdD17fSxyPW49PntuLmZvckVhY2goaT0+e3RbaV09ITB9KX07cmV0dXJuIHEoQSk/cihBKTpyKFN0cmluZyhBKS5zcGxpdChlKSksdH0sUXI9KCk9Pnt9LG1yPShBLGUpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTplKSxNQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLFNlPSIwMTIzNDU2Nzg5IixUZT17RElHSVQ6U2UsQUxQSEE6TUEsQUxQSEFfRElHSVQ6TUErTUEudG9VcHBlckNhc2UoKStTZX0sZHI9KEE9MTYsZT1UZS5BTFBIQV9ESUdJVCk9PntsZXQgdD0iIix7bGVuZ3RoOnJ9PWU7Zm9yKDtBLS07KXQrPWVbTWF0aC5yYW5kb20oKSpyfDBdO3JldHVybiB0fTtmdW5jdGlvbiBocihBKXtyZXR1cm4hIShBJiZUKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgeXI9QT0+e2xldCBlPW5ldyBBcnJheSgxMCksdD0ocixuKT0+e2lmKGZBKHIpKXtpZihlLmluZGV4T2Yocik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiByKSl7ZVtuXT1yO2xldCBpPXEocik/W106e307cmV0dXJuIEFBKHIsKG8sSSk9PntsZXQgYz10KG8sbisxKTshJChjKSYmKGlbSV09Yyl9KSxlW25dPXZvaWQgMCxpfX1yZXR1cm4gcn07cmV0dXJuIHQoQSwwKX0sd3I9TygiQXN5bmNGdW5jdGlvbiIpLERyPUE9PkEmJihmQShBKXx8VChBKSkmJlQoQS50aGVuKSYmVChBLmNhdGNoKSxnPXtpc0FycmF5OnEsaXNBcnJheUJ1ZmZlcjprZSxpc0J1ZmZlcjpqdCxpc0Zvcm1EYXRhOnRyLGlzQXJyYXlCdWZmZXJWaWV3Ol90LGlzU3RyaW5nOnp0LGlzTnVtYmVyOkZlLGlzQm9vbGVhbjpWdCxpc09iamVjdDpmQSxpc1BsYWluT2JqZWN0OnVBLGlzVW5kZWZpbmVkOiQsaXNEYXRlOlp0LGlzRmlsZTpYdCxpc0Jsb2I6JHQsaXNSZWdFeHA6ZnIsaXNGdW5jdGlvbjpULGlzU3RyZWFtOmVyLGlzVVJMU2VhcmNoUGFyYW1zOnJyLGlzVHlwZWRBcnJheTpscixpc0ZpbGVMaXN0OkFyLGZvckVhY2g6QUEsbWVyZ2U6V0EsZXh0ZW5kOm5yLHRyaW06aXIsc3RyaXBCT006b3IsaW5oZXJpdHM6YXIsdG9GbGF0T2JqZWN0OnNyLGtpbmRPZjpjQSxraW5kT2ZUZXN0Ok8sZW5kc1dpdGg6SXIsdG9BcnJheTpncixmb3JFYWNoRW50cnk6QnIsbWF0Y2hBbGw6dXIsaXNIVE1MRm9ybTpjcixoYXNPd25Qcm9wZXJ0eTpEZSxoYXNPd25Qcm9wOkRlLHJlZHVjZURlc2NyaXB0b3JzOk5lLGZyZWV6ZU1ldGhvZHM6RXIsdG9PYmplY3RTZXQ6cHIsdG9DYW1lbENhc2U6Q3Isbm9vcDpRcix0b0Zpbml0ZU51bWJlcjptcixmaW5kS2V5OmJlLGdsb2JhbDpSZSxpc0NvbnRleHREZWZpbmVkOlVlLEFMUEhBQkVUOlRlLGdlbmVyYXRlU3RyaW5nOmRyLGlzU3BlY0NvbXBsaWFudEZvcm06aHIsdG9KU09OT2JqZWN0OnlyLGlzQXN5bmNGbjp3cixpc1RoZW5hYmxlOkRyfTtmdW5jdGlvbiBLKEEsZSx0LHIsbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG4mJih0aGlzLnJlc3BvbnNlPW4pfWcuaW5oZXJpdHMoSyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmcudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIEdlPUsucHJvdG90eXBlLE9lPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e09lW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEssT2UpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShHZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtLLmZyb209KEEsZSx0LHIsbixpKT0+e2xldCBvPU9iamVjdC5jcmVhdGUoR2UpO3JldHVybiBnLnRvRmxhdE9iamVjdChBLG8sZnVuY3Rpb24oYyl7cmV0dXJuIGMhPT1FcnJvci5wcm90b3R5cGV9LEk9PkkhPT0iaXNBeGlvc0Vycm9yIiksSy5jYWxsKG8sQS5tZXNzYWdlLGUsdCxyLG4pLG8uY2F1c2U9QSxvLm5hbWU9QS5uYW1lLGkmJk9iamVjdC5hc3NpZ24obyxpKSxvfTt2YXIgbT1LO3ZhciBFQT1udWxsO2Z1bmN0aW9uIHFBKEEpe3JldHVybiBnLmlzUGxhaW5PYmplY3QoQSl8fGcuaXNBcnJheShBKX1mdW5jdGlvbiBQZShBKXtyZXR1cm4gZy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBMZShBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG49UGUobiksIXQmJmk/IlsiK24rIl0iOm59KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIFNyKEEpe3JldHVybiBnLmlzQXJyYXkoQSkmJiFBLnNvbWUocUEpfXZhciBrcj1nLnRvRmxhdE9iamVjdChnLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gRnIoQSxlLHQpe2lmKCFnLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KEVBfHxGb3JtRGF0YSksdD1nLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24odSxwKXtyZXR1cm4hZy5pc1VuZGVmaW5lZChwW3VdKX0pO2xldCByPXQubWV0YVRva2VucyxuPXQudmlzaXRvcnx8cyxpPXQuZG90cyxvPXQuaW5kZXhlcyxjPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmcuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighZy5pc0Z1bmN0aW9uKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gQihDKXtpZihDPT09bnVsbClyZXR1cm4iIjtpZihnLmlzRGF0ZShDKSlyZXR1cm4gQy50b0lTT1N0cmluZygpO2lmKCFjJiZnLmlzQmxvYihDKSl0aHJvdyBuZXcgbSgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gZy5pc0FycmF5QnVmZmVyKEMpfHxnLmlzVHlwZWRBcnJheShDKT9jJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbQ10pOkJ1ZmZlci5mcm9tKEMpOkN9ZnVuY3Rpb24gcyhDLHUscCl7bGV0IFE9QztpZihDJiYhcCYmdHlwZW9mIEM9PSJvYmplY3QiKXtpZihnLmVuZHNXaXRoKHUsInt9IikpdT1yP3U6dS5zbGljZSgwLC0yKSxDPUpTT04uc3RyaW5naWZ5KEMpO2Vsc2UgaWYoZy5pc0FycmF5KEMpJiZTcihDKXx8KGcuaXNGaWxlTGlzdChDKXx8Zy5lbmRzV2l0aCh1LCJbXSIpKSYmKFE9Zy50b0FycmF5KEMpKSlyZXR1cm4gdT1QZSh1KSxRLmZvckVhY2goZnVuY3Rpb24oUyxaKXshKGcuaXNVbmRlZmluZWQoUyl8fFM9PT1udWxsKSYmZS5hcHBlbmQobz09PSEwP0xlKFt1XSxaLGkpOm89PT1udWxsP3U6dSsiW10iLEIoUykpfSksITF9cmV0dXJuIHFBKEMpPyEwOihlLmFwcGVuZChMZShwLHUsaSksQihDKSksITEpfWxldCBhPVtdLGY9T2JqZWN0LmFzc2lnbihrcix7ZGVmYXVsdFZpc2l0b3I6cyxjb252ZXJ0VmFsdWU6Qixpc1Zpc2l0YWJsZTpxQX0pO2Z1bmN0aW9uIGwoQyx1KXtpZighZy5pc1VuZGVmaW5lZChDKSl7aWYoYS5pbmRleE9mKEMpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK3Uuam9pbigiLiIpKTthLnB1c2goQyksZy5mb3JFYWNoKEMsZnVuY3Rpb24oUSxkKXsoIShnLmlzVW5kZWZpbmVkKFEpfHxRPT09bnVsbCkmJm4uY2FsbChlLFEsZy5pc1N0cmluZyhkKT9kLnRyaW0oKTpkLHUsZikpPT09ITAmJmwoUSx1P3UuY29uY2F0KGQpOltkXSl9KSxhLnBvcCgpfX1pZighZy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIGwoQSksZX12YXIgUD1GcjtmdW5jdGlvbiB4ZShBKXtsZXQgZT17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihyKXtyZXR1cm4gZVtyXX0pfWZ1bmN0aW9uIEplKEEsZSl7dGhpcy5fcGFpcnM9W10sQSYmUChBLHRoaXMsZSl9dmFyIEhlPUplLnByb3RvdHlwZTtIZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wYWlycy5wdXNoKFtlLHRdKX07SGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7bGV0IHQ9ZT9mdW5jdGlvbihyKXtyZXR1cm4gZS5jYWxsKHRoaXMscix4ZSl9OnhlO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQoblswXSkrIj0iK3QoblsxXSl9LCIiKS5qb2luKCImIil9O3ZhciBwQT1KZTtmdW5jdGlvbiBicihBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1mdW5jdGlvbiBlQShBLGUsdCl7aWYoIWUpcmV0dXJuIEE7bGV0IHI9dCYmdC5lbmNvZGV8fGJyLG49dCYmdC5zZXJpYWxpemUsaTtpZihuP2k9bihlLHQpOmk9Zy5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IHBBKGUsdCkudG9TdHJpbmcociksaSl7bGV0IG89QS5pbmRleE9mKCIjIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK2l9cmV0dXJuIEF9dmFyIEtBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6cj9yLnN5bmNocm9ub3VzOiExLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXtnLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihyKXtyIT09bnVsbCYmZShyKX0pfX0sdkE9S0E7dmFyIFFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgTWU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOnBBO3ZhciBXZT10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIFllPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIHFlPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOk1lLEZvcm1EYXRhOldlLEJsb2I6WWV9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgakE9e307a3QoakEse2hhc0Jyb3dzZXJFbnY6KCk9PktlLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+UnIsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5Vcn0pO3ZhciBLZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixScj0oQT0+S2UmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxVcj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIFI9ey4uLmpBLC4uLnFlfTtmdW5jdGlvbiBfQShBLGUpe3JldHVybiBQKEEsbmV3IFIuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LHIsbixpKXtyZXR1cm4gUi5pc05vZGUmJmcuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKHIsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTppLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBOcihBKXtyZXR1cm4gZy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIFRyKEEpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMoQSkscixuPXQubGVuZ3RoLGk7Zm9yKHI9MDtyPG47cisrKWk9dFtyXSxlW2ldPUFbaV07cmV0dXJuIGV9ZnVuY3Rpb24gR3IoQSl7ZnVuY3Rpb24gZSh0LHIsbixpKXtsZXQgbz10W2krK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBJPU51bWJlci5pc0Zpbml0ZSgrbyksYz1pPj10Lmxlbmd0aDtyZXR1cm4gbz0hbyYmZy5pc0FycmF5KG4pP24ubGVuZ3RoOm8sYz8oZy5oYXNPd25Qcm9wKG4sbyk/bltvXT1bbltvXSxyXTpuW29dPXIsIUkpOigoIW5bb118fCFnLmlzT2JqZWN0KG5bb10pKSYmKG5bb109W10pLGUodCxyLG5bb10saSkmJmcuaXNBcnJheShuW29dKSYmKG5bb109VHIobltvXSkpLCFJKX1pZihnLmlzRm9ybURhdGEoQSkmJmcuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gZy5mb3JFYWNoRW50cnkoQSwocixuKT0+e2UoTnIociksbix0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgbUE9R3I7ZnVuY3Rpb24gT3IoQSxlLHQpe2lmKGcuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxnLnRyaW0oQSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIHpBPXt0cmFuc2l0aW9uYWw6UUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxpPWcuaXNPYmplY3QoZSk7aWYoaSYmZy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLGcuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShtQShlKSk6ZTtpZihnLmlzQXJyYXlCdWZmZXIoZSl8fGcuaXNCdWZmZXIoZSl8fGcuaXNTdHJlYW0oZSl8fGcuaXNGaWxlKGUpfHxnLmlzQmxvYihlKSlyZXR1cm4gZTtpZihnLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihnLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgSTtpZihpKXtpZihyLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBfQShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEk9Zy5pc0ZpbGVMaXN0KGUpKXx8ci5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBjPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gUChJP3siZmlsZXNbXSI6ZX06ZSxjJiZuZXcgYyx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIGl8fG4/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxPcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8ekEudHJhbnNpdGlvbmFsLHI9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxuPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJmcuaXNTdHJpbmcoZSkmJihyJiYhdGhpcy5yZXNwb25zZVR5cGV8fG4pKXtsZXQgbz0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChJKXtpZihvKXRocm93IEkubmFtZT09PSJTeW50YXhFcnJvciI/bS5mcm9tKEksbS5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpJfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6Ui5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6Ui5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Zy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9Pnt6QS5oZWFkZXJzW0FdPXt9fSk7dmFyIHY9ekE7dmFyIExyPWcudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksdmU9QT0+e2xldCBlPXt9LHQscixuO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihvKXtuPW8uaW5kZXhPZigiOiIpLHQ9by5zdWJzdHJpbmcoMCxuKS50cmltKCkudG9Mb3dlckNhc2UoKSxyPW8uc3Vic3RyaW5nKG4rMSkudHJpbSgpLCEoIXR8fGVbdF0mJkxyW3RdKSYmKHQ9PT0ic2V0LWNvb2tpZSI/ZVt0XT9lW3RdLnB1c2gocik6ZVt0XT1bcl06ZVt0XT1lW3RdP2VbdF0rIiwgIityOnIpfSksZX07dmFyIGplPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gdEEoQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBkQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6Zy5pc0FycmF5KEEpP0EubWFwKGRBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gUHIoQSl7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2cscjtmb3IoO3I9dC5leGVjKEEpOyllW3JbMV1dPXJbMl07cmV0dXJuIGV9dmFyIHhyPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIFZBKEEsZSx0LHIsbil7aWYoZy5pc0Z1bmN0aW9uKHIpKXJldHVybiByLmNhbGwodGhpcyxlLHQpO2lmKG4mJihlPXQpLCEhZy5pc1N0cmluZyhlKSl7aWYoZy5pc1N0cmluZyhyKSlyZXR1cm4gZS5pbmRleE9mKHIpIT09LTE7aWYoZy5pc1JlZ0V4cChyKSlyZXR1cm4gci50ZXN0KGUpfX1mdW5jdGlvbiBKcihBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLChlLHQscik9PnQudG9VcHBlckNhc2UoKStyKX1mdW5jdGlvbiBIcihBLGUpe2xldCB0PWcudG9DYW1lbENhc2UoIiAiK2UpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChyPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEscit0LHt2YWx1ZTpmdW5jdGlvbihuLGksbyl7cmV0dXJuIHRoaXNbcl0uY2FsbCh0aGlzLGUsbixpLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBqPWNsYXNze2NvbnN0cnVjdG9yKGUpe2UmJnRoaXMuc2V0KGUpfXNldChlLHQscil7bGV0IG49dGhpcztmdW5jdGlvbiBpKEksYyxCKXtsZXQgcz10QShjKTtpZighcyl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGE9Zy5maW5kS2V5KG4scyk7KCFhfHxuW2FdPT09dm9pZCAwfHxCPT09ITB8fEI9PT12b2lkIDAmJm5bYV0hPT0hMSkmJihuW2F8fGNdPWRBKEkpKX1sZXQgbz0oSSxjKT0+Zy5mb3JFYWNoKEksKEIscyk9PmkoQixzLGMpKTtyZXR1cm4gZy5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKGUsdCk6Zy5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYheHIoZSk/byh2ZShlKSx0KTplIT1udWxsJiZpKHQsZSxyKSx0aGlzfWdldChlLHQpe2lmKGU9dEEoZSksZSl7bGV0IHI9Zy5maW5kS2V5KHRoaXMsZSk7aWYocil7bGV0IG49dGhpc1tyXTtpZighdClyZXR1cm4gbjtpZih0PT09ITApcmV0dXJuIFByKG4pO2lmKGcuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsbixyKTtpZihnLmlzUmVnRXhwKHQpKXJldHVybiB0LmV4ZWMobik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHQpe2lmKGU9dEEoZSksZSl7bGV0IHI9Zy5maW5kS2V5KHRoaXMsZSk7cmV0dXJuISEociYmdGhpc1tyXSE9PXZvaWQgMCYmKCF0fHxWQSh0aGlzLHRoaXNbcl0scix0KSkpfXJldHVybiExfWRlbGV0ZShlLHQpe2xldCByPXRoaXMsbj0hMTtmdW5jdGlvbiBpKG8pe2lmKG89dEEobyksbyl7bGV0IEk9Zy5maW5kS2V5KHIsbyk7SSYmKCF0fHxWQShyLHJbSV0sSSx0KSkmJihkZWxldGUgcltJXSxuPSEwKX19cmV0dXJuIGcuaXNBcnJheShlKT9lLmZvckVhY2goaSk6aShlKSxufWNsZWFyKGUpe2xldCB0PU9iamVjdC5rZXlzKHRoaXMpLHI9dC5sZW5ndGgsbj0hMTtmb3IoO3ItLTspe2xldCBpPXRbcl07KCFlfHxWQSh0aGlzLHRoaXNbaV0saSxlLCEwKSkmJihkZWxldGUgdGhpc1tpXSxuPSEwKX1yZXR1cm4gbn1ub3JtYWxpemUoZSl7bGV0IHQ9dGhpcyxyPXt9O3JldHVybiBnLmZvckVhY2godGhpcywobixpKT0+e2xldCBvPWcuZmluZEtleShyLGkpO2lmKG8pe3Rbb109ZEEobiksZGVsZXRlIHRbaV07cmV0dXJufWxldCBJPWU/SnIoaSk6U3RyaW5nKGkpLnRyaW0oKTtJIT09aSYmZGVsZXRlIHRbaV0sdFtJXT1kQShuKSxyW0ldPSEwfSksdGhpc31jb25jYXQoLi4uZSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uZSl9dG9KU09OKGUpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGcuZm9yRWFjaCh0aGlzLChyLG4pPT57ciE9bnVsbCYmciE9PSExJiYodFtuXT1lJiZnLmlzQXJyYXkocik/ci5qb2luKCIsICIpOnIpfSksdH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbZSx0XSk9PmUrIjogIit0KS5qb2luKGAKYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXM/ZTpuZXcgdGhpcyhlKX1zdGF0aWMgY29uY2F0KGUsLi4udCl7bGV0IHI9bmV3IHRoaXMoZSk7cmV0dXJuIHQuZm9yRWFjaChuPT5yLnNldChuKSkscn1zdGF0aWMgYWNjZXNzb3IoZSl7bGV0IHI9KHRoaXNbamVdPXRoaXNbamVdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBpKG8pe2xldCBJPXRBKG8pO3JbSV18fChIcihuLG8pLHJbSV09ITApfXJldHVybiBnLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSksdGhpc319O2ouYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO2cucmVkdWNlRGVzY3JpcHRvcnMoai5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHIpe3RoaXNbdF09cn19fSk7Zy5mcmVlemVNZXRob2RzKGopO3ZhciBVPWo7ZnVuY3Rpb24gckEoQSxlKXtsZXQgdD10aGlzfHx2LHI9ZXx8dCxuPVUuZnJvbShyLmhlYWRlcnMpLGk9ci5kYXRhO3JldHVybiBnLmZvckVhY2goQSxmdW5jdGlvbihJKXtpPUkuY2FsbCh0LGksbi5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxuLm5vcm1hbGl6ZSgpLGl9ZnVuY3Rpb24gaUEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBfZShBLGUsdCl7bS5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixtLkVSUl9DQU5DRUxFRCxlLHQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Zy5pbmhlcml0cyhfZSxtLHtfX0NBTkNFTF9fOiEwfSk7dmFyIHg9X2U7ZnVuY3Rpb24gWkEoQSxlLHQpe2xldCByPXQuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyF0LnN0YXR1c3x8IXJ8fHIodC5zdGF0dXMpP0EodCk6ZShuZXcgbSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Quc3RhdHVzLFttLkVSUl9CQURfUkVRVUVTVCxtLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IodC5zdGF0dXMvMTAwKS00XSx0LmNvbmZpZyx0LnJlcXVlc3QsdCkpfXZhciB6ZT1SLmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHQscixuLGkpe2xldCBvPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO2cuaXNOdW1iZXIodCkmJm8ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHQpLnRvR01UU3RyaW5nKCkpLGcuaXNTdHJpbmcocikmJm8ucHVzaCgicGF0aD0iK3IpLGcuaXNTdHJpbmcobikmJm8ucHVzaCgiZG9tYWluPSIrbiksaT09PSEwJiZvLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1vLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBYQShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uICRBKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiBuQShBLGUpe3JldHVybiBBJiYhWEEoZSk/JEEoQSxlKTplfXZhciBWZT1SLmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikscjtmdW5jdGlvbiBuKGkpe2xldCBvPWk7cmV0dXJuIGUmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIHI9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IEk9Zy5pc1N0cmluZyhvKT9uKG8pOm87cmV0dXJuIEkucHJvdG9jb2w9PT1yLnByb3RvY29sJiZJLmhvc3Q9PT1yLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIEFlKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBNcihBLGUpe0E9QXx8MTA7bGV0IHQ9bmV3IEFycmF5KEEpLHI9bmV3IEFycmF5KEEpLG49MCxpPTAsbztyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKGMpe2xldCBCPURhdGUubm93KCkscz1yW2ldO298fChvPUIpLHRbbl09YyxyW25dPUI7bGV0IGE9aSxmPTA7Zm9yKDthIT09bjspZis9dFthKytdLGE9YSVBO2lmKG49KG4rMSklQSxuPT09aSYmKGk9KGkrMSklQSksQi1vPGUpcmV0dXJuO2xldCBsPXMmJkItcztyZXR1cm4gbD9NYXRoLnJvdW5kKGYqMWUzL2wpOnZvaWQgMH19dmFyIFplPU1yO2Z1bmN0aW9uIFhlKEEsZSl7bGV0IHQ9MCxyPVplKDUwLDI1MCk7cmV0dXJuIG49PntsZXQgaT1uLmxvYWRlZCxvPW4ubGVuZ3RoQ29tcHV0YWJsZT9uLnRvdGFsOnZvaWQgMCxJPWktdCxjPXIoSSksQj1pPD1vO3Q9aTtsZXQgcz17bG9hZGVkOmksdG90YWw6byxwcm9ncmVzczpvP2kvbzp2b2lkIDAsYnl0ZXM6SSxyYXRlOmN8fHZvaWQgMCxlc3RpbWF0ZWQ6YyYmbyYmQj8oby1pKS9jOnZvaWQgMCxldmVudDpufTtzW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShzKX19dmFyIFdyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsJGU9V3ImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe2xldCBuPUEuZGF0YSxpPVUuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOkl9PUEsYztmdW5jdGlvbiBCKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShjKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpfWxldCBzO2lmKGcuaXNGb3JtRGF0YShuKSl7aWYoUi5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fFIuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKHM9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbdSwuLi5wXT1zP3Muc3BsaXQoIjsiKS5tYXAoUT0+US50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFt1fHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4ucF0uam9pbigiOyAiKSl9fWxldCBhPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCB1PUEuYXV0aC51c2VybmFtZXx8IiIscD1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO2kuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKHUrIjoiK3ApKX1sZXQgZj1uQShBLmJhc2VVUkwsQS51cmwpO2Eub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLGVBKGYsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYS50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBsKCl7aWYoIWEpcmV0dXJuO2xldCB1PVUuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGEmJmEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLFE9e2RhdGE6IW98fG89PT0idGV4dCJ8fG89PT0ianNvbiI/YS5yZXNwb25zZVRleHQ6YS5yZXNwb25zZSxzdGF0dXM6YS5zdGF0dXMsc3RhdHVzVGV4dDphLnN0YXR1c1RleHQsaGVhZGVyczp1LGNvbmZpZzpBLHJlcXVlc3Q6YX07WkEoZnVuY3Rpb24oUyl7dChTKSxCKCl9LGZ1bmN0aW9uKFMpe3IoUyksQigpfSxRKSxhPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBhP2Eub25sb2FkZW5kPWw6YS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshYXx8YS5yZWFkeVN0YXRlIT09NHx8YS5zdGF0dXM9PT0wJiYhKGEucmVzcG9uc2VVUkwmJmEucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KGwpfSxhLm9uYWJvcnQ9ZnVuY3Rpb24oKXthJiYocihuZXcgbSgiUmVxdWVzdCBhYm9ydGVkIixtLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGwpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBtKCJOZXR3b3JrIEVycm9yIixtLkVSUl9ORVRXT1JLLEEsYSkpLGE9bnVsbH0sYS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgcD1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsUT1BLnRyYW5zaXRpb25hbHx8UUE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYocD1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIobmV3IG0ocCxRLmNsYXJpZnlUaW1lb3V0RXJyb3I/bS5FVElNRURPVVQ6bS5FQ09OTkFCT1JURUQsQSxhKSksYT1udWxsfSxSLmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKEkmJmcuaXNGdW5jdGlvbihJKSYmKEk9SShBKSksSXx8SSE9PSExJiZWZShmKSkpe2xldCB1PUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJnplLnJlYWQoQS54c3JmQ29va2llTmFtZSk7dSYmaS5zZXQoQS54c3JmSGVhZGVyTmFtZSx1KX1uPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGEmJmcuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKHAsUSl7YS5zZXRSZXF1ZXN0SGVhZGVyKFEscCl9KSxnLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KGEud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLG8mJm8hPT0ianNvbiImJihhLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZhLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixYZShBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEudXBsb2FkJiZhLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsWGUoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGM9dT0+e2EmJihyKCF1fHx1LnR5cGU/bmV3IHgobnVsbCxBLGEpOnUpLGEuYWJvcnQoKSxhPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShjKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/YygpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixjKSkpO2xldCBDPUFlKGYpO2lmKEMmJlIucHJvdG9jb2xzLmluZGV4T2YoQyk9PT0tMSl7cihuZXcgbSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitDKyI6IixtLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWEuc2VuZChufHxudWxsKX0pfTt2YXIgZWU9e2h0dHA6RUEseGhyOiRlfTtnLmZvckVhY2goZWUsKEEsZSk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTplfSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOmV9KX19KTt2YXIgQXQ9QT0+YC0gJHtBfWAsWXI9QT0+Zy5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLGhBPXtnZXRBZGFwdGVyOkE9PntBPWcuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOmV9PUEsdCxyLG49e307Zm9yKGxldCBpPTA7aTxlO2krKyl7dD1BW2ldO2xldCBvO2lmKHI9dCwhWXIodCkmJihyPWVlWyhvPVN0cmluZyh0KSkudG9Mb3dlckNhc2UoKV0scj09PXZvaWQgMCkpdGhyb3cgbmV3IG0oYFVua25vd24gYWRhcHRlciAnJHtvfSdgKTtpZihyKWJyZWFrO25bb3x8IiMiK2ldPXJ9aWYoIXIpe2xldCBpPU9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW0ksY10pPT5gYWRhcHRlciAke0l9IGArKGM9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPWU/aS5sZW5ndGg+MT9gc2luY2UgOgpgK2kubWFwKEF0KS5qb2luKGAKYCk6IiAiK0F0KGlbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IG0oIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gcn0sYWRhcHRlcnM6ZWV9O2Z1bmN0aW9uIHRlKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyB4KG51bGwsQSl9ZnVuY3Rpb24geUEoQSl7cmV0dXJuIHRlKEEpLEEuaGVhZGVycz1VLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9ckEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGhBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHx2LmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIHRlKEEpLHIuZGF0YT1yQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyKSxyLmhlYWRlcnM9VS5mcm9tKHIuaGVhZGVycykscn0sZnVuY3Rpb24ocil7cmV0dXJuIGlBKHIpfHwodGUoQSksciYmci5yZXNwb25zZSYmKHIucmVzcG9uc2UuZGF0YT1yQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyLnJlc3BvbnNlKSxyLnJlc3BvbnNlLmhlYWRlcnM9VS5mcm9tKHIucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChyKX0pfXZhciBldD1BPT5BIGluc3RhbmNlb2YgVT97Li4uQX06QTtmdW5jdGlvbiBMKEEsZSl7ZT1lfHx7fTtsZXQgdD17fTtmdW5jdGlvbiByKEIscyxhKXtyZXR1cm4gZy5pc1BsYWluT2JqZWN0KEIpJiZnLmlzUGxhaW5PYmplY3Qocyk/Zy5tZXJnZS5jYWxsKHtjYXNlbGVzczphfSxCLHMpOmcuaXNQbGFpbk9iamVjdChzKT9nLm1lcmdlKHt9LHMpOmcuaXNBcnJheShzKT9zLnNsaWNlKCk6c31mdW5jdGlvbiBuKEIscyxhKXtpZihnLmlzVW5kZWZpbmVkKHMpKXtpZighZy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gcih2b2lkIDAsQixhKX1lbHNlIHJldHVybiByKEIscyxhKX1mdW5jdGlvbiBpKEIscyl7aWYoIWcuaXNVbmRlZmluZWQocykpcmV0dXJuIHIodm9pZCAwLHMpfWZ1bmN0aW9uIG8oQixzKXtpZihnLmlzVW5kZWZpbmVkKHMpKXtpZighZy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gcih2b2lkIDAsQil9ZWxzZSByZXR1cm4gcih2b2lkIDAscyl9ZnVuY3Rpb24gSShCLHMsYSl7aWYoYSBpbiBlKXJldHVybiByKEIscyk7aWYoYSBpbiBBKXJldHVybiByKHZvaWQgMCxCKX1sZXQgYz17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpJLGhlYWRlcnM6KEIscyk9Pm4oZXQoQiksZXQocyksITApfTtyZXR1cm4gZy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSxlKSksZnVuY3Rpb24ocyl7bGV0IGE9Y1tzXXx8bixmPWEoQVtzXSxlW3NdLHMpO2cuaXNVbmRlZmluZWQoZikmJmEhPT1JfHwodFtzXT1mKX0pLHR9dmFyIHdBPSIxLjYuOCI7dmFyIHJlPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e3JlW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciB0dD17fTtyZS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oaSxvKXtyZXR1cm4iW0F4aW9zIHYiK3dBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIraSsiJyIrbysocj8iLiAiK3I6IiIpfXJldHVybihpLG8sSSk9PntpZihlPT09ITEpdGhyb3cgbmV3IG0obihvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxtLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIXR0W29dJiYodHRbb109ITAsY29uc29sZS53YXJuKG4obywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UoaSxvLEkpOiEwfX07ZnVuY3Rpb24gcXIoQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgbSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsbS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksbj1yLmxlbmd0aDtmb3IoO24tLSA+MDspe2xldCBpPXJbbl0sbz1lW2ldO2lmKG8pe2xldCBJPUFbaV0sYz1JPT09dm9pZCAwfHxvKEksaSxBKTtpZihjIT09ITApdGhyb3cgbmV3IG0oIm9wdGlvbiAiK2krIiBtdXN0IGJlICIrYyxtLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IG0oIlVua25vd24gb3B0aW9uICIraSxtLkVSUl9CQURfT1BUSU9OKX19dmFyIERBPXthc3NlcnRPcHRpb25zOnFyLHZhbGlkYXRvcnM6cmV9O3ZhciBKPURBLnZhbGlkYXRvcnMsXz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IHZBLHJlc3BvbnNlOm5ldyB2QX19YXN5bmMgcmVxdWVzdChlLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG47RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3I7bGV0IGk9bi5zdGFjaz9uLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7ci5zdGFjaz9pJiYhU3RyaW5nKHIuc3RhY2spLmVuZHNXaXRoKGkucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYoci5zdGFjays9YApgK2kpOnIuc3RhY2s9aX10aHJvdyByfX1fcmVxdWVzdChlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LHQ9TCh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm4saGVhZGVyczppfT10O3IhPT12b2lkIDAmJkRBLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKX0sITEpLG4hPW51bGwmJihnLmlzRnVuY3Rpb24obik/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bn06REEuYXNzZXJ0T3B0aW9ucyhuLHtlbmNvZGU6Si5mdW5jdGlvbixzZXJpYWxpemU6Si5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1pJiZnLm1lcmdlKGkuY29tbW9uLGlbdC5tZXRob2RdKTtpJiZnLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sQz0+e2RlbGV0ZSBpW0NdfSksdC5oZWFkZXJzPVUuY29uY2F0KG8saSk7bGV0IEk9W10sYz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24odSl7dHlwZW9mIHUucnVuV2hlbj09ImZ1bmN0aW9uIiYmdS5ydW5XaGVuKHQpPT09ITF8fChjPWMmJnUuc3luY2hyb25vdXMsSS51bnNoaWZ0KHUuZnVsZmlsbGVkLHUucmVqZWN0ZWQpKX0pO2xldCBCPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24odSl7Qi5wdXNoKHUuZnVsZmlsbGVkLHUucmVqZWN0ZWQpfSk7bGV0IHMsYT0wLGY7aWYoIWMpe2xldCBDPVt5QS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEMudW5zaGlmdC5hcHBseShDLEkpLEMucHVzaC5hcHBseShDLEIpLGY9Qy5sZW5ndGgscz1Qcm9taXNlLnJlc29sdmUodCk7YTxmOylzPXMudGhlbihDW2ErK10sQ1thKytdKTtyZXR1cm4gc31mPUkubGVuZ3RoO2xldCBsPXQ7Zm9yKGE9MDthPGY7KXtsZXQgQz1JW2ErK10sdT1JW2ErK107dHJ5e2w9QyhsKX1jYXRjaChwKXt1LmNhbGwodGhpcyxwKTticmVha319dHJ5e3M9eUEuY2FsbCh0aGlzLGwpfWNhdGNoKEMpe3JldHVybiBQcm9taXNlLnJlamVjdChDKX1mb3IoYT0wLGY9Qi5sZW5ndGg7YTxmOylzPXMudGhlbihCW2ErK10sQlthKytdKTtyZXR1cm4gc31nZXRVcmkoZSl7ZT1MKHRoaXMuZGVmYXVsdHMsZSk7bGV0IHQ9bkEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gZUEodCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07Zy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtfLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoTChyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSk7Zy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gZnVuY3Rpb24oaSxvLEkpe3JldHVybiB0aGlzLnJlcXVlc3QoTChJfHx7fSx7bWV0aG9kOmUsaGVhZGVyczpyP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDppLGRhdGE6b30pKX19Xy5wcm90b3R5cGVbZV09dCgpLF8ucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKX0pO3ZhciBvQT1fO3ZhciBpZT1jbGFzcyBBe2NvbnN0cnVjdG9yKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSl7dD1pfSk7bGV0IHI9dGhpczt0aGlzLnByb21pc2UudGhlbihuPT57aWYoIXIuX2xpc3RlbmVycylyZXR1cm47bGV0IGk9ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO2ktLSA+MDspci5fbGlzdGVuZXJzW2ldKG4pO3IuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49bj0+e2xldCBpLG89bmV3IFByb21pc2UoST0+e3Iuc3Vic2NyaWJlKEkpLGk9SX0pLnRoZW4obik7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZShpKX0sb30sZShmdW5jdGlvbihpLG8sSSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgeChpLG8sSSksdChyLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfXVuc3Vic2NyaWJlKGUpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgZTtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24obil7ZT1ufSksY2FuY2VsOmV9fX0scnQ9aWU7ZnVuY3Rpb24gbmUoQSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uIG9lKEEpe3JldHVybiBnLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBhZT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoYWUpLmZvckVhY2goKFtBLGVdKT0+e2FlW2VdPUF9KTt2YXIgaXQ9YWU7ZnVuY3Rpb24gbnQoQSl7bGV0IGU9bmV3IG9BKEEpLHQ9WChvQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gZy5leHRlbmQodCxvQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLGcuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIG50KEwoQSxuKSl9LHR9dmFyIEQ9bnQodik7RC5BeGlvcz1vQTtELkNhbmNlbGVkRXJyb3I9eDtELkNhbmNlbFRva2VuPXJ0O0QuaXNDYW5jZWw9aUE7RC5WRVJTSU9OPXdBO0QudG9Gb3JtRGF0YT1QO0QuQXhpb3NFcnJvcj1tO0QuQ2FuY2VsPUQuQ2FuY2VsZWRFcnJvcjtELmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O0Quc3ByZWFkPW5lO0QuaXNBeGlvc0Vycm9yPW9lO0QubWVyZ2VDb25maWc9TDtELkF4aW9zSGVhZGVycz1VO0QuZm9ybVRvSlNPTj1BPT5tQShnLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO0QuZ2V0QWRhcHRlcj1oQS5nZXRBZGFwdGVyO0QuSHR0cFN0YXR1c0NvZGU9aXQ7RC5kZWZhdWx0PUQ7dmFyIHo9RDt2YXJ7QXhpb3M6WWEsQXhpb3NFcnJvcjpxYSxDYW5jZWxlZEVycm9yOkthLGlzQ2FuY2VsOnZhLENhbmNlbFRva2VuOmphLFZFUlNJT046X2EsYWxsOnphLENhbmNlbDpWYSxpc0F4aW9zRXJyb3I6WmEsc3ByZWFkOlhhLHRvRm9ybURhdGE6JGEsQXhpb3NIZWFkZXJzOkFzLEh0dHBTdGF0dXNDb2RlOmVzLGZvcm1Ub0pTT046dHMsZ2V0QWRhcHRlcjpycyxtZXJnZUNvbmZpZzppc309ejthc3luYyBmdW5jdGlvbiBLcihBLGUpe2xldCB0PUEscj1udWxsO2lmKHQ9PW51bGwpcj1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG49YXdhaXQgei5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChuLmRhdGEpO3I9bmV3IFdvcmtlcihpLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBhQT1LcjtmdW5jdGlvbiBvdChBKXtsZXQgZT1KQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W3hBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIHZyKEEsZSx0KXtsZXQgcjtpZihBIT1udWxsKXtsZXQgaT1BO3JldHVybiBpLndvcmtlclByb3h5IT09dm9pZCAwPyhyPWkud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOml9KTpvdChBKX1sZXQgbj1hd2FpdCBhQShlLHQpO3JldHVybiBvdChuKX12YXIgYXQ9dnI7YXN5bmMgZnVuY3Rpb24ganIoQSxlLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/cj1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/cj1BOnI9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBuPWAke3J9Lndhc21gLG89KGF3YWl0IHouZ2V0KG4se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om99KX12YXIgc3Q9anI7dmFyIEl0PWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBCdD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixndD1uZXcgVGV4dEVuY29kZXIsbHQ9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIF9yKEEsZSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1BLmZzX29wZW4oZSx0LmZsYWdzKSxpPUEuZnNfc3RhdChlKS5zaXplLG89bnVsbDtCdD9vPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihpKTpvPW5ldyBBcnJheUJ1ZmZlcihpKTtsZXQgST1uZXcgVWludDhBcnJheShvKTtyZXR1cm4gQS5mc19yZWFkKHIsSSwwLGksMCksQS5mc19jbG9zZShyKSxJfWZ1bmN0aW9uIHV0KEEsZSx0KXtsZXQgcj1udWxsO0J0P3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBuPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUsdCk7cmV0dXJuIG4uc2V0KGkpLG59ZnVuY3Rpb24gayhBLGUsdCxyKXtsZXQgbj0wO3JldHVybiBlIT09bnVsbCYmKG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG4pKSxufWZ1bmN0aW9uIE0oQSxlLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KGUpLG49QS5sZW5ndGhCeXRlc1VURjgocikrMSxpPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxuXSk7QS5zdHJpbmdUb1VURjgocixpLG4pfWZ1bmN0aW9uIE4oQSxlLHQscil7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksaT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxvPXV0KEEsbixpKTtyZXR1cm4gRyhyLG8uYnVmZmVyKX1mdW5jdGlvbiBTQShBLGUpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLHI9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24genIoQSxlLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKEIscyl7c3dpdGNoKEIudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBhPWd0LmVuY29kZShCLmRhdGEuZGF0YSksZj1rKEEsYSxzLDApLGw9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEsbCxzKTticmVha31jYXNlIEUuSnNvbkNvbXBhdGlibGU6e2xldCBhPWd0LmVuY29kZShKU09OLnN0cmluZ2lmeShCLmRhdGEpKSxmPWsoQSxhLHMsMCksbD17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxsLHMpO2JyZWFrfWNhc2UgRS5CaW5hcnlTdHJlYW06e2xldCBhPUIuZGF0YS5kYXRhLGY9ayhBLGEscywwKSxsPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLGwscyk7YnJlYWt9Y2FzZSBFLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShCLmRhdGEucGF0aCxCLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBFLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKEIuZGF0YS5wYXRoLEIuZGF0YS5kYXRhKTticmVha31jYXNlIEUuSW1hZ2U6e2xldCBhPUIuZGF0YSxmPWsoQSxhLmRhdGEscywwKSxsPWsoQSxhLmRpcmVjdGlvbixzLDEpLEM9dHlwZW9mIGEubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oYS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLHU9e2ltYWdlVHlwZTphLmltYWdlVHlwZSxuYW1lOmEubmFtZSxvcmlnaW46YS5vcmlnaW4sc3BhY2luZzphLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLHNpemU6YS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6Q307TShBLHUscyk7YnJlYWt9Y2FzZSBFLk1lc2g6e2xldCBhPUIuZGF0YSxmPWsoQSxhLnBvaW50cyxzLDApLGw9ayhBLGEuY2VsbHMscywxKSxDPWsoQSxhLnBvaW50RGF0YSxzLDIpLHU9ayhBLGEuY2VsbERhdGEscywzKSxwPXttZXNoVHlwZTphLm1lc2hUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6YS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLGNlbGxCdWZmZXJTaXplOmEuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Q31gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07TShBLHAscyk7YnJlYWt9Y2FzZSBFLlBvaW50U2V0OntsZXQgYT1CLmRhdGEsZj1rKEEsYS5wb2ludHMscywwKSxsPWsoQSxhLnBvaW50RGF0YSxzLDEpLEM9e3BvaW50U2V0VHlwZTphLnBvaW50U2V0VHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtsfWB9O00oQSxDLHMpO2JyZWFrfWNhc2UgRS5Qb2x5RGF0YTp7bGV0IGE9Qi5kYXRhLGY9ayhBLGEucG9pbnRzLHMsMCksbD1rKEEsYS52ZXJ0aWNlcyxzLDEpLEM9ayhBLGEubGluZXMscywyKSx1PWsoQSxhLnBvbHlnb25zLHMsMykscD1rKEEsYS50cmlhbmdsZVN0cmlwcyxzLDQpLFE9ayhBLGEucG9pbnREYXRhLHMsNSksZD1rKEEsYS5wb2ludERhdGEscyw2KSxTPXtwb2x5RGF0YVR5cGU6YS5wb2x5RGF0YVR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOmEudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLGxpbmVzQnVmZmVyU2l6ZTphLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YCxwb2x5Z29uc0J1ZmZlclNpemU6YS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmEudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtkfWB9O00oQSxTLHMpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBuPUEuc3RhY2tTYXZlKCksaT0wO3RyeXtpPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChCKXt0aHJvdyB0eXBlb2YgQj09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShCKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxCfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobil9bGV0IG89QS5nZXRNb2R1bGVTdGRvdXQoKSxJPUEuZ2V0TW9kdWxlU3RkZXJyKCksYz1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmaT09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihCLHMpe2xldCBhPW51bGw7c3dpdGNoKEIudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBsPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksdT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbCxDKTthPXtkYXRhOmx0LmRlY29kZSh1KX07YnJlYWt9Y2FzZSBFLkpzb25Db21wYXRpYmxlOntsZXQgbD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSxDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLHU9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGwsQyk7YT1KU09OLnBhcnNlKGx0LmRlY29kZSh1KSk7YnJlYWt9Y2FzZSBFLkJpbmFyeVN0cmVhbTp7bGV0IGw9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKTthPXtkYXRhOnV0KEEsbCxDKX07YnJlYWt9Y2FzZSBFLlRleHRGaWxlOnthPXtwYXRoOkIuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShCLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRS5CaW5hcnlGaWxlOnthPXtwYXRoOkIuZGF0YS5wYXRoLGRhdGE6X3IoQSxCLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRS5JbWFnZTp7bGV0IGw9U0EoQSxzKTtsLmRhdGE9TihBLHMsMCxsLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxsLmRpcmVjdGlvbj1OKEEscywxLFcuRmxvYXQ2NCksbC5tZXRhZGF0YT1uZXcgTWFwKGwubWV0YWRhdGEpLGE9bDticmVha31jYXNlIEUuTWVzaDp7bGV0IGw9U0EoQSxzKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9TihBLHMsMCxsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6bC5wb2ludHM9RyhsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZDZWxscz4wP2wuY2VsbHM9TihBLHMsMSxsLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpsLmNlbGxzPUcobC5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZQb2ludFBpeGVscz4wP2wucG9pbnREYXRhPU4oQSxzLDIsbC5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9RyhsLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPU4oQSxzLDMsbC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpsLmNlbGxEYXRhPUcobC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1sO2JyZWFrfWNhc2UgRS5Qb2ludFNldDp7bGV0IGw9U0EoQSxzKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9TihBLHMsMCxsLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmwucG9pbnRzPUcobC5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bC5wb2ludERhdGE9TihBLHMsMSxsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9RyhsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9bDticmVha31jYXNlIEUuUG9seURhdGE6e2xldCBsPVNBKEEscyk7bC5udW1iZXJPZlBvaW50cz4wP2wucG9pbnRzPU4oQSxzLDAsVy5GbG9hdDMyKTpsLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGwudmVydGljZXNCdWZmZXJTaXplPjA/bC52ZXJ0aWNlcz1OKEEscywxLGIuVUludDMyKTpsLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxsLmxpbmVzQnVmZmVyU2l6ZT4wP2wubGluZXM9TihBLHMsMixiLlVJbnQzMik6bC5saW5lcz1uZXcgVWludDMyQXJyYXksbC5wb2x5Z29uc0J1ZmZlclNpemU+MD9sLnBvbHlnb25zPU4oQSxzLDMsYi5VSW50MzIpOmwucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGwudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bC50cmlhbmdsZVN0cmlwcz1OKEEscyw0LGIuVUludDMyKTpsLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxsLm51bWJlck9mUG9pbnRQaXhlbHM+MD9sLnBvaW50RGF0YT1OKEEscyw1LGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpsLnBvaW50RGF0YT1HKGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPU4oQSxzLDYsbC5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bC5jZWxsRGF0YT1HKGwucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPWw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpCLnR5cGUsZGF0YTphfTtjLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6byxzdGRlcnI6SSxvdXRwdXRzOmN9fXZhciBjdD16cjt2YXIgVnI9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFpyKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IG49WHIoQVtyXSxlKTtuIT09bnVsbCYmdC5wdXNoKG4pfXJldHVybiB0fWZ1bmN0aW9uIFhyKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksVnImJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBDdD1acjtmdW5jdGlvbiAkcihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgZnQ9JHI7ZnVuY3Rpb24gQWkoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIEV0PUFpO2Z1bmN0aW9uIGVpKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBwdD1laTt2YXIgdGk7ZnVuY3Rpb24ga0EoKXtyZXR1cm4gdGl9dmFyIHJpO2Z1bmN0aW9uIFF0KCl7cmV0dXJuIHJpfXZhciBpaTtmdW5jdGlvbiBGQSgpe3JldHVybiBpaX12YXIgc2U9bmV3IE1hcDtmdW5jdGlvbiBuaSgpe2xldCBBPUZBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBtdCgpe2xldCBBPWtBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIGJBKCl7bGV0IEE9UXQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBvaShBLGUsdCl7bGV0IHI9QSxuPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksbj1yLmhyZWYpLHNlLmhhcyhuKSlyZXR1cm4gc2UuZ2V0KG4pO3tsZXQgaT1hd2FpdCBzdChBLGU/LnRvU3RyaW5nKCk/P210KCksdD8/YkEoKSk7cmV0dXJuIHNlLnNldChuLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIGFpKEEsZSx0LHIsbil7aWYoIWF3YWl0IEl0KCkpe2xldCBwPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChwKSxuZXcgRXJyb3IocCl9bGV0IGk9bj8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IHA9YXdhaXQgb2koQS50b1N0cmluZygpLG4/LnBpcGVsaW5lQmFzZVVybCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9iQSgpKTtyZXR1cm4gY3QocCxlLHQscil9bGV0IG89aSxJPW4/LnBpcGVsaW5lV29ya2VyVXJsPz9uaSgpLGM9dHlwZW9mIEkhPSJzdHJpbmciJiZ0eXBlb2YgST8uaHJlZjwidSI/SS5ocmVmOkkse3dvcmtlclByb3h5OkIsd29ya2VyOnN9PWF3YWl0IGF0KG8sYyxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9iQSgpKTtvPXM7bGV0IGE9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKHApe2lmKHAudHlwZT09PUUuQmluYXJ5U3RyZWFtKXtsZXQgUT1wLmRhdGEuZGF0YTthLnB1c2goUSl9ZWxzZSBpZihwLnR5cGU9PT1FLkJpbmFyeUZpbGUpe2xldCBRPXAuZGF0YS5kYXRhO2EucHVzaChRKX1lbHNlIGlmKHAudHlwZT09PUUuSW1hZ2Upe2xldCBRPXAuZGF0YTtRLmRhdGEhPT1udWxsJiZhLnB1c2goLi4uZnQoUSkpfWVsc2UgaWYocC50eXBlPT09RS5NZXNoKXtsZXQgUT1wLmRhdGE7YS5wdXNoKC4uLkV0KFEpKX1lbHNlIGlmKHAudHlwZT09PUUuUG9seURhdGEpe2xldCBRPXAuZGF0YTthLnB1c2goLi4ucHQoUSkpfX0pO2xldCBmPW4/LnBpcGVsaW5lQmFzZVVybD8/bXQoKSxsPXR5cGVvZiBmIT0ic3RyaW5nIiYmdHlwZW9mIGY/LmhyZWY8InUiP2YuaHJlZjpmLEM9ciE9bnVsbD9IQShyLEN0KGEsbj8ubm9Db3B5KSk6bnVsbCx1PWF3YWl0IEIucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLGwsZSx0LEMsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/YkEoKSk7cmV0dXJue3JldHVyblZhbHVlOnUucmV0dXJuVmFsdWUsc3Rkb3V0OnUuc3Rkb3V0LHN0ZGVycjp1LnN0ZGVycixvdXRwdXRzOnUub3V0cHV0cyx3ZWJXb3JrZXI6b319dmFyIHk9YWk7dmFyIHNpPW51bGw7ZnVuY3Rpb24gZHQoKXtyZXR1cm4gc2l9dmFyIEllLElpPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9kaWNvbUAke1JBfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gX3MoQSl7SWU9QX1mdW5jdGlvbiB3KCl7aWYodHlwZW9mIEllPCJ1IilyZXR1cm4gSWU7bGV0IEE9a0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6SWl9dmFyIGdlLGdpPW51bGw7ZnVuY3Rpb24gaHQoQSl7Z2U9QX1mdW5jdGlvbiBoKCl7aWYodHlwZW9mIGdlPCJ1IilyZXR1cm4gZ2U7bGV0IEE9RkEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6Z2l9dmFyIFY9bnVsbDthc3luYyBmdW5jdGlvbiB5dCgpe2xldCBBPWgoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO1Y9YXdhaXQgYUEoZSl9ZnVuY3Rpb24gZUkoQSl7Vj1BfWFzeW5jIGZ1bmN0aW9uIEYoKXtpZihWIT09bnVsbClyZXR1cm4gVi50ZXJtaW5hdGVkJiZhd2FpdCB5dCgpLFY7bGV0IEE9ZHQoKTtyZXR1cm4gQSE9PW51bGw/QTooYXdhaXQgeXQoKSxWKX1hc3luYyBmdW5jdGlvbiBsaShBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuSW1hZ2V9XSxuPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBTPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtuPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFMpfX1sZXQgaT1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUz1hd2FpdCBlLmFycmF5QnVmZmVyKCk7aT17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShTKX19bGV0IG89W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOm59LHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOml9XSxJPVtdLGM9bi5wYXRoO0kucHVzaChjKTtsZXQgQj1pLnBhdGg7SS5wdXNoKEIpLEkucHVzaCgiMCIpLEkucHVzaCgiMSIpLEkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmNvbG9yT3V0cHV0JiZ0LmNvbG9yT3V0cHV0JiZJLnB1c2goIi0tY29sb3Itb3V0cHV0IiksdC5jb25maWdGaWxlJiZJLnB1c2goIi0tY29uZmlnLWZpbGUiLHQuY29uZmlnRmlsZS50b1N0cmluZygpKSx0LmZyYW1lJiZJLnB1c2goIi0tZnJhbWUiLHQuZnJhbWUudG9TdHJpbmcoKSksdC5ub1ByZXNlbnRhdGlvblN0YXRlT3V0cHV0JiZ0Lm5vUHJlc2VudGF0aW9uU3RhdGVPdXRwdXQmJkkucHVzaCgiLS1uby1wcmVzZW50YXRpb24tc3RhdGUtb3V0cHV0IiksdC5ub0JpdG1hcE91dHB1dCYmdC5ub0JpdG1hcE91dHB1dCYmSS5wdXNoKCItLW5vLWJpdG1hcC1vdXRwdXQiKTtsZXQgZj0iYXBwbHktcHJlc2VudGF0aW9uLXN0YXRlLXRvLWltYWdlIixsPXQ/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBGKCkpO2xldHt3ZWJXb3JrZXI6QyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpwLG91dHB1dHM6UX09YXdhaXQgeShmLEkscixvLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6bCxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnAhPT0iIil0aHJvdyBuZXcgRXJyb3IocCk7cmV0dXJue3dlYldvcmtlcjpDLHByZXNlbnRhdGlvblN0YXRlT3V0U3RyZWFtOlFbMF0/LmRhdGEsb3V0cHV0SW1hZ2U6UVsxXT8uZGF0YX19dmFyIEJpPWxpO2FzeW5jIGZ1bmN0aW9uIHVpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuQmluYXJ5U3RyZWFtfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2kucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5yZWFkRmlsZU9ubHkmJmUucmVhZEZpbGVPbmx5JiZpLnB1c2goIi0tcmVhZC1maWxlLW9ubHkiKSxlLnJlYWREYXRhc2V0JiZlLnJlYWREYXRhc2V0JiZpLnB1c2goIi0tcmVhZC1kYXRhc2V0IiksZS5yZWFkWGZlckF1dG8mJmUucmVhZFhmZXJBdXRvJiZpLnB1c2goIi0tcmVhZC14ZmVyLWF1dG8iKSxlLnJlYWRYZmVyRGV0ZWN0JiZlLnJlYWRYZmVyRGV0ZWN0JiZpLnB1c2goIi0tcmVhZC14ZmVyLWRldGVjdCIpLGUucmVhZFhmZXJMaXR0bGUmJmUucmVhZFhmZXJMaXR0bGUmJmkucHVzaCgiLS1yZWFkLXhmZXItbGl0dGxlIiksZS5yZWFkWGZlckJpZyYmZS5yZWFkWGZlckJpZyYmaS5wdXNoKCItLXJlYWQteGZlci1iaWciKSxlLnJlYWRYZmVySW1wbGljaXQmJmUucmVhZFhmZXJJbXBsaWNpdCYmaS5wdXNoKCItLXJlYWQteGZlci1pbXBsaWNpdCIpLGUuYWNjZXB0T2RkTGVuZ3RoJiZlLmFjY2VwdE9kZExlbmd0aCYmaS5wdXNoKCItLWFjY2VwdC1vZGQtbGVuZ3RoIiksZS5hc3N1bWVFdmVuTGVuZ3RoJiZlLmFzc3VtZUV2ZW5MZW5ndGgmJmkucHVzaCgiLS1hc3N1bWUtZXZlbi1sZW5ndGgiKSxlLmVuYWJsZUNwMjQ2JiZlLmVuYWJsZUNwMjQ2JiZpLnB1c2goIi0tZW5hYmxlLWNwMjQ2IiksZS5kaXNhYmxlQ3AyNDYmJmUuZGlzYWJsZUNwMjQ2JiZpLnB1c2goIi0tZGlzYWJsZS1jcDI0NiIpLGUucmV0YWluVW4mJmUucmV0YWluVW4mJmkucHVzaCgiLS1yZXRhaW4tdW4iKSxlLmNvbnZlcnRVbiYmZS5jb252ZXJ0VW4mJmkucHVzaCgiLS1jb252ZXJ0LXVuIiksZS5lbmFibGVDb3JyZWN0aW9uJiZlLmVuYWJsZUNvcnJlY3Rpb24mJmkucHVzaCgiLS1lbmFibGUtY29ycmVjdGlvbiIpLGUuZGlzYWJsZUNvcnJlY3Rpb24mJmUuZGlzYWJsZUNvcnJlY3Rpb24mJmkucHVzaCgiLS1kaXNhYmxlLWNvcnJlY3Rpb24iKTtsZXQgYz0icmVhZC1kaWNvbS1lbmNhcHN1bGF0ZWQtcGRmIixCPWU/LndlYldvcmtlcjtCPT09dm9pZCAwJiYoQj1hd2FpdCBGKCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTphLHN0ZGVycjpmLG91dHB1dHM6bH09YXdhaXQgeShjLGksdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6Qixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoYSE9PTAmJmYhPT0iIil0aHJvdyBuZXcgRXJyb3IoZik7cmV0dXJue3dlYldvcmtlcjpzLHBkZkJpbmFyeU91dHB1dDoobFswXT8uZGF0YSkuZGF0YX19dmFyIGNpPXVpO2FzeW5jIGZ1bmN0aW9uIENpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuVGV4dFN0cmVhbX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IHU9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkodSl9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpZihpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUucmVhZEZpbGVPbmx5JiZlLnJlYWRGaWxlT25seSYmaS5wdXNoKCItLXJlYWQtZmlsZS1vbmx5IiksZS5yZWFkRGF0YXNldCYmZS5yZWFkRGF0YXNldCYmaS5wdXNoKCItLXJlYWQtZGF0YXNldCIpLGUucmVhZFhmZXJBdXRvJiZlLnJlYWRYZmVyQXV0byYmaS5wdXNoKCItLXJlYWQteGZlci1hdXRvIiksZS5yZWFkWGZlckRldGVjdCYmZS5yZWFkWGZlckRldGVjdCYmaS5wdXNoKCItLXJlYWQteGZlci1kZXRlY3QiKSxlLnJlYWRYZmVyTGl0dGxlJiZlLnJlYWRYZmVyTGl0dGxlJiZpLnB1c2goIi0tcmVhZC14ZmVyLWxpdHRsZSIpLGUucmVhZFhmZXJCaWcmJmUucmVhZFhmZXJCaWcmJmkucHVzaCgiLS1yZWFkLXhmZXItYmlnIiksZS5yZWFkWGZlckltcGxpY2l0JiZlLnJlYWRYZmVySW1wbGljaXQmJmkucHVzaCgiLS1yZWFkLXhmZXItaW1wbGljaXQiKSxlLnByb2Nlc3NpbmdEZXRhaWxzJiZlLnByb2Nlc3NpbmdEZXRhaWxzJiZpLnB1c2goIi0tcHJvY2Vzc2luZy1kZXRhaWxzIiksZS51bmtub3duUmVsYXRpb25zaGlwJiZlLnVua25vd25SZWxhdGlvbnNoaXAmJmkucHVzaCgiLS11bmtub3duLXJlbGF0aW9uc2hpcCIpLGUuaW52YWxpZEl0ZW1WYWx1ZSYmZS5pbnZhbGlkSXRlbVZhbHVlJiZpLnB1c2goIi0taW52YWxpZC1pdGVtLXZhbHVlIiksZS5pZ25vcmVDb25zdHJhaW50cyYmZS5pZ25vcmVDb25zdHJhaW50cyYmaS5wdXNoKCItLWlnbm9yZS1jb25zdHJhaW50cyIpLGUuaWdub3JlSXRlbUVycm9ycyYmZS5pZ25vcmVJdGVtRXJyb3JzJiZpLnB1c2goIi0taWdub3JlLWl0ZW0tZXJyb3JzIiksZS5za2lwSW52YWxpZEl0ZW1zJiZlLnNraXBJbnZhbGlkSXRlbXMmJmkucHVzaCgiLS1za2lwLWludmFsaWQtaXRlbXMiKSxlLmRpc2FibGVWckNoZWNrZXImJmUuZGlzYWJsZVZyQ2hlY2tlciYmaS5wdXNoKCItLWRpc2FibGUtdnItY2hlY2tlciIpLGUuY2hhcnNldFJlcXVpcmUmJmUuY2hhcnNldFJlcXVpcmUmJmkucHVzaCgiLS1jaGFyc2V0LXJlcXVpcmUiKSxlLmNoYXJzZXRBc3N1bWUmJmkucHVzaCgiLS1jaGFyc2V0LWFzc3VtZSIsZS5jaGFyc2V0QXNzdW1lLnRvU3RyaW5nKCkpLGUuY2hhcnNldENoZWNrQWxsJiZlLmNoYXJzZXRDaGVja0FsbCYmaS5wdXNoKCItLWNoYXJzZXQtY2hlY2stYWxsIiksZS5jb252ZXJ0VG9VdGY4JiZlLmNvbnZlcnRUb1V0ZjgmJmkucHVzaCgiLS1jb252ZXJ0LXRvLXV0ZjgiKSxlLnVybFByZWZpeCYmaS5wdXNoKCItLXVybC1wcmVmaXgiLGUudXJsUHJlZml4LnRvU3RyaW5nKCkpLGUuaHRtbDMyJiZlLmh0bWwzMiYmaS5wdXNoKCItLWh0bWwtMzIiKSxlLmh0bWw0MCYmZS5odG1sNDAmJmkucHVzaCgiLS1odG1sLTQwIiksZS54aHRtbDExJiZlLnhodG1sMTEmJmkucHVzaCgiLS14aHRtbC0xMSIpLGUuYWRkRG9jdW1lbnRUeXBlJiZlLmFkZERvY3VtZW50VHlwZSYmaS5wdXNoKCItLWFkZC1kb2N1bWVudC10eXBlIiksZS5jc3NSZWZlcmVuY2Upe2xldCB1PW4ubGVuZ3RoLnRvU3RyaW5nKCk7bi5wdXNoKHt0eXBlOkUuVGV4dFN0cmVhbSxkYXRhOntkYXRhOmUuY3NzUmVmZXJlbmNlfX0pLGkucHVzaCgiLS1jc3MtcmVmZXJlbmNlIix1KX1pZihlLmNzc0ZpbGUpe2xldCB1PWUuY3NzRmlsZSxwPXU7aWYodSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IHUuYXJyYXlCdWZmZXIoKTtwPXtwYXRoOnUubmFtZSxkYXRhOm5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkKX19aS5wdXNoKCItLWNzcy1maWxlIiksbi5wdXNoKHt0eXBlOkUuVGV4dEZpbGUsZGF0YTpwfSk7bGV0IFE9dSBpbnN0YW5jZW9mIEZpbGU/dS5uYW1lOnUucGF0aDtpLnB1c2goUSl9ZS5leHBhbmRJbmxpbmUmJmUuZXhwYW5kSW5saW5lJiZpLnB1c2goIi0tZXhwYW5kLWlubGluZSIpLGUubmV2ZXJFeHBhbmRJbmxpbmUmJmUubmV2ZXJFeHBhbmRJbmxpbmUmJmkucHVzaCgiLS1uZXZlci1leHBhbmQtaW5saW5lIiksZS5hbHdheXNFeHBhbmRJbmxpbmUmJmUuYWx3YXlzRXhwYW5kSW5saW5lJiZpLnB1c2goIi0tYWx3YXlzLWV4cGFuZC1pbmxpbmUiKSxlLnJlbmRlckZ1bGxEYXRhJiZlLnJlbmRlckZ1bGxEYXRhJiZpLnB1c2goIi0tcmVuZGVyLWZ1bGwtZGF0YSIpLGUuc2VjdGlvblRpdGxlSW5saW5lJiZlLnNlY3Rpb25UaXRsZUlubGluZSYmaS5wdXNoKCItLXNlY3Rpb24tdGl0bGUtaW5saW5lIiksZS5kb2N1bWVudFR5cGVUaXRsZSYmZS5kb2N1bWVudFR5cGVUaXRsZSYmaS5wdXNoKCItLWRvY3VtZW50LXR5cGUtdGl0bGUiKSxlLnBhdGllbnRJbmZvVGl0bGUmJmUucGF0aWVudEluZm9UaXRsZSYmaS5wdXNoKCItLXBhdGllbnQtaW5mby10aXRsZSIpLGUubm9Eb2N1bWVudEhlYWRlciYmZS5ub0RvY3VtZW50SGVhZGVyJiZpLnB1c2goIi0tbm8tZG9jdW1lbnQtaGVhZGVyIiksZS5yZW5kZXJJbmxpbmVDb2RlcyYmZS5yZW5kZXJJbmxpbmVDb2RlcyYmaS5wdXNoKCItLXJlbmRlci1pbmxpbmUtY29kZXMiKSxlLmNvbmNlcHROYW1lQ29kZXMmJmUuY29uY2VwdE5hbWVDb2RlcyYmaS5wdXNoKCItLWNvbmNlcHQtbmFtZS1jb2RlcyIpLGUubnVtZXJpY1VuaXRDb2RlcyYmZS5udW1lcmljVW5pdENvZGVzJiZpLnB1c2goIi0tbnVtZXJpYy11bml0LWNvZGVzIiksZS5jb2RlVmFsdWVVbml0JiZlLmNvZGVWYWx1ZVVuaXQmJmkucHVzaCgiLS1jb2RlLXZhbHVlLXVuaXQiKSxlLmNvZGVNZWFuaW5nVW5pdCYmZS5jb2RlTWVhbmluZ1VuaXQmJmkucHVzaCgiLS1jb2RlLW1lYW5pbmctdW5pdCIpLGUucmVuZGVyQWxsQ29kZXMmJmUucmVuZGVyQWxsQ29kZXMmJmkucHVzaCgiLS1yZW5kZXItYWxsLWNvZGVzIiksZS5jb2RlRGV0YWlsc1Rvb2x0aXAmJmUuY29kZURldGFpbHNUb29sdGlwJiZpLnB1c2goIi0tY29kZS1kZXRhaWxzLXRvb2x0aXAiKTtsZXQgYz0ic3RydWN0dXJlZC1yZXBvcnQtdG8taHRtbCIsQj1lPy53ZWJXb3JrZXI7Qj09PXZvaWQgMCYmKEI9YXdhaXQgRigpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6YSxzdGRlcnI6ZixvdXRwdXRzOmx9PWF3YWl0IHkoYyxpLHQsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOkIsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGEhPT0wJiZmIT09IiIpdGhyb3cgbmV3IEVycm9yKGYpO3JldHVybnt3ZWJXb3JrZXI6cyxvdXRwdXRUZXh0OihsWzBdPy5kYXRhKS5kYXRhfX12YXIgZmk9Q2k7YXN5bmMgZnVuY3Rpb24gRWkoQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5UZXh0U3RyZWFtfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2kucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS51bmtub3duUmVsYXRpb25zaGlwJiZlLnVua25vd25SZWxhdGlvbnNoaXAmJmkucHVzaCgiLS11bmtub3duLXJlbGF0aW9uc2hpcCIpLGUuaW52YWxpZEl0ZW1WYWx1ZSYmZS5pbnZhbGlkSXRlbVZhbHVlJiZpLnB1c2goIi0taW52YWxpZC1pdGVtLXZhbHVlIiksZS5pZ25vcmVDb25zdHJhaW50cyYmZS5pZ25vcmVDb25zdHJhaW50cyYmaS5wdXNoKCItLWlnbm9yZS1jb25zdHJhaW50cyIpLGUuaWdub3JlSXRlbUVycm9ycyYmZS5pZ25vcmVJdGVtRXJyb3JzJiZpLnB1c2goIi0taWdub3JlLWl0ZW0tZXJyb3JzIiksZS5za2lwSW52YWxpZEl0ZW1zJiZlLnNraXBJbnZhbGlkSXRlbXMmJmkucHVzaCgiLS1za2lwLWludmFsaWQtaXRlbXMiKSxlLm5vRG9jdW1lbnRIZWFkZXImJmUubm9Eb2N1bWVudEhlYWRlciYmaS5wdXNoKCItLW5vLWRvY3VtZW50LWhlYWRlciIpLGUubnVtYmVyTmVzdGVkSXRlbXMmJmUubnVtYmVyTmVzdGVkSXRlbXMmJmkucHVzaCgiLS1udW1iZXItbmVzdGVkLWl0ZW1zIiksZS5zaG9ydGVuTG9uZ1ZhbHVlcyYmZS5zaG9ydGVuTG9uZ1ZhbHVlcyYmaS5wdXNoKCItLXNob3J0ZW4tbG9uZy12YWx1ZXMiKSxlLnByaW50SW5zdGFuY2VVaWQmJmUucHJpbnRJbnN0YW5jZVVpZCYmaS5wdXNoKCItLXByaW50LWluc3RhbmNlLXVpZCIpLGUucHJpbnRTb3BjbGFzc1Nob3J0JiZlLnByaW50U29wY2xhc3NTaG9ydCYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLXNob3J0IiksZS5wcmludFNvcGNsYXNzTG9uZyYmZS5wcmludFNvcGNsYXNzTG9uZyYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLWxvbmciKSxlLnByaW50U29wY2xhc3NVaWQmJmUucHJpbnRTb3BjbGFzc1VpZCYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLXVpZCIpLGUucHJpbnRBbGxDb2RlcyYmZS5wcmludEFsbENvZGVzJiZpLnB1c2goIi0tcHJpbnQtYWxsLWNvZGVzIiksZS5wcmludEludmFsaWRDb2RlcyYmZS5wcmludEludmFsaWRDb2RlcyYmaS5wdXNoKCItLXByaW50LWludmFsaWQtY29kZXMiKSxlLnByaW50VGVtcGxhdGVJZCYmZS5wcmludFRlbXBsYXRlSWQmJmkucHVzaCgiLS1wcmludC10ZW1wbGF0ZS1pZCIpLGUuaW5kaWNhdGVFbmhhbmNlZCYmZS5pbmRpY2F0ZUVuaGFuY2VkJiZpLnB1c2goIi0taW5kaWNhdGUtZW5oYW5jZWQiKSxlLnByaW50Q29sb3ImJmUucHJpbnRDb2xvciYmaS5wdXNoKCItLXByaW50LWNvbG9yIik7bGV0IGM9InN0cnVjdHVyZWQtcmVwb3J0LXRvLXRleHQiLEI9ZT8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOmEsc3RkZXJyOmYsb3V0cHV0czpsfT1hd2FpdCB5KGMsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpCLG5vQ29weTplPy5ub0NvcHl9KTtpZihhIT09MCYmZiE9PSIiKXRocm93IG5ldyBFcnJvcihmKTtyZXR1cm57d2ViV29ya2VyOnMsb3V0cHV0VGV4dDoobFswXT8uZGF0YSkuZGF0YX19dmFyIHBpPUVpO2FzeW5jIGZ1bmN0aW9uIFFpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBDPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEMpfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aWYoaS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgZS50YWdzVG9SZWFkPCJ1Iil7bGV0IEM9bi5sZW5ndGgudG9TdHJpbmcoKTtuLnB1c2goe3R5cGU6RS5Kc29uQ29tcGF0aWJsZSxkYXRhOmUudGFnc1RvUmVhZH0pLGkucHVzaCgiLS10YWdzLXRvLXJlYWQiLEMpfWxldCBjPSJyZWFkLWRpY29tLXRhZ3MiLHt3ZWJXb3JrZXI6QixyZXR1cm5WYWx1ZTpzLHN0ZGVycjphLG91dHB1dHM6Zn09YXdhaXQgeShjLGksdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6ZT8ud2ViV29ya2VyPz9udWxsfSk7aWYocyE9PTApdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6Qix0YWdzOmZbMF0uZGF0YX19dmFyIG1pPVFpO2FzeW5jIGZ1bmN0aW9uIGRpKEEsZT0hMSx0PXt9KXtsZXQgcj1be3R5cGU6RS5JbWFnZX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZX1dLG49W10saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksaS5wdXNoKCItLWlucHV0LWltYWdlcyIpLEEuZm9yRWFjaChDPT57bi5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOkN9KSxpLnB1c2goQy5wYXRoKX0pLHR5cGVvZiBlPCJ1IiYmZSYmaS5wdXNoKCItLXNpbmdsZS1zb3J0ZWQtc2VyaWVzIik7bGV0IGM9InJlYWQtaW1hZ2UtZGljb20tZmlsZS1zZXJpZXMiLHt3ZWJXb3JrZXI6QixyZXR1cm5WYWx1ZTpzLHN0ZGVycjphLG91dHB1dHM6Zn09YXdhaXQgeShjLGkscixuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6dD8ud2ViV29ya2VyPz9udWxsfSk7aWYocyE9PTApdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6QixvdXRwdXRJbWFnZTpmWzBdLmRhdGEsc29ydGVkRmlsZW5hbWVzOmZbMV0uZGF0YX19dmFyIGxlPWRpO3ZhciBoaT10eXBlb2YgZ2xvYmFsVGhpcy5uYXZpZ2F0b3I/LmhhcmR3YXJlQ29uY3VycmVuY3k9PSJudW1iZXIiP2dsb2JhbFRoaXMubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k6NCx3dD04O2FzeW5jIGZ1bmN0aW9uIHlpKEE9e2lucHV0SW1hZ2VzOltdfSl7bGV0IGU9QS53ZWJXb3JrZXJQb29sPz9udWxsO2U9PT1udWxsJiYoZT1uZXcgT0EoaGksbGUpKTtsZXQgdD1bXTtpZihBLmlucHV0SW1hZ2VzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignImlucHV0LWltYWdlcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtpZihhd2FpdCBQcm9taXNlLmFsbChBLmlucHV0SW1hZ2VzLm1hcChhc3luYyByPT57bGV0IG49cjtpZihyIGluc3RhbmNlb2YgRmlsZSl7bGV0IGk9YXdhaXQgci5hcnJheUJ1ZmZlcigpO249e3BhdGg6ci5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoaSl9fXQucHVzaChuKX0pKSxBLnNpbmdsZVNvcnRlZFNlcmllcyl7bGV0IHI9W107Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDtjKz13dCl7bGV0IEI9dC5zbGljZShjLGMrd3QpO3IucHVzaChbQixBLnNpbmdsZVNvcnRlZFNlcmllcyx7fV0pfWxldCBuPWF3YWl0IGUucnVuVGFza3MocikucHJvbWlzZSxpPW4ubWFwKGM9PmMub3V0cHV0SW1hZ2UpLG89bi5yZWR1Y2UoKGMsQik9PmMuY29uY2F0KEIuc29ydGVkRmlsZW5hbWVzKSxbXSk7cmV0dXJue291dHB1dEltYWdlOlRBKGkpLHdlYldvcmtlclBvb2w6ZSxzb3J0ZWRGaWxlbmFtZXM6b319ZWxzZXtsZXQgcj1bW3QsQS5zaW5nbGVTb3J0ZWRTZXJpZXMse31dXSxuPWF3YWl0IGUucnVuVGFza3MocikucHJvbWlzZTtyZXR1cm57b3V0cHV0SW1hZ2U6blswXS5vdXRwdXRJbWFnZSx3ZWJXb3JrZXJQb29sOmUsc29ydGVkRmlsZW5hbWVzOm5bMF0uc29ydGVkRmlsZW5hbWVzfX19dmFyIHdpPXlpO2FzeW5jIGZ1bmN0aW9uIERpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSW1hZ2V9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGV9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBwPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KHApfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKTtsZXQgQj0icmVhZC1zZWdtZW50YXRpb24iLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOmwsb3V0cHV0czpDfT1hd2FpdCB5KEIsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihmIT09MCYmbCE9PSIiKXRocm93IG5ldyBFcnJvcihsKTtyZXR1cm57d2ViV29ya2VyOmEsc2VnSW1hZ2U6Q1swXT8uZGF0YSxtZXRhSW5mbzpDWzFdPy5kYXRhfX12YXIgU2k9RGk7YXN5bmMgZnVuY3Rpb24ga2koQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5JbWFnZX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IHA9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkocCl9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUubWVyZ2VTZWdtZW50cyYmZS5tZXJnZVNlZ21lbnRzJiZpLnB1c2goIi0tbWVyZ2Utc2VnbWVudHMiKTtsZXQgQj0icmVhZC1vdmVybGFwcGluZy1zZWdtZW50YXRpb24iLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOmwsb3V0cHV0czpDfT1hd2FpdCB5KEIsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihmIT09MCYmbCE9PSIiKXRocm93IG5ldyBFcnJvcihsKTtyZXR1cm57d2ViV29ya2VyOmEsc2VnSW1hZ2U6Q1swXT8uZGF0YSxtZXRhSW5mbzpDWzFdPy5kYXRhfX12YXIgRmk9a2k7YXN5bmMgZnVuY3Rpb24gYmkoQSxlLHQscj17cmVmRGljb21TZXJpZXM6W119KXtsZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLGk9W3t0eXBlOkUuSW1hZ2UsZGF0YTpBfSx7dHlwZTpFLkpzb25Db21wYXRpYmxlLGRhdGE6ZX1dLG89W107by5wdXNoKCIwIiksby5wdXNoKCIxIik7bGV0IEI9dDtpZihvLnB1c2goQiksby5wdXNoKCItLW1lbW9yeS1pbyIpLHIucmVmRGljb21TZXJpZXMpe2lmKHIucmVmRGljb21TZXJpZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcicmVmLWRpY29tLXNlcmllcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtvLnB1c2goIi0tcmVmLWRpY29tLXNlcmllcyIpLGF3YWl0IFByb21pc2UuYWxsKHIucmVmRGljb21TZXJpZXMubWFwKGFzeW5jIFE9PntsZXQgZD1RO2lmKFEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgWj1hd2FpdCBRLmFycmF5QnVmZmVyKCk7ZD17cGF0aDpRLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShaKX19aS5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOmR9KTtsZXQgUz1RIGluc3RhbmNlb2YgRmlsZT9RLm5hbWU6ZC5wYXRoO28ucHVzaChTKX0pKX1yLnNraXBFbXB0eVNsaWNlcyYmci5za2lwRW1wdHlTbGljZXMmJm8ucHVzaCgiLS1za2lwLWVtcHR5LXNsaWNlcyIpLHIudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmci51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZvLnB1c2goIi0tdXNlLWxhYmVsaWQtYXMtc2VnbWVudG51bWJlciIpO2xldCBzPSJ3cml0ZS1zZWdtZW50YXRpb24iLGE9cj8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjpmLHJldHVyblZhbHVlOmwsc3RkZXJyOkMsb3V0cHV0czp1fT1hd2FpdCB5KHMsbyxuLGkse3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjphLG5vQ29weTpyPy5ub0NvcHl9KTtpZihsIT09MCYmQyE9PSIiKXRocm93IG5ldyBFcnJvcihDKTtyZXR1cm57d2ViV29ya2VyOmYsb3V0cHV0RGljb21GaWxlOnVbMF0/LmRhdGF9fXZhciBSaT1iaTthc3luYyBmdW5jdGlvbiBVaShBLGUsdCxyPXtyZWZEaWNvbVNlcmllczpbXX0pe2xldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0saT1be3R5cGU6RS5JbWFnZSxkYXRhOkF9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGUsZGF0YTplfV0sbz1bXTtvLnB1c2goIjAiKSxvLnB1c2goIjEiKTtsZXQgQj10O2lmKG8ucHVzaChCKSxvLnB1c2goIi0tbWVtb3J5LWlvIiksci5yZWZEaWNvbVNlcmllcyl7aWYoci5yZWZEaWNvbVNlcmllcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJyZWYtZGljb20tc2VyaWVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO28ucHVzaCgiLS1yZWYtZGljb20tc2VyaWVzIiksYXdhaXQgUHJvbWlzZS5hbGwoci5yZWZEaWNvbVNlcmllcy5tYXAoYXN5bmMgUT0+e2xldCBkPVE7aWYoUSBpbnN0YW5jZW9mIEZpbGUpe2xldCBaPWF3YWl0IFEuYXJyYXlCdWZmZXIoKTtkPXtwYXRoOlEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFopfX1pLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6ZH0pO2xldCBTPVEgaW5zdGFuY2VvZiBGaWxlP1EubmFtZTpkLnBhdGg7by5wdXNoKFMpfSkpfXIuc2tpcEVtcHR5U2xpY2VzJiZyLnNraXBFbXB0eVNsaWNlcyYmby5wdXNoKCItLXNraXAtZW1wdHktc2xpY2VzIiksci51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZyLnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJm8ucHVzaCgiLS11c2UtbGFiZWxpZC1hcy1zZWdtZW50bnVtYmVyIik7bGV0IHM9IndyaXRlLW92ZXJsYXBwaW5nLXNlZ21lbnRhdGlvbiIsYT1yPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgRigpKTtsZXR7d2ViV29ya2VyOmYscmV0dXJuVmFsdWU6bCxzdGRlcnI6QyxvdXRwdXRzOnV9PWF3YWl0IHkocyxvLG4saSx7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOmEsbm9Db3B5OnI/Lm5vQ29weX0pO2lmKGwhPT0wJiZDIT09IiIpdGhyb3cgbmV3IEVycm9yKEMpO3JldHVybnt3ZWJXb3JrZXI6ZixvdXRwdXREaWNvbUZpbGU6dVswXT8uZGF0YX19dmFyIE5pPVVpO2FzeW5jIGZ1bmN0aW9uIFRpKEEsZSx0PXtyZWZEaWNvbVNlcmllczpbXSxzZWdJbWFnZXM6W119KXtsZXQgcj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG49W3t0eXBlOkUuSnNvbkNvbXBhdGlibGUsZGF0YTpBfV0saT1bXTtpLnB1c2goIjAiKTtsZXQgST1lO2lmKGkucHVzaChJKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5yZWZEaWNvbVNlcmllcyl7aWYodC5yZWZEaWNvbVNlcmllcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJyZWYtZGljb20tc2VyaWVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO2kucHVzaCgiLS1yZWYtZGljb20tc2VyaWVzIiksYXdhaXQgUHJvbWlzZS5hbGwodC5yZWZEaWNvbVNlcmllcy5tYXAoYXN5bmMgdT0+e2xldCBwPXU7aWYodSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IHUuYXJyYXlCdWZmZXIoKTtwPXtwYXRoOnUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1uLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cH0pO2xldCBRPXUgaW5zdGFuY2VvZiBGaWxlP3UubmFtZTpwLnBhdGg7aS5wdXNoKFEpfSkpfWlmKHQuc2VnSW1hZ2VzKXtpZih0LnNlZ0ltYWdlcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzZWctaW1hZ2VzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO2kucHVzaCgiLS1zZWctaW1hZ2VzIiksYXdhaXQgUHJvbWlzZS5hbGwodC5zZWdJbWFnZXMubWFwKGFzeW5jIHU9PntsZXQgcD11O2lmKHUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCB1LmFycmF5QnVmZmVyKCk7cD17cGF0aDp1Lm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bi5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnB9KTtsZXQgUT11IGluc3RhbmNlb2YgRmlsZT91Lm5hbWU6cC5wYXRoO2kucHVzaChRKX0pKX10LnNraXBFbXB0eVNsaWNlcyYmdC5za2lwRW1wdHlTbGljZXMmJmkucHVzaCgiLS1za2lwLWVtcHR5LXNsaWNlcyIpLHQudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmdC51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZpLnB1c2goIi0tdXNlLWxhYmVsaWQtYXMtc2VnbWVudG51bWJlciIpO2xldCBjPSJ3cml0ZS1tdWx0aS1zZWdtZW50YXRpb24iLEI9dD8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOmEsc3RkZXJyOmYsb3V0cHV0czpsfT1hd2FpdCB5KGMsaSxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpCLG5vQ29weTp0Py5ub0NvcHl9KTtpZihhIT09MCYmZiE9PSIiKXRocm93IG5ldyBFcnJvcihmKTtyZXR1cm57d2ViV29ya2VyOnMsb3V0cHV0RGljb21GaWxlOmxbMF0/LmRhdGF9fXZhciBHaT1UaTt2YXIgRHQ9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIElJPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZUk9KEEsdCk9Pntmb3IodmFyIEkgaW4gdClJSShBLEkse2dldDp0W0ldLGVudW1lcmFibGU6ITB9KX07dmFyIHZBPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGdJPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHJJPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxwQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLCRBPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLG9JPXtjYW5IYW5kbGU6QT0+JEEoQSkmJkFbdkFdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6dCxwb3J0MjpJfT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGlBKEEsdCksW0ksW0ldXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxuSShBKX19LGlJPXtjYW5IYW5kbGU6QT0+JEEoQSkmJmVBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IHQ7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj90PXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06dD17aXNFcnJvcjohMSx2YWx1ZTpBfSxbdCxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxBdD1uZXcgTWFwKFtbInByb3h5IixvSV0sWyJ0aHJvdyIsaUldXSk7ZnVuY3Rpb24gQ0koQSx0KXtmb3IobGV0IEkgb2YgQSlpZih0PT09SXx8ST09PSIqInx8SSBpbnN0YW5jZW9mIFJlZ0V4cCYmSS50ZXN0KHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGlBKEEsdD1nbG9iYWxUaGlzLEk9WyIqIl0pe3QuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gZShnKXtpZighZ3x8IWcuZGF0YSlyZXR1cm47aWYoIUNJKEksZy5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luIFwnJHtnLm9yaWdpbn1cJyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6cix0eXBlOm8scGF0aDpufT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxnLmRhdGEpLGE9KGcuZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoYiksUTt0cnl7bGV0IEI9bi5zbGljZSgwLC0xKS5yZWR1Y2UoKGYscyk9PmZbc10sQSksaT1uLnJlZHVjZSgoZixzKT0+ZltzXSxBKTtzd2l0Y2gobyl7Y2FzZSJHRVQiOlE9aTticmVhaztjYXNlIlNFVCI6QltuLnNsaWNlKC0xKVswXV09YihnLmRhdGEudmFsdWUpLFE9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6UT1pLmFwcGx5KEIsYSk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgaSguLi5hKTtRPWFJKGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpzfT1uZXcgTWVzc2FnZUNoYW5uZWw7aUEoQSxzKSxRPUZBKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOlE9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChCKXtRPXt2YWx1ZTpCLFtlQV06MH19UHJvbWlzZS5yZXNvbHZlKFEpLmNhdGNoKEI9Pih7dmFsdWU6QixbZUFdOjB9KSkudGhlbihCPT57bGV0W2ksZl09b0EoQik7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse2lkOnJ9KSxmKSxvPT09IlJFTEVBU0UiJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixlKSx0dCh0KSxwQSBpbiBBJiZ0eXBlb2YgQVtwQV09PSJmdW5jdGlvbiImJkFbcEFdKCkpfSkuY2F0Y2goQj0+e2xldFtpLGZdPW9BKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbZUFdOjB9KTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpfSl9KSx0LnN0YXJ0JiZ0LnN0YXJ0KCl9ZnVuY3Rpb24gQkkoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gdHQoQSl7QkkoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBuSShBLHQpe3JldHVybiBTQShBLFtdLHQpfWZ1bmN0aW9uIElBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBJdChBKXtyZXR1cm4gcShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9Pnt0dChBKX0pfXZhciBnQT1uZXcgV2Vha01hcCxyQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgdD0oZ0EuZ2V0KEEpfHwwKS0xO2dBLnNldChBLHQpLHQ9PT0wJiZJdChBKX0pO2Z1bmN0aW9uIHNJKEEsdCl7bGV0IEk9KGdBLmdldCh0KXx8MCkrMTtnQS5zZXQodCxJKSxyQSYmckEucmVnaXN0ZXIoQSx0LEEpfWZ1bmN0aW9uIFFJKEEpe3JBJiZyQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIFNBKEEsdD1bXSxJPWZ1bmN0aW9uKCl7fSl7bGV0IGU9ITEsZz1uZXcgUHJveHkoSSx7Z2V0KHIsbyl7aWYoSUEoZSksbz09PXJJKXJldHVybigpPT57UUkoZyksSXQoQSksZT0hMH07aWYobz09PSJ0aGVuIil7aWYodC5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5nfTtsZXQgbj1xKEEse3R5cGU6IkdFVCIscGF0aDp0Lm1hcChhPT5hLnRvU3RyaW5nKCkpfSkudGhlbihiKTtyZXR1cm4gbi50aGVuLmJpbmQobil9cmV0dXJuIFNBKEEsWy4uLnQsb10pfSxzZXQocixvLG4pe0lBKGUpO2xldFthLFFdPW9BKG4pO3JldHVybiBxKEEse3R5cGU6IlNFVCIscGF0aDpbLi4udCxvXS5tYXAoQj0+Qi50b1N0cmluZygpKSx2YWx1ZTphfSxRKS50aGVuKGIpfSxhcHBseShyLG8sbil7SUEoZSk7bGV0IGE9dFt0Lmxlbmd0aC0xXTtpZihhPT09Z0kpcmV0dXJuIHEoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihiKTtpZihhPT09ImJpbmQiKXJldHVybiBTQShBLHQuc2xpY2UoMCwtMSkpO2xldFtRLEJdPV9BKG4pO3JldHVybiBxKEEse3R5cGU6IkFQUExZIixwYXRoOnQubWFwKGk9PmkudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OlF9LEIpLnRoZW4oYil9LGNvbnN0cnVjdChyLG8pe0lBKGUpO2xldFtuLGFdPV9BKG8pO3JldHVybiBxKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDp0Lm1hcChRPT5RLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpufSxhKS50aGVuKGIpfX0pO3JldHVybiBzSShnLEEpLGd9ZnVuY3Rpb24gRUkoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gX0EoQSl7bGV0IHQ9QS5tYXAob0EpO3JldHVyblt0Lm1hcChJPT5JWzBdKSxFSSh0Lm1hcChJPT5JWzFdKSldfXZhciBldD1uZXcgV2Vha01hcDtmdW5jdGlvbiBGQShBLHQpe3JldHVybiBldC5zZXQoQSx0KSxBfWZ1bmN0aW9uIGFJKEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1t2QV06ITB9KX1mdW5jdGlvbiBvQShBKXtmb3IobGV0W3QsSV1vZiBBdClpZihJLmNhbkhhbmRsZShBKSl7bGV0W2UsZ109SS5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOnQsdmFsdWU6ZX0sZ119cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGV0LmdldChBKXx8W11dfWZ1bmN0aW9uIGIoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gQXQuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBxKEEsdCxJKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e2xldCBnPWNJKCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG8peyFvLmRhdGF8fCFvLmRhdGEuaWR8fG8uZGF0YS5pZCE9PWd8fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLGUoby5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpnfSx0KSxJKX0pfWZ1bmN0aW9uIGNJKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBXKEEsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkodCxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6Zkl9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOlVBfT1PYmplY3QsQkE9KEE9PnQ9PntsZXQgST1mSS5jYWxsKHQpO3JldHVybiBBW0ldfHwoQVtJXT1JLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksVT1BPT4oQT1BLnRvTG93ZXJDYXNlKCksdD0+QkEodCk9PT1BKSxuQT1BPT50PT50eXBlb2YgdD09PUEse2lzQXJyYXk6S309QXJyYXksWj1uQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gbEkoQSl7cmV0dXJuIEEhPT1udWxsJiYhWihBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFaKEEuY29uc3RydWN0b3IpJiZGKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBpdD1VKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIERJKEEpe2xldCB0O3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/dD1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6dD1BJiZBLmJ1ZmZlciYmaXQoQS5idWZmZXIpLHR9dmFyIHVJPW5BKCJzdHJpbmciKSxGPW5BKCJmdW5jdGlvbiIpLEN0PW5BKCJudW1iZXIiKSxzQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLGhJPUE9PkE9PT0hMHx8QT09PSExLENBPUE9PntpZihCQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCB0PVVBKEEpO3JldHVybih0PT09bnVsbHx8dD09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LGRJPVUoIkRhdGUiKSx5ST1VKCJGaWxlIiksd0k9VSgiQmxvYiIpLG1JPVUoIkZpbGVMaXN0IikscEk9QT0+c0EoQSkmJkYoQS5waXBlKSxTST1BPT57bGV0IHQ7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8RihBLmFwcGVuZCkmJigodD1CQShBKSk9PT0iZm9ybWRhdGEifHx0PT09Im9iamVjdCImJkYoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sRkk9VSgiVVJMU2VhcmNoUGFyYW1zIiksUkk9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIiIpO2Z1bmN0aW9uIFYoQSx0LHthbGxPd25LZXlzOkk9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgZSxnO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxLKEEpKWZvcihlPTAsZz1BLmxlbmd0aDtlPGc7ZSsrKXQuY2FsbChudWxsLEFbZV0sZSxBKTtlbHNle2xldCByPUk/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksbz1yLmxlbmd0aCxuO2ZvcihlPTA7ZTxvO2UrKyluPXJbZV0sdC5jYWxsKG51bGwsQVtuXSxuLEEpfX1mdW5jdGlvbiBCdChBLHQpe3Q9dC50b0xvd2VyQ2FzZSgpO2xldCBJPU9iamVjdC5rZXlzKEEpLGU9SS5sZW5ndGgsZztmb3IoO2UtLSA+MDspaWYoZz1JW2VdLHQ9PT1nLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGc7cmV0dXJuIG51bGx9dmFyIG50PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsc3Q9QT0+IVooQSkmJkEhPT1udDtmdW5jdGlvbiBOQSgpe2xldHtjYXNlbGVzczpBfT1zdCh0aGlzKSYmdGhpc3x8e30sdD17fSxJPShlLGcpPT57bGV0IHI9QSYmQnQodCxnKXx8ZztDQSh0W3JdKSYmQ0EoZSk/dFtyXT1OQSh0W3JdLGUpOkNBKGUpP3Rbcl09TkEoe30sZSk6SyhlKT90W3JdPWUuc2xpY2UoKTp0W3JdPWV9O2ZvcihsZXQgZT0wLGc9YXJndW1lbnRzLmxlbmd0aDtlPGc7ZSsrKWFyZ3VtZW50c1tlXSYmVihhcmd1bWVudHNbZV0sSSk7cmV0dXJuIHR9dmFyIE5JPShBLHQsSSx7YWxsT3duS2V5czplfT17fSk9PihWKHQsKGcscik9PntJJiZGKGcpP0Fbcl09VyhnLEkpOkFbcl09Z30se2FsbE93bktleXM6ZX0pLEEpLFVJPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksR0k9KEEsdCxJLGUpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSxlKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOnQucHJvdG90eXBlfSksSSYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSxJKX0sa0k9KEEsdCxJLGUpPT57bGV0IGcscixvLG49e307aWYodD10fHx7fSxBPT1udWxsKXJldHVybiB0O2Rve2ZvcihnPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLHI9Zy5sZW5ndGg7ci0tID4wOylvPWdbcl0sKCFlfHxlKG8sQSx0KSkmJiFuW29dJiYodFtvXT1BW29dLG5bb109ITApO0E9SSE9PSExJiZVQShBKX13aGlsZShBJiYoIUl8fEkoQSx0KSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gdH0sTEk9KEEsdCxJKT0+e0E9U3RyaW5nKEEpLChJPT09dm9pZCAwfHxJPkEubGVuZ3RoKSYmKEk9QS5sZW5ndGgpLEktPXQubGVuZ3RoO2xldCBlPUEuaW5kZXhPZih0LEkpO3JldHVybiBlIT09LTEmJmU9PT1JfSxKST1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoSyhBKSlyZXR1cm4gQTtsZXQgdD1BLmxlbmd0aDtpZighQ3QodCkpcmV0dXJuIG51bGw7bGV0IEk9bmV3IEFycmF5KHQpO2Zvcig7dC0tID4wOylJW3RdPUFbdF07cmV0dXJuIEl9LEhJPShBPT50PT5BJiZ0IGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZVQShVaW50OEFycmF5KSksWUk9KEEsdCk9PntsZXQgZT0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLGc7Zm9yKDsoZz1lLm5leHQoKSkmJiFnLmRvbmU7KXtsZXQgcj1nLnZhbHVlO3QuY2FsbChBLHJbMF0sclsxXSl9fSxiST0oQSx0KT0+e2xldCBJLGU9W107Zm9yKDsoST1BLmV4ZWModCkpIT09bnVsbDspZS5wdXNoKEkpO3JldHVybiBlfSxNST1VKCJIVE1MRm9ybUVsZW1lbnQiKSxxST1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxmdW5jdGlvbihJLGUsZyl7cmV0dXJuIGUudG9VcHBlckNhc2UoKStnfSkscnQ9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4odCxJKT0+QS5jYWxsKHQsSSkpKE9iamVjdC5wcm90b3R5cGUpLEtJPVUoIlJlZ0V4cCIpLFF0PShBLHQpPT57bGV0IEk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSksZT17fTtWKEksKGcscik9PntsZXQgbzsobz10KGcscixBKSkhPT0hMSYmKGVbcl09b3x8Zyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLGUpfSxPST1BPT57UXQoQSwodCxJKT0+e2lmKEYoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZihJKSE9PS0xKXJldHVybiExO2xldCBlPUFbSV07aWYoRihlKSl7aWYodC5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiB0KXt0LndyaXRhYmxlPSExO3JldHVybn10LnNldHx8KHQuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFwnIitJKyJcJyIpfSl9fSl9LFRJPShBLHQpPT57bGV0IEk9e30sZT1nPT57Zy5mb3JFYWNoKHI9PntJW3JdPSEwfSl9O3JldHVybiBLKEEpP2UoQSk6ZShTdHJpbmcoQSkuc3BsaXQodCkpLEl9LFBJPSgpPT57fSx4ST0oQSx0KT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6dCksUkE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixvdD0iMDEyMzQ1Njc4OSIsRXQ9e0RJR0lUOm90LEFMUEhBOlJBLEFMUEhBX0RJR0lUOlJBK1JBLnRvVXBwZXJDYXNlKCkrb3R9LGpJPShBPTE2LHQ9RXQuQUxQSEFfRElHSVQpPT57bGV0IEk9IiIse2xlbmd0aDplfT10O2Zvcig7QS0tOylJKz10W01hdGgucmFuZG9tKCkqZXwwXTtyZXR1cm4gSX07ZnVuY3Rpb24gV0koQSl7cmV0dXJuISEoQSYmRihBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIFpJPUE9PntsZXQgdD1uZXcgQXJyYXkoMTApLEk9KGUsZyk9PntpZihzQShlKSl7aWYodC5pbmRleE9mKGUpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gZSkpe3RbZ109ZTtsZXQgcj1LKGUpP1tdOnt9O3JldHVybiBWKGUsKG8sbik9PntsZXQgYT1JKG8sZysxKTshWihhKSYmKHJbbl09YSl9KSx0W2ddPXZvaWQgMCxyfX1yZXR1cm4gZX07cmV0dXJuIEkoQSwwKX0sVkk9VSgiQXN5bmNGdW5jdGlvbiIpLFhJPUE9PkEmJihzQShBKXx8RihBKSkmJkYoQS50aGVuKSYmRihBLmNhdGNoKSxDPXtpc0FycmF5OkssaXNBcnJheUJ1ZmZlcjppdCxpc0J1ZmZlcjpsSSxpc0Zvcm1EYXRhOlNJLGlzQXJyYXlCdWZmZXJWaWV3OkRJLGlzU3RyaW5nOnVJLGlzTnVtYmVyOkN0LGlzQm9vbGVhbjpoSSxpc09iamVjdDpzQSxpc1BsYWluT2JqZWN0OkNBLGlzVW5kZWZpbmVkOlosaXNEYXRlOmRJLGlzRmlsZTp5SSxpc0Jsb2I6d0ksaXNSZWdFeHA6S0ksaXNGdW5jdGlvbjpGLGlzU3RyZWFtOnBJLGlzVVJMU2VhcmNoUGFyYW1zOkZJLGlzVHlwZWRBcnJheTpISSxpc0ZpbGVMaXN0Om1JLGZvckVhY2g6VixtZXJnZTpOQSxleHRlbmQ6TkksdHJpbTpSSSxzdHJpcEJPTTpVSSxpbmhlcml0czpHSSx0b0ZsYXRPYmplY3Q6a0ksa2luZE9mOkJBLGtpbmRPZlRlc3Q6VSxlbmRzV2l0aDpMSSx0b0FycmF5OkpJLGZvckVhY2hFbnRyeTpZSSxtYXRjaEFsbDpiSSxpc0hUTUxGb3JtOk1JLGhhc093blByb3BlcnR5OnJ0LGhhc093blByb3A6cnQscmVkdWNlRGVzY3JpcHRvcnM6UXQsZnJlZXplTWV0aG9kczpPSSx0b09iamVjdFNldDpUSSx0b0NhbWVsQ2FzZTpxSSxub29wOlBJLHRvRmluaXRlTnVtYmVyOnhJLGZpbmRLZXk6QnQsZ2xvYmFsOm50LGlzQ29udGV4dERlZmluZWQ6c3QsQUxQSEFCRVQ6RXQsZ2VuZXJhdGVTdHJpbmc6akksaXNTcGVjQ29tcGxpYW50Rm9ybTpXSSx0b0pTT05PYmplY3Q6WkksaXNBc3luY0ZuOlZJLGlzVGhlbmFibGU6WEl9O2Z1bmN0aW9uIE8oQSx0LEksZSxnKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLHQmJih0aGlzLmNvZGU9dCksSSYmKHRoaXMuY29uZmlnPUkpLGUmJih0aGlzLnJlcXVlc3Q9ZSksZyYmKHRoaXMucmVzcG9uc2U9Zyl9Qy5pbmhlcml0cyhPLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6Qy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgYXQ9Ty5wcm90b3R5cGUsY3Q9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57Y3RbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTyxjdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGF0LCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO08uZnJvbT0oQSx0LEksZSxnLHIpPT57bGV0IG89T2JqZWN0LmNyZWF0ZShhdCk7cmV0dXJuIEMudG9GbGF0T2JqZWN0KEEsbyxmdW5jdGlvbihhKXtyZXR1cm4gYSE9PUVycm9yLnByb3RvdHlwZX0sbj0+biE9PSJpc0F4aW9zRXJyb3IiKSxPLmNhbGwobyxBLm1lc3NhZ2UsdCxJLGUsZyksby5jYXVzZT1BLG8ubmFtZT1BLm5hbWUsciYmT2JqZWN0LmFzc2lnbihvLHIpLG99O3ZhciBsPU87dmFyIFFBPW51bGw7ZnVuY3Rpb24gR0EoQSl7cmV0dXJuIEMuaXNQbGFpbk9iamVjdChBKXx8Qy5pc0FycmF5KEEpfWZ1bmN0aW9uIGx0KEEpe3JldHVybiBDLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIGZ0KEEsdCxJKXtyZXR1cm4gQT9BLmNvbmNhdCh0KS5tYXAoZnVuY3Rpb24oZyxyKXtyZXR1cm4gZz1sdChnKSwhSSYmcj8iWyIrZysiXSI6Z30pLmpvaW4oST8iLiI6IiIpOnR9ZnVuY3Rpb24gekkoQSl7cmV0dXJuIEMuaXNBcnJheShBKSYmIUEuc29tZShHQSl9dmFyIF9JPUMudG9GbGF0T2JqZWN0KEMse30sbnVsbCxmdW5jdGlvbih0KXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QodCl9KTtmdW5jdGlvbiB2SShBLHQsSSl7aWYoIUMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7dD10fHxuZXcoUUF8fEZvcm1EYXRhKSxJPUMudG9GbGF0T2JqZWN0KEkse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihjLHUpe3JldHVybiFDLmlzVW5kZWZpbmVkKHVbY10pfSk7bGV0IGU9SS5tZXRhVG9rZW5zLGc9SS52aXNpdG9yfHxCLHI9SS5kb3RzLG89SS5pbmRleGVzLGE9KEkuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmQy5pc1NwZWNDb21wbGlhbnRGb3JtKHQpO2lmKCFDLmlzRnVuY3Rpb24oZykpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBRKEUpe2lmKEU9PT1udWxsKXJldHVybiIiO2lmKEMuaXNEYXRlKEUpKXJldHVybiBFLnRvSVNPU3RyaW5nKCk7aWYoIWEmJkMuaXNCbG9iKEUpKXRocm93IG5ldyBsKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBDLmlzQXJyYXlCdWZmZXIoRSl8fEMuaXNUeXBlZEFycmF5KEUpP2EmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtFXSk6QnVmZmVyLmZyb20oRSk6RX1mdW5jdGlvbiBCKEUsYyx1KXtsZXQgeT1FO2lmKEUmJiF1JiZ0eXBlb2YgRT09Im9iamVjdCIpe2lmKEMuZW5kc1dpdGgoYywie30iKSljPWU/YzpjLnNsaWNlKDAsLTIpLEU9SlNPTi5zdHJpbmdpZnkoRSk7ZWxzZSBpZihDLmlzQXJyYXkoRSkmJnpJKEUpfHwoQy5pc0ZpbGVMaXN0KEUpfHxDLmVuZHNXaXRoKGMsIltdIikpJiYoeT1DLnRvQXJyYXkoRSkpKXJldHVybiBjPWx0KGMpLHkuZm9yRWFjaChmdW5jdGlvbihOLHRJKXshKEMuaXNVbmRlZmluZWQoTil8fE49PT1udWxsKSYmdC5hcHBlbmQobz09PSEwP2Z0KFtjXSx0SSxyKTpvPT09bnVsbD9jOmMrIltdIixRKE4pKX0pLCExfXJldHVybiBHQShFKT8hMDoodC5hcHBlbmQoZnQodSxjLHIpLFEoRSkpLCExKX1sZXQgaT1bXSxmPU9iamVjdC5hc3NpZ24oX0kse2RlZmF1bHRWaXNpdG9yOkIsY29udmVydFZhbHVlOlEsaXNWaXNpdGFibGU6R0F9KTtmdW5jdGlvbiBzKEUsYyl7aWYoIUMuaXNVbmRlZmluZWQoRSkpe2lmKGkuaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitjLmpvaW4oIi4iKSk7aS5wdXNoKEUpLEMuZm9yRWFjaChFLGZ1bmN0aW9uKHksUil7KCEoQy5pc1VuZGVmaW5lZCh5KXx8eT09PW51bGwpJiZnLmNhbGwodCx5LEMuaXNTdHJpbmcoUik/Ui50cmltKCk6UixjLGYpKT09PSEwJiZzKHksYz9jLmNvbmNhdChSKTpbUl0pfSksaS5wb3AoKX19aWYoIUMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBzKEEpLHR9dmFyIEo9dkk7ZnVuY3Rpb24gRHQoQSl7bGV0IHQ9eyIhIjoiJTI1MjEiLCJcJyI6IiUyNTI3IiwiKCI6IiUyNTI4IiwiKSI6IiUyNTI5IiwifiI6IiUyNTdFIiwiJTI1MjAiOiIrIiwiJTI1MDAiOiJcXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shXCcoKX5dfCUyNTIwfCUyNTAwL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX1mdW5jdGlvbiB1dChBLHQpe3RoaXMuX3BhaXJzPVtdLEEmJkooQSx0aGlzLHQpfXZhciBodD11dC5wcm90b3R5cGU7aHQuYXBwZW5kPWZ1bmN0aW9uKHQsSSl7dGhpcy5fcGFpcnMucHVzaChbdCxJXSl9O2h0LnRvU3RyaW5nPWZ1bmN0aW9uKHQpe2xldCBJPXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUsRHQpfTpEdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKGcpe3JldHVybiBJKGdbMF0pKyI9IitJKGdbMV0pfSwiIikuam9pbigiJiIpfTt2YXIgRUE9dXQ7ZnVuY3Rpb24gJEkoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lMjUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNTI0L2csIiQiKS5yZXBsYWNlKC8lMjUyQy9naSwiLCIpLnJlcGxhY2UoLyUyNTIwL2csIisiKS5yZXBsYWNlKC8lMjU1Qi9naSwiWyIpLnJlcGxhY2UoLyUyNTVEL2dpLCJdIil9ZnVuY3Rpb24gWChBLHQsSSl7aWYoIXQpcmV0dXJuIEE7bGV0IGU9SSYmSS5lbmNvZGV8fCRJLGc9SSYmSS5zZXJpYWxpemUscjtpZihnP3I9Zyh0LEkpOnI9Qy5pc1VSTFNlYXJjaFBhcmFtcyh0KT90LnRvU3RyaW5nKCk6bmV3IEVBKHQsSSkudG9TdHJpbmcoZSkscil7bGV0IG89QS5pbmRleE9mKCIlMjMiKTtvIT09LTEmJihBPUEuc2xpY2UoMCxvKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrcn1yZXR1cm4gQX12YXIga0E9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZSh0LEksZSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOnQscmVqZWN0ZWQ6SSxzeW5jaHJvbm91czplP2Uuc3luY2hyb25vdXM6ITEscnVuV2hlbjplP2UucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdCh0KXt0aGlzLmhhbmRsZXJzW3RdJiYodGhpcy5oYW5kbGVyc1t0XT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKHQpe0MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKGUpe2UhPT1udWxsJiZ0KGUpfSl9fSxMQT1rQTt2YXIgYUE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBkdD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6RUE7dmFyIHl0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgd3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgbXQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6ZHQsRm9ybURhdGE6eXQsQmxvYjp3dH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBKQT17fTtlSShKQSx7aGFzQnJvd3NlckVudjooKT0+cHQsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5BZSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PnRlfSk7dmFyIHB0PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLEFlPShBPT5wdCYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLHRlPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgdz17Li4uSkEsLi4ubXR9O2Z1bmN0aW9uIEhBKEEsdCl7cmV0dXJuIEooQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKEksZSxnLHIpe3JldHVybiB3LmlzTm9kZSYmQy5pc0J1ZmZlcihJKT8odGhpcy5hcHBlbmQoZSxJLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOnIuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sdCkpfWZ1bmN0aW9uIEllKEEpe3JldHVybiBDLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZyxBKS5tYXAodD0+dFswXT09PSJbXSI/IiI6dFsxXXx8dFswXSl9ZnVuY3Rpb24gZWUoQSl7bGV0IHQ9e30sST1PYmplY3Qua2V5cyhBKSxlLGc9SS5sZW5ndGgscjtmb3IoZT0wO2U8ZztlKyspcj1JW2VdLHRbcl09QVtyXTtyZXR1cm4gdH1mdW5jdGlvbiBnZShBKXtmdW5jdGlvbiB0KEksZSxnLHIpe2xldCBvPUlbcisrXTtpZihvPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IG49TnVtYmVyLmlzRmluaXRlKCtvKSxhPXI+PUkubGVuZ3RoO3JldHVybiBvPSFvJiZDLmlzQXJyYXkoZyk/Zy5sZW5ndGg6byxhPyhDLmhhc093blByb3AoZyxvKT9nW29dPVtnW29dLGVdOmdbb109ZSwhbik6KCghZ1tvXXx8IUMuaXNPYmplY3QoZ1tvXSkpJiYoZ1tvXT1bXSksdChJLGUsZ1tvXSxyKSYmQy5pc0FycmF5KGdbb10pJiYoZ1tvXT1lZShnW29dKSksIW4pfWlmKEMuaXNGb3JtRGF0YShBKSYmQy5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCBJPXt9O3JldHVybiBDLmZvckVhY2hFbnRyeShBLChlLGcpPT57dChJZShlKSxnLEksMCl9KSxJfXJldHVybiBudWxsfXZhciBjQT1nZTtmdW5jdGlvbiByZShBLHQsSSl7aWYoQy5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKEEpLEMudHJpbShBKX1jYXRjaChlKXtpZihlLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IGV9cmV0dXJuKEl8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgWUE9e3RyYW5zaXRpb25hbDphQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKHQsSSl7bGV0IGU9SS5nZXRDb250ZW50VHlwZSgpfHwiIixnPWUuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLHI9Qy5pc09iamVjdCh0KTtpZihyJiZDLmlzSFRNTEZvcm0odCkmJih0PW5ldyBGb3JtRGF0YSh0KSksQy5pc0Zvcm1EYXRhKHQpKXJldHVybiBnP0pTT04uc3RyaW5naWZ5KGNBKHQpKTp0O2lmKEMuaXNBcnJheUJ1ZmZlcih0KXx8Qy5pc0J1ZmZlcih0KXx8Qy5pc1N0cmVhbSh0KXx8Qy5pc0ZpbGUodCl8fEMuaXNCbG9iKHQpKXJldHVybiB0O2lmKEMuaXNBcnJheUJ1ZmZlclZpZXcodCkpcmV0dXJuIHQuYnVmZmVyO2lmKEMuaXNVUkxTZWFyY2hQYXJhbXModCkpcmV0dXJuIEkuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksdC50b1N0cmluZygpO2xldCBuO2lmKHIpe2lmKGUuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIEhBKHQsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigobj1DLmlzRmlsZUxpc3QodCkpfHxlLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGE9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBKKG4/eyJmaWxlc1tdIjp0fTp0LGEmJm5ldyBhLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gcnx8Zz8oSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLHJlKHQpKTp0fV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKHQpe2xldCBJPXRoaXMudHJhbnNpdGlvbmFsfHxZQS50cmFuc2l0aW9uYWwsZT1JJiZJLmZvcmNlZEpTT05QYXJzaW5nLGc9dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYodCYmQy5pc1N0cmluZyh0KSYmKGUmJiF0aGlzLnJlc3BvbnNlVHlwZXx8Zykpe2xldCBvPSEoSSYmSS5zaWxlbnRKU09OUGFyc2luZykmJmc7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKG4pe2lmKG8pdGhyb3cgbi5uYW1lPT09IlN5bnRheEVycm9yIj9sLmZyb20obixsLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOm59fXJldHVybiB0fV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp3LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp3LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIwMCYmdDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e1lBLmhlYWRlcnNbQV09e319KTt2YXIgVD1ZQTt2YXIgb2U9Qy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxTdD1BPT57bGV0IHQ9e30sSSxlLGc7cmV0dXJuIEEmJkEuc3BsaXQoYCUwQWApLmZvckVhY2goZnVuY3Rpb24obyl7Zz1vLmluZGV4T2YoIjoiKSxJPW8uc3Vic3RyaW5nKDAsZykudHJpbSgpLnRvTG93ZXJDYXNlKCksZT1vLnN1YnN0cmluZyhnKzEpLnRyaW0oKSwhKCFJfHx0W0ldJiZvZVtJXSkmJihJPT09InNldC1jb29raWUiP3RbSV0/dFtJXS5wdXNoKGUpOnRbSV09W2VdOnRbSV09dFtJXT90W0ldKyIsICIrZTplKX0pLHR9O3ZhciBGdD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIHooQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBmQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6Qy5pc0FycmF5KEEpP0EubWFwKGZBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gaWUoQSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxJPS8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2csZTtmb3IoO2U9SS5leGVjKEEpOyl0W2VbMV1dPWVbMl07cmV0dXJuIHR9dmFyIENlPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhJTIzJCUmXCcqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIGJBKEEsdCxJLGUsZyl7aWYoQy5pc0Z1bmN0aW9uKGUpKXJldHVybiBlLmNhbGwodGhpcyx0LEkpO2lmKGcmJih0PUkpLCEhQy5pc1N0cmluZyh0KSl7aWYoQy5pc1N0cmluZyhlKSlyZXR1cm4gdC5pbmRleE9mKGUpIT09LTE7aWYoQy5pc1JlZ0V4cChlKSlyZXR1cm4gZS50ZXN0KHQpfX1mdW5jdGlvbiBCZShBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csKHQsSSxlKT0+SS50b1VwcGVyQ2FzZSgpK2UpfWZ1bmN0aW9uIG5lKEEsdCl7bGV0IEk9Qy50b0NhbWVsQ2FzZSgiICIrdCk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKGU9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxlK0kse3ZhbHVlOmZ1bmN0aW9uKGcscixvKXtyZXR1cm4gdGhpc1tlXS5jYWxsKHRoaXMsdCxnLHIsbyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dCYmdGhpcy5zZXQodCl9c2V0KHQsSSxlKXtsZXQgZz10aGlzO2Z1bmN0aW9uIHIobixhLFEpe2xldCBCPXooYSk7aWYoIUIpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBpPUMuZmluZEtleShnLEIpOyghaXx8Z1tpXT09PXZvaWQgMHx8UT09PSEwfHxRPT09dm9pZCAwJiZnW2ldIT09ITEpJiYoZ1tpfHxhXT1mQShuKSl9bGV0IG89KG4sYSk9PkMuZm9yRWFjaChuLChRLEIpPT5yKFEsQixhKSk7cmV0dXJuIEMuaXNQbGFpbk9iamVjdCh0KXx8dCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/byh0LEkpOkMuaXNTdHJpbmcodCkmJih0PXQudHJpbSgpKSYmIUNlKHQpP28oU3QodCksSSk6dCE9bnVsbCYmcihJLHQsZSksdGhpc31nZXQodCxJKXtpZih0PXoodCksdCl7bGV0IGU9Qy5maW5kS2V5KHRoaXMsdCk7aWYoZSl7bGV0IGc9dGhpc1tlXTtpZighSSlyZXR1cm4gZztpZihJPT09ITApcmV0dXJuIGllKGcpO2lmKEMuaXNGdW5jdGlvbihJKSlyZXR1cm4gSS5jYWxsKHRoaXMsZyxlKTtpZihDLmlzUmVnRXhwKEkpKXJldHVybiBJLmV4ZWMoZyk7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtyZXR1cm4hIShlJiZ0aGlzW2VdIT09dm9pZCAwJiYoIUl8fGJBKHRoaXMsdGhpc1tlXSxlLEkpKSl9cmV0dXJuITF9ZGVsZXRlKHQsSSl7bGV0IGU9dGhpcyxnPSExO2Z1bmN0aW9uIHIobyl7aWYobz16KG8pLG8pe2xldCBuPUMuZmluZEtleShlLG8pO24mJighSXx8YkEoZSxlW25dLG4sSSkpJiYoZGVsZXRlIGVbbl0sZz0hMCl9fXJldHVybiBDLmlzQXJyYXkodCk/dC5mb3JFYWNoKHIpOnIodCksZ31jbGVhcih0KXtsZXQgST1PYmplY3Qua2V5cyh0aGlzKSxlPUkubGVuZ3RoLGc9ITE7Zm9yKDtlLS07KXtsZXQgcj1JW2VdOyghdHx8YkEodGhpcyx0aGlzW3JdLHIsdCwhMCkpJiYoZGVsZXRlIHRoaXNbcl0sZz0hMCl9cmV0dXJuIGd9bm9ybWFsaXplKHQpe2xldCBJPXRoaXMsZT17fTtyZXR1cm4gQy5mb3JFYWNoKHRoaXMsKGcscik9PntsZXQgbz1DLmZpbmRLZXkoZSxyKTtpZihvKXtJW29dPWZBKGcpLGRlbGV0ZSBJW3JdO3JldHVybn1sZXQgbj10P0JlKHIpOlN0cmluZyhyKS50cmltKCk7biE9PXImJmRlbGV0ZSBJW3JdLElbbl09ZkEoZyksZVtuXT0hMH0pLHRoaXN9Y29uY2F0KC4uLnQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLnQpfXRvSlNPTih0KXtsZXQgST1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBDLmZvckVhY2godGhpcywoZSxnKT0+e2UhPW51bGwmJmUhPT0hMSYmKElbZ109dCYmQy5pc0FycmF5KGUpP2Uuam9pbigiLCAiKTplKX0pLEl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW3QsSV0pPT50KyI6ICIrSSkuam9pbihgJTBBYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM/dDpuZXcgdGhpcyh0KX1zdGF0aWMgY29uY2F0KHQsLi4uSSl7bGV0IGU9bmV3IHRoaXModCk7cmV0dXJuIEkuZm9yRWFjaChnPT5lLnNldChnKSksZX1zdGF0aWMgYWNjZXNzb3IodCl7bGV0IGU9KHRoaXNbRnRdPXRoaXNbRnRdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsZz10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiByKG8pe2xldCBuPXoobyk7ZVtuXXx8KG5lKGcsbyksZVtuXT0hMCl9cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSx0aGlzfX07UC5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7Qy5yZWR1Y2VEZXNjcmlwdG9ycyhQLnByb3RvdHlwZSwoe3ZhbHVlOkF9LHQpPT57bGV0IEk9dFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQoZSl7dGhpc1tJXT1lfX19KTtDLmZyZWV6ZU1ldGhvZHMoUCk7dmFyIG09UDtmdW5jdGlvbiBfKEEsdCl7bGV0IEk9dGhpc3x8VCxlPXR8fEksZz1tLmZyb20oZS5oZWFkZXJzKSxyPWUuZGF0YTtyZXR1cm4gQy5mb3JFYWNoKEEsZnVuY3Rpb24obil7cj1uLmNhbGwoSSxyLGcubm9ybWFsaXplKCksdD90LnN0YXR1czp2b2lkIDApfSksZy5ub3JtYWxpemUoKSxyfWZ1bmN0aW9uIHYoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBSdChBLHQsSSl7bC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixsLkVSUl9DQU5DRUxFRCx0LEkpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Qy5pbmhlcml0cyhSdCxsLHtfX0NBTkNFTF9fOiEwfSk7dmFyIEg9UnQ7ZnVuY3Rpb24gTUEoQSx0LEkpe2xldCBlPUkuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFJLnN0YXR1c3x8IWV8fGUoSS5zdGF0dXMpP0EoSSk6dChuZXcgbCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK0kuc3RhdHVzLFtsLkVSUl9CQURfUkVRVUVTVCxsLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IoSS5zdGF0dXMvMTAwKS00XSxJLmNvbmZpZyxJLnJlcXVlc3QsSSkpfXZhciBOdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSx0LEksZSxnLHIpe2xldCBvPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQodCldO0MuaXNOdW1iZXIoSSkmJm8ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKEkpLnRvR01UU3RyaW5nKCkpLEMuaXNTdHJpbmcoZSkmJm8ucHVzaCgicGF0aD0iK2UpLEMuaXNTdHJpbmcoZykmJm8ucHVzaCgiZG9tYWluPSIrZykscj09PSEwJiZvLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1vLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXFxccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIHFBKEEpe3JldHVybi9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIEtBKEEsdCl7cmV0dXJuIHQ/QS5yZXBsYWNlKC9cXC8/XFwvJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cXC8rLywiIik6QX1mdW5jdGlvbiAkKEEsdCl7cmV0dXJuIEEmJiFxQSh0KT9LQShBLHQpOnR9dmFyIFV0PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxJPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxlO2Z1bmN0aW9uIGcocil7bGV0IG89cjtyZXR1cm4gdCYmKEkuc2V0QXR0cmlidXRlKCJocmVmIixvKSxvPUkuaHJlZiksSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLHtocmVmOkkuaHJlZixwcm90b2NvbDpJLnByb3RvY29sP0kucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OkkuaG9zdCxzZWFyY2g6SS5zZWFyY2g/SS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sIiIpOiIiLGhhc2g6SS5oYXNoP0kuaGFzaC5yZXBsYWNlKC9eJTIzLywiIik6IiIsaG9zdG5hbWU6SS5ob3N0bmFtZSxwb3J0OkkucG9ydCxwYXRobmFtZTpJLnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj9JLnBhdGhuYW1lOiIvIitJLnBhdGhuYW1lfX1yZXR1cm4gZT1nKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihvKXtsZXQgbj1DLmlzU3RyaW5nKG8pP2cobyk6bztyZXR1cm4gbi5wcm90b2NvbD09PWUucHJvdG9jb2wmJm4uaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gT0EoQSl7bGV0IHQ9L14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWMoQSk7cmV0dXJuIHQmJnRbMV18fCIifWZ1bmN0aW9uIHNlKEEsdCl7QT1BfHwxMDtsZXQgST1uZXcgQXJyYXkoQSksZT1uZXcgQXJyYXkoQSksZz0wLHI9MCxvO3JldHVybiB0PXQhPT12b2lkIDA/dDoxZTMsZnVuY3Rpb24oYSl7bGV0IFE9RGF0ZS5ub3coKSxCPWVbcl07b3x8KG89USksSVtnXT1hLGVbZ109UTtsZXQgaT1yLGY9MDtmb3IoO2khPT1nOylmKz1JW2krK10saT1pJUE7aWYoZz0oZysxKSVBLGc9PT1yJiYocj0ocisxKSVBKSxRLW88dClyZXR1cm47bGV0IHM9QiYmUS1CO3JldHVybiBzP01hdGgucm91bmQoZioxZTMvcyk6dm9pZCAwfX12YXIgR3Q9c2U7ZnVuY3Rpb24ga3QoQSx0KXtsZXQgST0wLGU9R3QoNTAsMjUwKTtyZXR1cm4gZz0+e2xldCByPWcubG9hZGVkLG89Zy5sZW5ndGhDb21wdXRhYmxlP2cudG90YWw6dm9pZCAwLG49ci1JLGE9ZShuKSxRPXI8PW87ST1yO2xldCBCPXtsb2FkZWQ6cix0b3RhbDpvLHByb2dyZXNzOm8/ci9vOnZvaWQgMCxieXRlczpuLHJhdGU6YXx8dm9pZCAwLGVzdGltYXRlZDphJiZvJiZRPyhvLXIpL2E6dm9pZCAwLGV2ZW50Omd9O0JbdD8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKEIpfX12YXIgUWU9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixMdD1RZSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEksZSl7bGV0IGc9QS5kYXRhLHI9bS5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpvLHdpdGhYU1JGVG9rZW46bn09QSxhO2Z1bmN0aW9uIFEoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYSl9bGV0IEI7aWYoQy5pc0Zvcm1EYXRhKGcpKXtpZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8dy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpci5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoQj1yLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtjLC4uLnVdPUI/Qi5zcGxpdCgiOyIpLm1hcCh5PT55LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO3Iuc2V0Q29udGVudFR5cGUoW2N8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi51XS5qb2luKCI7ICIpKX19bGV0IGk9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IGM9QS5hdXRoLnVzZXJuYW1lfHwiIix1PUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7ci5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoYysiOiIrdSkpfWxldCBmPSQoQS5iYXNlVVJMLEEudXJsKTtpLm9wZW4oQS5tZXRob2QudG9VcHBlckNhc2UoKSxYKGYsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksaS50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBzKCl7aWYoIWkpcmV0dXJuO2xldCBjPW0uZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGkmJmkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHk9e2RhdGE6IW98fG89PT0idGV4dCJ8fG89PT0ianNvbiI/aS5yZXNwb25zZVRleHQ6aS5yZXNwb25zZSxzdGF0dXM6aS5zdGF0dXMsc3RhdHVzVGV4dDppLnN0YXR1c1RleHQsaGVhZGVyczpjLGNvbmZpZzpBLHJlcXVlc3Q6aX07TUEoZnVuY3Rpb24oTil7SShOKSxRKCl9LGZ1bmN0aW9uKE4pe2UoTiksUSgpfSx5KSxpPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBpP2kub25sb2FkZW5kPXM6aS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshaXx8aS5yZWFkeVN0YXRlIT09NHx8aS5zdGF0dXM9PT0wJiYhKGkucmVzcG9uc2VVUkwmJmkucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KHMpfSxpLm9uYWJvcnQ9ZnVuY3Rpb24oKXtpJiYoZShuZXcgbCgiUmVxdWVzdCBhYm9ydGVkIixsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGwpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBsKCJOZXR3b3JrIEVycm9yIixsLkVSUl9ORVRXT1JLLEEsaSkpLGk9bnVsbH0saS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgdT1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIseT1BLnRyYW5zaXRpb25hbHx8YUE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodT1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLGUobmV3IGwodSx5LmNsYXJpZnlUaW1lb3V0RXJyb3I/bC5FVElNRURPVVQ6bC5FQ09OTkFCT1JURUQsQSxpKSksaT1udWxsfSx3Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKG4mJkMuaXNGdW5jdGlvbihuKSYmKG49bihBKSksbnx8biE9PSExJiZVdChmKSkpe2xldCBjPUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJk50LnJlYWQoQS54c3JmQ29va2llTmFtZSk7YyYmci5zZXQoQS54c3JmSGVhZGVyTmFtZSxjKX1nPT09dm9pZCAwJiZyLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGkmJkMuZm9yRWFjaChyLnRvSlNPTigpLGZ1bmN0aW9uKHUseSl7aS5zZXRSZXF1ZXN0SGVhZGVyKHksdSl9KSxDLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KGkud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLG8mJm8hPT0ianNvbiImJihpLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZpLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkudXBsb2FkJiZpLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa3QoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGE9Yz0+e2kmJihlKCFjfHxjLnR5cGU/bmV3IEgobnVsbCxBLGkpOmMpLGkuYWJvcnQoKSxpPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShhKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/YSgpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixhKSkpO2xldCBFPU9BKGYpO2lmKEUmJncucHJvdG9jb2xzLmluZGV4T2YoRSk9PT0tMSl7ZShuZXcgbCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitFKyI6IixsLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWkuc2VuZChnfHxudWxsKX0pfTt2YXIgVEE9e2h0dHA6UUEseGhyOkx0fTtDLmZvckVhY2goVEEsKEEsdCk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTp0fSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOnR9KX19KTt2YXIgSnQ9QT0+YC0gJHtBfWAsRWU9QT0+Qy5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLGxBPXtnZXRBZGFwdGVyOkE9PntBPUMuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOnR9PUEsSSxlLGc9e307Zm9yKGxldCByPTA7cjx0O3IrKyl7ST1BW3JdO2xldCBvO2lmKGU9SSwhRWUoSSkmJihlPVRBWyhvPVN0cmluZyhJKSkudG9Mb3dlckNhc2UoKV0sZT09PXZvaWQgMCkpdGhyb3cgbmV3IGwoYFVua25vd24gYWRhcHRlciBcJyR7b31cJ2ApO2lmKGUpYnJlYWs7Z1tvfHwiJTIzIityXT1lfWlmKCFlKXtsZXQgcj1PYmplY3QuZW50cmllcyhnKS5tYXAoKFtuLGFdKT0+YGFkYXB0ZXIgJHtufSBgKyhhPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksbz10P3IubGVuZ3RoPjE/YHNpbmNlIDolMEFgK3IubWFwKEp0KS5qb2luKGAlMEFgKToiICIrSnQoclswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgbCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK28sIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBlfSxhZGFwdGVyczpUQX07ZnVuY3Rpb24gUEEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEgobnVsbCxBKX1mdW5jdGlvbiBEQShBKXtyZXR1cm4gUEEoQSksQS5oZWFkZXJzPW0uZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxsQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8VC5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBQQShBKSxlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlKSxlLmhlYWRlcnM9bS5mcm9tKGUuaGVhZGVycyksZX0sZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSl8fChQQShBKSxlJiZlLnJlc3BvbnNlJiYoZS5yZXNwb25zZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZS5yZXNwb25zZSksZS5yZXNwb25zZS5oZWFkZXJzPW0uZnJvbShlLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QoZSl9KX12YXIgSHQ9QT0+QSBpbnN0YW5jZW9mIG0/ey4uLkF9OkE7ZnVuY3Rpb24gayhBLHQpe3Q9dHx8e307bGV0IEk9e307ZnVuY3Rpb24gZShRLEIsaSl7cmV0dXJuIEMuaXNQbGFpbk9iamVjdChRKSYmQy5pc1BsYWluT2JqZWN0KEIpP0MubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6aX0sUSxCKTpDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZSh7fSxCKTpDLmlzQXJyYXkoQik/Qi5zbGljZSgpOkJ9ZnVuY3Rpb24gZyhRLEIsaSl7aWYoQy5pc1VuZGVmaW5lZChCKSl7aWYoIUMuaXNVbmRlZmluZWQoUSkpcmV0dXJuIGUodm9pZCAwLFEsaSl9ZWxzZSByZXR1cm4gZShRLEIsaSl9ZnVuY3Rpb24gcihRLEIpe2lmKCFDLmlzVW5kZWZpbmVkKEIpKXJldHVybiBlKHZvaWQgMCxCKX1mdW5jdGlvbiBvKFEsQil7aWYoQy5pc1VuZGVmaW5lZChCKSl7aWYoIUMuaXNVbmRlZmluZWQoUSkpcmV0dXJuIGUodm9pZCAwLFEpfWVsc2UgcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG4oUSxCLGkpe2lmKGkgaW4gdClyZXR1cm4gZShRLEIpO2lmKGkgaW4gQSlyZXR1cm4gZSh2b2lkIDAsUSl9bGV0IGE9e3VybDpyLG1ldGhvZDpyLGRhdGE6cixiYXNlVVJMOm8sdHJhbnNmb3JtUmVxdWVzdDpvLHRyYW5zZm9ybVJlc3BvbnNlOm8scGFyYW1zU2VyaWFsaXplcjpvLHRpbWVvdXQ6byx0aW1lb3V0TWVzc2FnZTpvLHdpdGhDcmVkZW50aWFsczpvLHdpdGhYU1JGVG9rZW46byxhZGFwdGVyOm8scmVzcG9uc2VUeXBlOm8seHNyZkNvb2tpZU5hbWU6byx4c3JmSGVhZGVyTmFtZTpvLG9uVXBsb2FkUHJvZ3Jlc3M6byxvbkRvd25sb2FkUHJvZ3Jlc3M6byxkZWNvbXByZXNzOm8sbWF4Q29udGVudExlbmd0aDpvLG1heEJvZHlMZW5ndGg6byxiZWZvcmVSZWRpcmVjdDpvLHRyYW5zcG9ydDpvLGh0dHBBZ2VudDpvLGh0dHBzQWdlbnQ6byxjYW5jZWxUb2tlbjpvLHNvY2tldFBhdGg6byxyZXNwb25zZUVuY29kaW5nOm8sdmFsaWRhdGVTdGF0dXM6bixoZWFkZXJzOihRLEIpPT5nKEh0KFEpLEh0KEIpLCEwKX07cmV0dXJuIEMuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsdCkpLGZ1bmN0aW9uKEIpe2xldCBpPWFbQl18fGcsZj1pKEFbQl0sdFtCXSxCKTtDLmlzVW5kZWZpbmVkKGYpJiZpIT09bnx8KElbQl09Zil9KSxJfXZhciB1QT0iMS42LjgiO3ZhciB4QT17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKEEsdCk9Pnt4QVtBXT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PT1BfHwiYSIrKHQ8MT8ibiAiOiIgIikrQX19KTt2YXIgWXQ9e307eEEudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKHQsSSxlKXtmdW5jdGlvbiBnKHIsbyl7cmV0dXJuIltBeGlvcyB2Iit1QSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFwnIityKyJcJyIrbysoZT8iLiAiK2U6IiIpfXJldHVybihyLG8sbik9PntpZih0PT09ITEpdGhyb3cgbmV3IGwoZyhvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKEk/IiBpbiAiK0k6IiIpKSxsLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gSSYmIVl0W29dJiYoWXRbb109ITAsY29uc29sZS53YXJuKGcobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrSSsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSx0P3QocixvLG4pOiEwfX07ZnVuY3Rpb24gYWUoQSx0LEkpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgbCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IGU9T2JqZWN0LmtleXMoQSksZz1lLmxlbmd0aDtmb3IoO2ctLSA+MDspe2xldCByPWVbZ10sbz10W3JdO2lmKG8pe2xldCBuPUFbcl0sYT1uPT09dm9pZCAwfHxvKG4scixBKTtpZihhIT09ITApdGhyb3cgbmV3IGwoIm9wdGlvbiAiK3IrIiBtdXN0IGJlICIrYSxsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZihJIT09ITApdGhyb3cgbmV3IGwoIlVua25vd24gb3B0aW9uICIrcixsLkVSUl9CQURfT1BUSU9OKX19dmFyIGhBPXthc3NlcnRPcHRpb25zOmFlLHZhbGlkYXRvcnM6eEF9O3ZhciBZPWhBLnZhbGlkYXRvcnMseD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZmF1bHRzPXQsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IExBLHJlc3BvbnNlOm5ldyBMQX19YXN5bmMgcmVxdWVzdCh0LEkpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdCh0LEkpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcil7bGV0IGc7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZz17fSk6Zz1uZXcgRXJyb3I7bGV0IHI9Zy5zdGFjaz9nLnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sIiIpOiIiO2Uuc3RhY2s/ciYmIVN0cmluZyhlLnN0YWNrKS5lbmRzV2l0aChyLnJlcGxhY2UoL14uK1xcbi4rXFxuLywiIikpJiYoZS5zdGFjays9YCUwQWArcik6ZS5zdGFjaz1yfXRocm93IGV9fV9yZXF1ZXN0KHQsSSl7dHlwZW9mIHQ9PSJzdHJpbmciPyhJPUl8fHt9LEkudXJsPXQpOkk9dHx8e30sST1rKHRoaXMuZGVmYXVsdHMsSSk7bGV0e3RyYW5zaXRpb25hbDplLHBhcmFtc1NlcmlhbGl6ZXI6ZyxoZWFkZXJzOnJ9PUk7ZSE9PXZvaWQgMCYmaEEuYXNzZXJ0T3B0aW9ucyhlLHtzaWxlbnRKU09OUGFyc2luZzpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pfSwhMSksZyE9bnVsbCYmKEMuaXNGdW5jdGlvbihnKT9JLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpnfTpoQS5hc3NlcnRPcHRpb25zKGcse2VuY29kZTpZLmZ1bmN0aW9uLHNlcmlhbGl6ZTpZLmZ1bmN0aW9ufSwhMCkpLEkubWV0aG9kPShJLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBvPXImJkMubWVyZ2Uoci5jb21tb24scltJLm1ldGhvZF0pO3ImJkMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIHJbRV19KSxJLmhlYWRlcnM9bS5jb25jYXQobyxyKTtsZXQgbj1bXSxhPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihjKXt0eXBlb2YgYy5ydW5XaGVuPT0iZnVuY3Rpb24iJiZjLnJ1bldoZW4oSSk9PT0hMXx8KGE9YSYmYy5zeW5jaHJvbm91cyxuLnVuc2hpZnQoYy5mdWxmaWxsZWQsYy5yZWplY3RlZCkpfSk7bGV0IFE9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihjKXtRLnB1c2goYy5mdWxmaWxsZWQsYy5yZWplY3RlZCl9KTtsZXQgQixpPTAsZjtpZighYSl7bGV0IEU9W0RBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsbiksRS5wdXNoLmFwcGx5KEUsUSksZj1FLmxlbmd0aCxCPVByb21pc2UucmVzb2x2ZShJKTtpPGY7KUI9Qi50aGVuKEVbaSsrXSxFW2krK10pO3JldHVybiBCfWY9bi5sZW5ndGg7bGV0IHM9STtmb3IoaT0wO2k8Zjspe2xldCBFPW5baSsrXSxjPW5baSsrXTt0cnl7cz1FKHMpfWNhdGNoKHUpe2MuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7Qj1EQS5jYWxsKHRoaXMscyl9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihpPTAsZj1RLmxlbmd0aDtpPGY7KUI9Qi50aGVuKFFbaSsrXSxRW2krK10pO3JldHVybiBCfWdldFVyaSh0KXt0PWsodGhpcy5kZWZhdWx0cyx0KTtsZXQgST0kKHQuYmFzZVVSTCx0LnVybCk7cmV0dXJuIFgoSSx0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpfX07Qy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbih0KXt4LnByb3RvdHlwZVt0XT1mdW5jdGlvbihJLGUpe3JldHVybiB0aGlzLnJlcXVlc3QoayhlfHx7fSx7bWV0aG9kOnQsdXJsOkksZGF0YTooZXx8e30pLmRhdGF9KSl9fSk7Qy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gSShlKXtyZXR1cm4gZnVuY3Rpb24ocixvLG4pe3JldHVybiB0aGlzLnJlcXVlc3QoayhufHx7fSx7bWV0aG9kOnQsaGVhZGVyczplP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpyLGRhdGE6b30pKX19eC5wcm90b3R5cGVbdF09SSgpLHgucHJvdG90eXBlW3QrIkZvcm0iXT1JKCEwKX0pO3ZhciBBQT14O3ZhciBqQT1jbGFzcyBBe2NvbnN0cnVjdG9yKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgSTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24ocil7ST1yfSk7bGV0IGU9dGhpczt0aGlzLnByb21pc2UudGhlbihnPT57aWYoIWUuX2xpc3RlbmVycylyZXR1cm47bGV0IHI9ZS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO3ItLSA+MDspZS5fbGlzdGVuZXJzW3JdKGcpO2UuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49Zz0+e2xldCByLG89bmV3IFByb21pc2Uobj0+e2Uuc3Vic2NyaWJlKG4pLHI9bn0pLnRoZW4oZyk7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7ZS51bnN1YnNjcmliZShyKX0sb30sdChmdW5jdGlvbihyLG8sbil7ZS5yZWFzb258fChlLnJlYXNvbj1uZXcgSChyLG8sbiksSShlLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZSh0KXtpZih0aGlzLnJlYXNvbil7dCh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaCh0KTp0aGlzLl9saXN0ZW5lcnM9W3RdfXVuc3Vic2NyaWJlKHQpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBJPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKHQpO0khPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShJLDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgdDtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24oZyl7dD1nfSksY2FuY2VsOnR9fX0sYnQ9akE7ZnVuY3Rpb24gV0EoQSl7cmV0dXJuIGZ1bmN0aW9uKEkpe3JldHVybiBBLmFwcGx5KG51bGwsSSl9fWZ1bmN0aW9uIFpBKEEpe3JldHVybiBDLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBWQT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoVkEpLmZvckVhY2goKFtBLHRdKT0+e1ZBW3RdPUF9KTt2YXIgTXQ9VkE7ZnVuY3Rpb24gcXQoQSl7bGV0IHQ9bmV3IEFBKEEpLEk9VyhBQS5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gQy5leHRlbmQoSSxBQS5wcm90b3R5cGUsdCx7YWxsT3duS2V5czohMH0pLEMuZXh0ZW5kKEksdCxudWxsLHthbGxPd25LZXlzOiEwfSksSS5jcmVhdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHF0KGsoQSxnKSl9LEl9dmFyIGg9cXQoVCk7aC5BeGlvcz1BQTtoLkNhbmNlbGVkRXJyb3I9SDtoLkNhbmNlbFRva2VuPWJ0O2guaXNDYW5jZWw9djtoLlZFUlNJT049dUE7aC50b0Zvcm1EYXRhPUo7aC5BeGlvc0Vycm9yPWw7aC5DYW5jZWw9aC5DYW5jZWxlZEVycm9yO2guYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLmFsbCh0KX07aC5zcHJlYWQ9V0E7aC5pc0F4aW9zRXJyb3I9WkE7aC5tZXJnZUNvbmZpZz1rO2guQXhpb3NIZWFkZXJzPW07aC5mb3JtVG9KU09OPUE9PmNBKEMuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7aC5nZXRBZGFwdGVyPWxBLmdldEFkYXB0ZXI7aC5IdHRwU3RhdHVzQ29kZT1NdDtoLmRlZmF1bHQ9aDt2YXIgZEE9aDt2YXJ7QXhpb3M6aW8sQXhpb3NFcnJvcjpDbyxDYW5jZWxlZEVycm9yOkJvLGlzQ2FuY2VsOm5vLENhbmNlbFRva2VuOnNvLFZFUlNJT046UW8sYWxsOkVvLENhbmNlbDphbyxpc0F4aW9zRXJyb3I6Y28sc3ByZWFkOmZvLHRvRm9ybURhdGE6bG8sQXhpb3NIZWFkZXJzOkRvLEh0dHBTdGF0dXNDb2RlOnVvLGZvcm1Ub0pTT046aG8sZ2V0QWRhcHRlcjp5byxtZXJnZUNvbmZpZzp3b309ZEE7dmFyIHRBLEwsekEsWEE9e2Vudjp7ZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aDpmdW5jdGlvbihBKXt6QT1uZXcgVWludDhBcnJheShMLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcil9fX0seUE9Y2xhc3N7aW5pdCgpe3JldHVybiB0QXx8KHR5cGVvZiBmZXRjaDwidSI/dEE9ZmV0Y2goImRhdGE6YXBwbGljYXRpb24vd2FzbTtiYXNlNjQsIitLdCkudGhlbih0PT50LmFycmF5QnVmZmVyKCkpLnRoZW4odD0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodCxYQSkpLnRoZW4odGhpcy5faW5pdCk6dEE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20oS3QsImJhc2U2NCIpLFhBKS50aGVuKHRoaXMuX2luaXQpLHRBKX1faW5pdCh0KXtMPXQuaW5zdGFuY2UsWEEuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKHQsST0wKXtpZighTCl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgZT10LmJ5dGVMZW5ndGgsZz1MLmV4cG9ydHMubWFsbG9jKGUpO3pBLnNldCh0LGcpLEk9SXx8TnVtYmVyKEwuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKGcsZSkpO2xldCByPUwuZXhwb3J0cy5tYWxsb2MoSSksbz1MLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKHIsSSxnLGUpLG49ekEuc2xpY2UocixyK28pO3JldHVybiBMLmV4cG9ydHMuZnJlZShnKSxMLmV4cG9ydHMuZnJlZShyKSxufX0sS3Q9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgT3Q9bmV3IHlBLFR0PSExO2FzeW5jIGZ1bmN0aW9uIGNlKEEsdCxJKXtsZXQgZT1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9lPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9lPUE6ZT1gJHt0fS8ke0F9YCxlLmVuZHNXaXRoKCIuanMiKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0zKSksZS5lbmRzV2l0aCgiLndhc20iKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC01KSk7bGV0IGc9YCR7ZX0ud2FzbWAscj1hd2FpdCBkQS5nZXQoYCR7Z30uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOkl9KTtUdHx8KGF3YWl0IE90LmluaXQoKSxUdD0hMCk7bGV0IG49T3QuZGVjb2RlKG5ldyBVaW50OEFycmF5KHIuZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke2V9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6bn0pfXZhciBQdD1jZTt2YXIgd0E9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBmZShBLHQsSSl7bGV0IGU9QSxnPUEscj1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihlPW5ldyBVUkwoQS5ocmVmKSxnPWUuaHJlZiksd0EuaGFzKGcpP3I9YXdhaXQgd0EuZ2V0KGcpOih3QS5zZXQoZyxQdChlLHQsSSkpLHI9YXdhaXQgd0EuZ2V0KGcpKSxyfXZhciB4dD1mZTt2YXIgbGU9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybToiVHJhbnNmb3JtIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxEPWxlO3ZhciBEZT17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LFM9RGU7dmFyIHVlPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSxqPXVlO2Z1bmN0aW9uIGhlKEEsdCl7bGV0IEk9bnVsbDtzd2l0Y2goQSl7Y2FzZSBTLlVJbnQ4OntJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQ4OntJPW5ldyBJbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQxNjp7ST1uZXcgVWludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDE2OntJPW5ldyBJbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50MzI6e0k9bmV3IFVpbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQzMjp7ST1uZXcgSW50MzJBcnJheSh0KTticmVha31jYXNlIFMuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj9JPW5ldyBCaWdVaW50NjRBcnJheSh0KTpJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj9JPW5ldyBCaWdJbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBqLkZsb2F0MzI6e0k9bmV3IEZsb2F0MzJBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQ2NDp7ST1uZXcgRmxvYXQ2NEFycmF5KHQpO2JyZWFrfWNhc2UibnVsbCI6e0k9bnVsbDticmVha31jYXNlIG51bGw6e0k9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiBJfXZhciBHPWhlO3ZhciBadD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixqdD1uZXcgVGV4dEVuY29kZXIsV3Q9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIGRlKEEsdCl7bGV0IEk9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sZT1BLmZzX29wZW4odCxJLmZsYWdzKSxyPUEuZnNfc3RhdCh0KS5zaXplLG89bnVsbDtadD9vPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTpvPW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgbj1uZXcgVWludDhBcnJheShvKTtyZXR1cm4gQS5mc19yZWFkKGUsbiwwLHIsMCksQS5mc19jbG9zZShlKSxufWZ1bmN0aW9uIFZ0KEEsdCxJKXtsZXQgZT1udWxsO1p0P2U9bmV3IFNoYXJlZEFycmF5QnVmZmVyKEkpOmU9bmV3IEFycmF5QnVmZmVyKEkpO2xldCBnPW5ldyBVaW50OEFycmF5KGUpLHI9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHQsSSk7cmV0dXJuIGcuc2V0KHIpLGd9ZnVuY3Rpb24gZChBLHQsSSxlKXtsZXQgZz0wO3JldHVybiB0IT09bnVsbCYmKGc9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSxlLHQuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLGcpKSxnfWZ1bmN0aW9uIE0oQSx0LEkpe2xldCBlPUpTT04uc3RyaW5naWZ5KHQpLGc9QS5sZW5ndGhCeXRlc1VURjgoZSkrMSxyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSxnXSk7QS5zdHJpbmdUb1VURjgoZSxyLGcpfWZ1bmN0aW9uIHAoQSx0LEksZSl7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxJXSkscj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxvPVZ0KEEsZyxyKTtyZXR1cm4gRyhlLG8uYnVmZmVyKX1mdW5jdGlvbiBtQShBLHQpe2xldCBJPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsdF0pLGU9QS5VVEY4VG9TdHJpbmcoSSk7cmV0dXJuIEpTT04ucGFyc2UoZSl9ZnVuY3Rpb24geWUoQSx0LEksZSl7ZSE9bnVsbCYmZS5sZW5ndGg+MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBpPWp0LmVuY29kZShRLmRhdGEuZGF0YSksZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBpPWp0LmVuY29kZShKU09OLnN0cmluZ2lmeShRLmRhdGEpKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBpPVEuZGF0YS5kYXRhLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBpPVEuZGF0YSxmPWQoQSxpLmRhdGEsQiwwKSxzPWQoQSxpLmRpcmVjdGlvbixCLDEpLEU9dHlwZW9mIGkubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oaS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTppLmltYWdlVHlwZSxuYW1lOmkubmFtZSxvcmlnaW46aS5vcmlnaW4sc3BhY2luZzppLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLHNpemU6aS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07TShBLGMsQik7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkuY2VsbHMsQiwxKSxFPWQoQSxpLnBvaW50RGF0YSxCLDIpLGM9ZChBLGkuY2VsbERhdGEsQiwzKSx1PXttZXNoVHlwZTppLm1lc2hUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6aS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLGNlbGxCdWZmZXJTaXplOmkuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07TShBLHUsQik7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnBvaW50RGF0YSxCLDEpLEU9e3BvaW50U2V0VHlwZTppLnBvaW50U2V0VHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWB9O00oQSxFLEIpO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS52ZXJ0aWNlcyxCLDEpLEU9ZChBLGkubGluZXMsQiwyKSxjPWQoQSxpLnBvbHlnb25zLEIsMyksdT1kKEEsaS50cmlhbmdsZVN0cmlwcyxCLDQpLHk9ZChBLGkucG9pbnREYXRhLEIsNSksUj1kKEEsaS5wb2ludERhdGEsQiw2KSxOPXtwb2x5RGF0YVR5cGU6aS5wb2x5RGF0YVR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOmkudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLGxpbmVzQnVmZmVyU2l6ZTppLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxwb2x5Z29uc0J1ZmZlclNpemU6aS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmkudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3l9YCxudW1iZXJPZkNlbGxQaXhlbHM6aS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtSfWB9O00oQSxOLEIpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBnPUEuc3RhY2tTYXZlKCkscj0wO3RyeXtyPUEuY2FsbE1haW4odC5zbGljZSgpKX1jYXRjaChRKXt0aHJvdyB0eXBlb2YgUT09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShRKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxRfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUoZyl9bGV0IG89QS5nZXRNb2R1bGVTdGRvdXQoKSxuPUEuZ2V0TW9kdWxlU3RkZXJyKCksYT1bXTtyZXR1cm4gSSE9bnVsbCYmSS5sZW5ndGg+MCYmcj09PTAmJkkuZm9yRWFjaChmdW5jdGlvbihRLEIpe2xldCBpPW51bGw7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPXtkYXRhOld0LmRlY29kZShjKX07YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHMsRSk7aT1KU09OLnBhcnNlKFd0LmRlY29kZShjKSk7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKTtpPXtkYXRhOlZ0KEEscyxFKX07YnJlYWt9Y2FzZSBELlRleHRGaWxlOntpPXtwYXRoOlEuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShRLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntpPXtwYXRoOlEuZGF0YS5wYXRoLGRhdGE6ZGUoQSxRLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IHM9bUEoQSxCKTtzLmRhdGE9cChBLEIsMCxzLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxzLmRpcmVjdGlvbj1wKEEsQiwxLGouRmxvYXQ2NCkscy5tZXRhZGF0YT1uZXcgTWFwKHMubWV0YWRhdGEpLGk9czticmVha31jYXNlIEQuTWVzaDp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxzLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxscz4wP3MuY2VsbHM9cChBLEIsMSxzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpzLmNlbGxzPUcocy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDIscy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxQaXhlbHM+MD9zLmNlbGxEYXRhPXAoQSxCLDMscy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2ludFNldDp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOnMucG9pbnRzPUcocy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMSxzLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAsai5GbG9hdDMyKTpzLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LHMudmVydGljZXNCdWZmZXJTaXplPjA/cy52ZXJ0aWNlcz1wKEEsQiwxLFMuVUludDMyKTpzLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxzLmxpbmVzQnVmZmVyU2l6ZT4wP3MubGluZXM9cChBLEIsMixTLlVJbnQzMik6cy5saW5lcz1uZXcgVWludDMyQXJyYXkscy5wb2x5Z29uc0J1ZmZlclNpemU+MD9zLnBvbHlnb25zPXAoQSxCLDMsUy5VSW50MzIpOnMucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LHMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/cy50cmlhbmdsZVN0cmlwcz1wKEEsQiw0LFMuVUludDMyKTpzLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiw1LHMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxQaXhlbHM+MD9zLmNlbGxEYXRhPXAoQSxCLDYscy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6cy5jZWxsRGF0YT1HKHMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpRLnR5cGUsZGF0YTppfTthLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6cixzdGRvdXQ6byxzdGRlcnI6bixvdXRwdXRzOmF9fXZhciBYdD15ZTt2YXIgd2U9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIG1lKEEsdCl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgST1bXTtmb3IobGV0IGU9MDtlPEEubGVuZ3RoO2UrKyl7bGV0IGc9cGUoQVtlXSx0KTtnIT09bnVsbCYmSS5wdXNoKGcpfXJldHVybiBJfWZ1bmN0aW9uIHBlKEEsdCl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgST1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD9JPUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKEk9QSksd2UmJkkgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOnQ/STpJLnNsaWNlKDApfXZhciB6dD1tZTtmdW5jdGlvbiBTZShBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgX3Q9U2U7ZnVuY3Rpb24gRmUoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIHZ0PUZlO2Z1bmN0aW9uIFJlKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciAkdD1SZTthc3luYyBmdW5jdGlvbiBOZShBLHQsSSxlKXtsZXQgZz1YdChBLHQsSSxlKSxyPVtdO3JldHVybiBnLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihvKXtpZihvLnR5cGU9PT1ELkJpbmFyeVN0cmVhbXx8by50eXBlPT09RC5CaW5hcnlGaWxlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKG4pfWVsc2UgaWYoby50eXBlPT09RC5JbWFnZSl7bGV0IG49by5kYXRhO3IucHVzaCguLi5fdChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELk1lc2gpe2xldCBuPW8uZGF0YTtyLnB1c2goLi4udnQobikpfWVsc2UgaWYoby50eXBlPT09RC5Qb2x5RGF0YSl7bGV0IG49by5kYXRhO3IucHVzaCguLi4kdChuKSl9fSksRkEoZyx6dChyLCEwKSl9dmFyIEFJPU5lO3ZhciBVZT17cnVuUGlwZWxpbmU6YXN5bmMgZnVuY3Rpb24oQSx0LEksZSxnLHIpe2xldCBvPWF3YWl0IHh0KEEsdCxyKTtyZXR1cm4gYXdhaXQgQUkobyxJLGUsZyl9fTtpQShVZSk7JTBBLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjolMEElMEFjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOiUwQSAgKCoqJTBBICAgKiBAbGljZW5zZSUwQSAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQyUwQSAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAlMEEgICAqKSUwQSovJTBBJztodChEdCk7ZXhwb3J0e0JpIGFzIGFwcGx5UHJlc2VudGF0aW9uU3RhdGVUb0ltYWdlLEYgYXMgZ2V0RGVmYXVsdFdlYldvcmtlcixoIGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLHcgYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCxjaSBhcyByZWFkRGljb21FbmNhcHN1bGF0ZWRQZGYsbWkgYXMgcmVhZERpY29tVGFncyx3aSBhcyByZWFkSW1hZ2VEaWNvbUZpbGVTZXJpZXMsbGUgYXMgcmVhZEltYWdlRGljb21GaWxlU2VyaWVzV29ya2VyRnVuY3Rpb24sRmkgYXMgcmVhZE92ZXJsYXBwaW5nU2VnbWVudGF0aW9uLFNpIGFzIHJlYWRTZWdtZW50YXRpb24sZUkgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixodCBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxfcyBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLGZpIGFzIHN0cnVjdHVyZWRSZXBvcnRUb0h0bWwscGkgYXMgc3RydWN0dXJlZFJlcG9ydFRvVGV4dCxSQSBhcyB2ZXJzaW9uLEdpIGFzIHdyaXRlTXVsdGlTZWdtZW50YXRpb24sTmkgYXMgd3JpdGVPdmVybGFwcGluZ1NlZ21lbnRhdGlvbixSaSBhcyB3cml0ZVNlZ21lbnRhdGlvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/dicom/typescript/package.json b/packages/dicom/typescript/package.json index dc68501c4..32a78ea8f 100644 --- a/packages/dicom/typescript/package.json +++ b/packages/dicom/typescript/package.json @@ -1,7 +1,6 @@ { "name": "@itk-wasm/dicom", "version": "7.2.2", - "packageManager": "pnpm@9.6.0", "description": "Read files and images related to DICOM file format.", "type": "module", "module": "./dist/index.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 833f11a83..fee6fe6b8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -512,9 +512,6 @@ importers: '@itk-wasm/image-io-build': specifier: workspace:^ version: link:../image-io - '@thewtex/setup-micromamba': - specifier: ^1.9.7 - version: 1.9.7 itk-wasm: specifier: workspace:^ version: link:../core/typescript/itk-wasm @@ -5309,6 +5306,7 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rollup@3.29.4: From 3752ab796079e397c098cd02f981df6cd9a133fc Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Wed, 23 Oct 2024 23:05:04 -0400 Subject: [PATCH 24/39] chore(dicom): bump version to 7.2.3 --- .../itkwasm_dicom_emscripten/_version.py | 2 +- .../itkwasm_dicom_emscripten/js_package.py | 2 +- .../python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/_version.py | 2 +- packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py | 2 +- packages/dicom/typescript/package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/_version.py b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/_version.py index 19840f56e..ec28a33e2 100644 --- a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/_version.py +++ b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/_version.py @@ -1 +1 @@ -__version__ = "7.2.2" +__version__ = "7.2.3" diff --git a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py index ed46378ac..7b8950130 100644 --- a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py +++ b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIFN0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIga3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlTdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEZ0PSI3LjIuMiIsUkE9RnQ7dmFyIGJ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sYj1idDt2YXIgUnQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFc9UnQ7ZnVuY3Rpb24gVXQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIGIuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBiLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIGIuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIGIuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBiLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBiLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgYi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBiLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIFcuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgVy5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIEc9VXQ7dmFyIE50PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sQmU9TnQ7dmFyIFVBPWNsYXNze2RpbWVuc2lvbjtjb21wb25lbnRUeXBlO3BpeGVsVHlwZTtjb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PWIuVUludDgscj1CZS5TY2FsYXIsbj0xKXt0aGlzLmRpbWVuc2lvbj1lLHRoaXMuY29tcG9uZW50VHlwZT10LHRoaXMucGl4ZWxUeXBlPXIsdGhpcy5jb21wb25lbnRzPW59fSx1ZT1VQTtmdW5jdGlvbiBUdChBLGUsdCxyLG4pe0Fbcit0KmVdPW59dmFyIGNlPVR0O3ZhciBOQT1jbGFzc3tpbWFnZVR5cGU7bmFtZT0iSW1hZ2UiO29yaWdpbjtzcGFjaW5nO2RpcmVjdGlvbjtzaXplO21ldGFkYXRhO2RhdGE7Y29uc3RydWN0b3IoZT1uZXcgdWUpe3RoaXMuaW1hZ2VUeXBlPWU7bGV0IHQ9ZS5kaW1lbnNpb247dGhpcy5vcmlnaW49bmV3IEFycmF5KHQpLHRoaXMub3JpZ2luLmZpbGwoMCksdGhpcy5zcGFjaW5nPW5ldyBBcnJheSh0KSx0aGlzLnNwYWNpbmcuZmlsbCgxKSx0aGlzLmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KHQqdCksdGhpcy5kaXJlY3Rpb24uZmlsbCgwKTtmb3IobGV0IHI9MDtyPHQ7cisrKWNlKHRoaXMuZGlyZWN0aW9uLHQscixyLDEpO3RoaXMuc2l6ZT1uZXcgQXJyYXkodCksdGhpcy5zaXplLmZpbGwoMCksdGhpcy5tZXRhZGF0YT1uZXcgTWFwLHRoaXMuZGF0YT1udWxsfX0sQ2U9TkE7ZnVuY3Rpb24gR3QoQSl7aWYoQS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgZT1BWzBdO2lmKGUuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgQ2UoZS5pbWFnZVR5cGUpO3Qub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLHQuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyk7bGV0IHI9dC5pbWFnZVR5cGUuZGltZW5zaW9uO3QuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCk7bGV0IG49ci0xO3Quc2l6ZT1BcnJheS5mcm9tKGUuc2l6ZSk7bGV0IGk9QS5yZWR1Y2UoKHMsYSk9PnMrYS5zaXplW25dLDApO3Quc2l6ZVtuXT1pO2xldCBvPXQuc2l6ZS5yZWR1Y2UoKHMsYSk9PnMqYSwxKSp0LmltYWdlVHlwZS5jb21wb25lbnRzLEk9ZS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgSShvKTtsZXQgYz10LmltYWdlVHlwZS5jb21wb25lbnRzO2ZvcihsZXQgcz0wO3M8dC5zaXplLmxlbmd0aC0xO3MrKyljKj10LnNpemVbc107bGV0IEI9MDtpZih0LmRhdGEhPW51bGwpZm9yKGxldCBzPTA7czxBLmxlbmd0aDtzKyspdC5kYXRhLnNldChBW3NdLmRhdGEsYypCKSxCKz1BW3NdLnNpemVbbl07ZWxzZSB0aHJvdyBFcnJvcigiQ291bGQgbm90IGNyZWF0ZSByZXN1bHQgaW1hZ2UgZGF0YS4iKTtyZXR1cm4gdH12YXIgVEE9R3Q7dmFyIEdBPWNsYXNze2Zjbjt3b3JrZXJRdWV1ZTtydW5JbmZvO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mY249dCx0aGlzLndvcmtlclF1ZXVlPW5ldyBBcnJheShlKSx0aGlzLndvcmtlclF1ZXVlLmZpbGwobnVsbCksdGhpcy5ydW5JbmZvPVtdfXJ1blRhc2tzKGUsdD1udWxsKXtsZXQgcj17dGFza1F1ZXVlOltdLHJlc3VsdHM6W10sYWRkaW5nVGFza3M6ITEscG9zdHBvbmVkOiExLHJ1bm5pbmdXb3JrZXJzOjAsaW5kZXg6MCxjb21wbGV0ZWRUYXNrczowLHByb2dyZXNzQ2FsbGJhY2s6dCxjYW5jZWxlZDohMX07cmV0dXJuIHRoaXMucnVuSW5mby5wdXNoKHIpLHIuaW5kZXg9dGhpcy5ydW5JbmZvLmxlbmd0aC0xLHtwcm9taXNlOm5ldyBQcm9taXNlKChuLGkpPT57ci5yZXNvbHZlPW4sci5yZWplY3Q9aSxyLnJlc3VsdHM9bmV3IEFycmF5KGUubGVuZ3RoKSxyLmNvbXBsZXRlZFRhc2tzPTAsci5hZGRpbmdUYXNrcz0hMCxlLmZvckVhY2goKG8sSSk9Pnt0aGlzLmFkZFRhc2soci5pbmRleCxJLG8pfSksci5hZGRpbmdUYXNrcz0hMX0pLHJ1bklkOnIuaW5kZXh9fXRlcm1pbmF0ZVdvcmtlcnMoKXtmb3IobGV0IGU9MDtlPHRoaXMud29ya2VyUXVldWUubGVuZ3RoO2UrKyl7bGV0IHQ9dGhpcy53b3JrZXJRdWV1ZVtlXTt0Py50ZXJtaW5hdGUoKSx0aGlzLndvcmtlclF1ZXVlW2VdPW51bGx9fWNhbmNlbChlKXtsZXQgdD10aGlzLnJ1bkluZm9bZV07dCE9bnVsbCYmKHQuY2FuY2VsZWQ9ITApfWFkZFRhc2soZSx0LHIpe2xldCBuPXRoaXMucnVuSW5mb1tlXTtpZihuPy5jYW5jZWxlZD09PSEwKXtuLnJlamVjdCgiUmVtYWluaW5nIHRhc2tzIGNhbmNlbGVkIiksdGhpcy5jbGVhclRhc2sobi5pbmRleCk7cmV0dXJufWlmKHRoaXMud29ya2VyUXVldWUubGVuZ3RoPjApe2xldCBpPXRoaXMud29ya2VyUXVldWUucG9wKCk7bi5ydW5uaW5nV29ya2VycysrLHJbci5sZW5ndGgtMV0ud2ViV29ya2VyPWksdGhpcy5mY24oLi4ucikudGhlbigoe3dlYldvcmtlcjpvLC4uLkl9KT0+e2lmKHRoaXMud29ya2VyUXVldWUucHVzaChvKSx0aGlzLnJ1bkluZm9bZV0hPT1udWxsKXtpZihuLnJ1bm5pbmdXb3JrZXJzLS0sbi5yZXN1bHRzW3RdPUksbi5jb21wbGV0ZWRUYXNrcysrLG4ucHJvZ3Jlc3NDYWxsYmFjayE9bnVsbCYmbi5wcm9ncmVzc0NhbGxiYWNrKG4uY29tcGxldGVkVGFza3Msbi5yZXN1bHRzLmxlbmd0aCksbi50YXNrUXVldWUubGVuZ3RoPjApe2xldCBjPW4udGFza1F1ZXVlLnNoaWZ0KCk7dGhpcy5hZGRUYXNrKGUsY1swXSxjWzFdKX1lbHNlIGlmKCFuLmFkZGluZ1Rhc2tzJiZuLnJ1bm5pbmdXb3JrZXJzPT09MCl7bGV0IGM9bi5yZXN1bHRzO24ucmVzb2x2ZShjKSx0aGlzLmNsZWFyVGFzayhuLmluZGV4KX19fSkuY2F0Y2gobz0+e24ucmVqZWN0KG8pLHRoaXMuY2xlYXJUYXNrKG4uaW5kZXgpfSl9ZWxzZSBuLnJ1bm5pbmdXb3JrZXJzIT09MHx8bi5wb3N0cG9uZWQ/bi50YXNrUXVldWUucHVzaChbdCxyXSk6KG4ucG9zdHBvbmVkPSEwLHNldFRpbWVvdXQoKCk9PntuLnBvc3Rwb25lZD0hMSx0aGlzLmFkZFRhc2sobi5pbmRleCx0LHIpfSw1MCkpfWNsZWFyVGFzayhlKXt0aGlzLnJ1bkluZm9bZV0ucmVzdWx0cz1bXSx0aGlzLnJ1bkluZm9bZV0udGFza1F1ZXVlPVtdLHRoaXMucnVuSW5mb1tlXS5wcm9ncmVzc0NhbGxiYWNrPW51bGwsdGhpcy5ydW5JbmZvW2VdLmNhbmNlbGVkPW51bGwsdGhpcy5ydW5JbmZvW2VdLnJlamVjdD0oKT0+e30sdGhpcy5ydW5JbmZvW2VdLnJlc29sdmU9KCk9Pnt9fX0sT0E9R0E7dmFyIE90PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sRT1PdDt2YXIgRWU9U3ltYm9sKCJDb21saW5rLnByb3h5IiksTHQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IikseEE9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLExBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxJQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIikscGU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsUHQ9e2NhbkhhbmRsZTpBPT5wZShBKSYmQVtFZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gbWUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLEpBKEEpfX0seHQ9e2NhbkhhbmRsZTpBPT5wZShBKSYmSUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LFFlPW5ldyBNYXAoW1sicHJveHkiLFB0XSxbInRocm93Iix4dF1dKTtmdW5jdGlvbiBKdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbWUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG4pe2lmKCFufHwhbi5kYXRhKXJldHVybjtpZighSnQodCxuLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7bi5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6aSx0eXBlOm8scGF0aDpJfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxuLmRhdGEpLGM9KG4uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoSCksQjt0cnl7bGV0IHM9SS5zbGljZSgwLC0xKS5yZWR1Y2UoKGYsbCk9PmZbbF0sQSksYT1JLnJlZHVjZSgoZixsKT0+ZltsXSxBKTtzd2l0Y2gobyl7Y2FzZSJHRVQiOkI9YTticmVhaztjYXNlIlNFVCI6c1tJLnNsaWNlKC0xKVswXV09SChuLmRhdGEudmFsdWUpLEI9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6Qj1hLmFwcGx5KHMsYyk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgYSguLi5jKTtCPXF0KGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpsfT1uZXcgTWVzc2FnZUNoYW5uZWw7bWUoQSxsKSxCPUhBKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOkI9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChzKXtCPXt2YWx1ZTpzLFtJQV06MH19UHJvbWlzZS5yZXNvbHZlKEIpLmNhdGNoKHM9Pih7dmFsdWU6cyxbSUFdOjB9KSkudGhlbihzPT57bGV0W2EsZl09QkEocyk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOml9KSxmKSxvPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxkZShlKSxMQSBpbiBBJiZ0eXBlb2YgQVtMQV09PSJmdW5jdGlvbiImJkFbTEFdKCkpfSkuY2F0Y2gocz0+e2xldFthLGZdPUJBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbSUFdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6aX0pLGYpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gSHQoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gZGUoQSl7SHQoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBKQShBLGUpe3JldHVybiBQQShBLFtdLGUpfWZ1bmN0aW9uIHNBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBoZShBKXtyZXR1cm4gWShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntkZShBKX0pfXZhciBnQT1uZXcgV2Vha01hcCxsQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oZ0EuZ2V0KEEpfHwwKS0xO2dBLnNldChBLGUpLGU9PT0wJiZoZShBKX0pO2Z1bmN0aW9uIE10KEEsZSl7bGV0IHQ9KGdBLmdldChlKXx8MCkrMTtnQS5zZXQoZSx0KSxsQSYmbEEucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIFd0KEEpe2xBJiZsQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIFBBKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbj1uZXcgUHJveHkodCx7Z2V0KGksbyl7aWYoc0Eociksbz09PXhBKXJldHVybigpPT57V3QobiksaGUoQSkscj0hMH07aWYobz09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5ufTtsZXQgST1ZKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChjPT5jLnRvU3RyaW5nKCkpfSkudGhlbihIKTtyZXR1cm4gSS50aGVuLmJpbmQoSSl9cmV0dXJuIFBBKEEsWy4uLmUsb10pfSxzZXQoaSxvLEkpe3NBKHIpO2xldFtjLEJdPUJBKEkpO3JldHVybiBZKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxvXS5tYXAocz0+cy50b1N0cmluZygpKSx2YWx1ZTpjfSxCKS50aGVuKEgpfSxhcHBseShpLG8sSSl7c0Eocik7bGV0IGM9ZVtlLmxlbmd0aC0xXTtpZihjPT09THQpcmV0dXJuIFkoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihIKTtpZihjPT09ImJpbmQiKXJldHVybiBQQShBLGUuc2xpY2UoMCwtMSkpO2xldFtCLHNdPWZlKEkpO3JldHVybiBZKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkJ9LHMpLnRoZW4oSCl9LGNvbnN0cnVjdChpLG8pe3NBKHIpO2xldFtJLGNdPWZlKG8pO3JldHVybiBZKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChCPT5CLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpJfSxjKS50aGVuKEgpfX0pO3JldHVybiBNdChuLEEpLG59ZnVuY3Rpb24gWXQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gZmUoQSl7bGV0IGU9QS5tYXAoQkEpO3JldHVybltlLm1hcCh0PT50WzBdKSxZdChlLm1hcCh0PT50WzFdKSldfXZhciB5ZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBIQShBLGUpe3JldHVybiB5ZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIHF0KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tFZV06ITB9KX1mdW5jdGlvbiBCQShBKXtmb3IobGV0W2UsdF1vZiBRZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isbl09dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sbl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LHllLmdldChBKXx8W11dfWZ1bmN0aW9uIEgoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gUWUuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBZKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBuPUt0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKG8peyFvLmRhdGF8fCFvLmRhdGEuaWR8fG8uZGF0YS5pZCE9PW58fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLHIoby5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpufSxlKSx0KX0pfWZ1bmN0aW9uIEt0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBYKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6dnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOllBfT1PYmplY3QsY0E9KEE9PmU9PntsZXQgdD12dC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTz1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+Y0EoZSk9PT1BKSxDQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6cX09QXJyYXksJD1DQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24ganQoQSl7cmV0dXJuIEEhPT1udWxsJiYhJChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiEkKEEuY29uc3RydWN0b3IpJiZUKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBrZT1PKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIF90KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYma2UoQS5idWZmZXIpLGV9dmFyIHp0PUNBKCJzdHJpbmciKSxUPUNBKCJmdW5jdGlvbiIpLEZlPUNBKCJudW1iZXIiKSxmQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLFZ0PUE9PkE9PT0hMHx8QT09PSExLHVBPUE9PntpZihjQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPVlBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LFp0PU8oIkRhdGUiKSxYdD1PKCJGaWxlIiksJHQ9TygiQmxvYiIpLEFyPU8oIkZpbGVMaXN0IiksZXI9QT0+ZkEoQSkmJlQoQS5waXBlKSx0cj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8VChBLmFwcGVuZCkmJigoZT1jQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJlQoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0scnI9TygiVVJMU2VhcmNoUGFyYW1zIiksaXI9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uIEFBKEEsZSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IHIsbjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSkscShBKSlmb3Iocj0wLG49QS5sZW5ndGg7cjxuO3IrKyllLmNhbGwobnVsbCxBW3JdLHIsQSk7ZWxzZXtsZXQgaT10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG89aS5sZW5ndGgsSTtmb3Iocj0wO3I8bztyKyspST1pW3JdLGUuY2FsbChudWxsLEFbSV0sSSxBKX19ZnVuY3Rpb24gYmUoQSxlKXtlPWUudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxyPXQubGVuZ3RoLG47Zm9yKDtyLS0gPjA7KWlmKG49dFtyXSxlPT09bi50b0xvd2VyQ2FzZSgpKXJldHVybiBuO3JldHVybiBudWxsfXZhciBSZT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLFVlPUE9PiEkKEEpJiZBIT09UmU7ZnVuY3Rpb24gV0EoKXtsZXR7Y2FzZWxlc3M6QX09VWUodGhpcykmJnRoaXN8fHt9LGU9e30sdD0ocixuKT0+e2xldCBpPUEmJmJlKGUsbil8fG47dUEoZVtpXSkmJnVBKHIpP2VbaV09V0EoZVtpXSxyKTp1QShyKT9lW2ldPVdBKHt9LHIpOnEocik/ZVtpXT1yLnNsaWNlKCk6ZVtpXT1yfTtmb3IobGV0IHI9MCxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKylhcmd1bWVudHNbcl0mJkFBKGFyZ3VtZW50c1tyXSx0KTtyZXR1cm4gZX12YXIgbnI9KEEsZSx0LHthbGxPd25LZXlzOnJ9PXt9KT0+KEFBKGUsKG4saSk9Pnt0JiZUKG4pP0FbaV09WChuLHQpOkFbaV09bn0se2FsbE93bktleXM6cn0pLEEpLG9yPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksYXI9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sc3I9KEEsZSx0LHIpPT57bGV0IG4saSxvLEk9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLGk9bi5sZW5ndGg7aS0tID4wOylvPW5baV0sKCFyfHxyKG8sQSxlKSkmJiFJW29dJiYoZVtvXT1BW29dLElbb109ITApO0E9dCE9PSExJiZZQShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0sSXI9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxncj1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYocShBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighRmUoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LGxyPShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZZQShVaW50OEFycmF5KSksQnI9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG47Zm9yKDsobj1yLm5leHQoKSkmJiFuLmRvbmU7KXtsZXQgaT1uLnZhbHVlO2UuY2FsbChBLGlbMF0saVsxXSl9fSx1cj0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxjcj1PKCJIVE1MRm9ybUVsZW1lbnQiKSxDcj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbil7cmV0dXJuIHIudG9VcHBlckNhc2UoKStufSksRGU9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLGZyPU8oIlJlZ0V4cCIpLE5lPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTtBQSh0LChuLGkpPT57bGV0IG87KG89ZShuLGksQSkpIT09ITEmJihyW2ldPW98fG4pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxyKX0sRXI9QT0+e05lKEEsKGUsdCk9PntpZihUKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YodCkhPT0tMSlyZXR1cm4hMTtsZXQgcj1BW3RdO2lmKFQocikpe2lmKGUuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gZSl7ZS53cml0YWJsZT0hMTtyZXR1cm59ZS5zZXR8fChlLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIit0KyInIil9KX19KX0scHI9KEEsZSk9PntsZXQgdD17fSxyPW49PntuLmZvckVhY2goaT0+e3RbaV09ITB9KX07cmV0dXJuIHEoQSk/cihBKTpyKFN0cmluZyhBKS5zcGxpdChlKSksdH0sUXI9KCk9Pnt9LG1yPShBLGUpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTplKSxNQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLFNlPSIwMTIzNDU2Nzg5IixUZT17RElHSVQ6U2UsQUxQSEE6TUEsQUxQSEFfRElHSVQ6TUErTUEudG9VcHBlckNhc2UoKStTZX0sZHI9KEE9MTYsZT1UZS5BTFBIQV9ESUdJVCk9PntsZXQgdD0iIix7bGVuZ3RoOnJ9PWU7Zm9yKDtBLS07KXQrPWVbTWF0aC5yYW5kb20oKSpyfDBdO3JldHVybiB0fTtmdW5jdGlvbiBocihBKXtyZXR1cm4hIShBJiZUKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgeXI9QT0+e2xldCBlPW5ldyBBcnJheSgxMCksdD0ocixuKT0+e2lmKGZBKHIpKXtpZihlLmluZGV4T2Yocik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiByKSl7ZVtuXT1yO2xldCBpPXEocik/W106e307cmV0dXJuIEFBKHIsKG8sSSk9PntsZXQgYz10KG8sbisxKTshJChjKSYmKGlbSV09Yyl9KSxlW25dPXZvaWQgMCxpfX1yZXR1cm4gcn07cmV0dXJuIHQoQSwwKX0sd3I9TygiQXN5bmNGdW5jdGlvbiIpLERyPUE9PkEmJihmQShBKXx8VChBKSkmJlQoQS50aGVuKSYmVChBLmNhdGNoKSxnPXtpc0FycmF5OnEsaXNBcnJheUJ1ZmZlcjprZSxpc0J1ZmZlcjpqdCxpc0Zvcm1EYXRhOnRyLGlzQXJyYXlCdWZmZXJWaWV3Ol90LGlzU3RyaW5nOnp0LGlzTnVtYmVyOkZlLGlzQm9vbGVhbjpWdCxpc09iamVjdDpmQSxpc1BsYWluT2JqZWN0OnVBLGlzVW5kZWZpbmVkOiQsaXNEYXRlOlp0LGlzRmlsZTpYdCxpc0Jsb2I6JHQsaXNSZWdFeHA6ZnIsaXNGdW5jdGlvbjpULGlzU3RyZWFtOmVyLGlzVVJMU2VhcmNoUGFyYW1zOnJyLGlzVHlwZWRBcnJheTpscixpc0ZpbGVMaXN0OkFyLGZvckVhY2g6QUEsbWVyZ2U6V0EsZXh0ZW5kOm5yLHRyaW06aXIsc3RyaXBCT006b3IsaW5oZXJpdHM6YXIsdG9GbGF0T2JqZWN0OnNyLGtpbmRPZjpjQSxraW5kT2ZUZXN0Ok8sZW5kc1dpdGg6SXIsdG9BcnJheTpncixmb3JFYWNoRW50cnk6QnIsbWF0Y2hBbGw6dXIsaXNIVE1MRm9ybTpjcixoYXNPd25Qcm9wZXJ0eTpEZSxoYXNPd25Qcm9wOkRlLHJlZHVjZURlc2NyaXB0b3JzOk5lLGZyZWV6ZU1ldGhvZHM6RXIsdG9PYmplY3RTZXQ6cHIsdG9DYW1lbENhc2U6Q3Isbm9vcDpRcix0b0Zpbml0ZU51bWJlcjptcixmaW5kS2V5OmJlLGdsb2JhbDpSZSxpc0NvbnRleHREZWZpbmVkOlVlLEFMUEhBQkVUOlRlLGdlbmVyYXRlU3RyaW5nOmRyLGlzU3BlY0NvbXBsaWFudEZvcm06aHIsdG9KU09OT2JqZWN0OnlyLGlzQXN5bmNGbjp3cixpc1RoZW5hYmxlOkRyfTtmdW5jdGlvbiBLKEEsZSx0LHIsbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG4mJih0aGlzLnJlc3BvbnNlPW4pfWcuaW5oZXJpdHMoSyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmcudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIEdlPUsucHJvdG90eXBlLE9lPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e09lW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEssT2UpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShHZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtLLmZyb209KEEsZSx0LHIsbixpKT0+e2xldCBvPU9iamVjdC5jcmVhdGUoR2UpO3JldHVybiBnLnRvRmxhdE9iamVjdChBLG8sZnVuY3Rpb24oYyl7cmV0dXJuIGMhPT1FcnJvci5wcm90b3R5cGV9LEk9PkkhPT0iaXNBeGlvc0Vycm9yIiksSy5jYWxsKG8sQS5tZXNzYWdlLGUsdCxyLG4pLG8uY2F1c2U9QSxvLm5hbWU9QS5uYW1lLGkmJk9iamVjdC5hc3NpZ24obyxpKSxvfTt2YXIgbT1LO3ZhciBFQT1udWxsO2Z1bmN0aW9uIHFBKEEpe3JldHVybiBnLmlzUGxhaW5PYmplY3QoQSl8fGcuaXNBcnJheShBKX1mdW5jdGlvbiBQZShBKXtyZXR1cm4gZy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBMZShBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG49UGUobiksIXQmJmk/IlsiK24rIl0iOm59KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIFNyKEEpe3JldHVybiBnLmlzQXJyYXkoQSkmJiFBLnNvbWUocUEpfXZhciBrcj1nLnRvRmxhdE9iamVjdChnLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gRnIoQSxlLHQpe2lmKCFnLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KEVBfHxGb3JtRGF0YSksdD1nLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24odSxwKXtyZXR1cm4hZy5pc1VuZGVmaW5lZChwW3VdKX0pO2xldCByPXQubWV0YVRva2VucyxuPXQudmlzaXRvcnx8cyxpPXQuZG90cyxvPXQuaW5kZXhlcyxjPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmcuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighZy5pc0Z1bmN0aW9uKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gQihDKXtpZihDPT09bnVsbClyZXR1cm4iIjtpZihnLmlzRGF0ZShDKSlyZXR1cm4gQy50b0lTT1N0cmluZygpO2lmKCFjJiZnLmlzQmxvYihDKSl0aHJvdyBuZXcgbSgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gZy5pc0FycmF5QnVmZmVyKEMpfHxnLmlzVHlwZWRBcnJheShDKT9jJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbQ10pOkJ1ZmZlci5mcm9tKEMpOkN9ZnVuY3Rpb24gcyhDLHUscCl7bGV0IFE9QztpZihDJiYhcCYmdHlwZW9mIEM9PSJvYmplY3QiKXtpZihnLmVuZHNXaXRoKHUsInt9IikpdT1yP3U6dS5zbGljZSgwLC0yKSxDPUpTT04uc3RyaW5naWZ5KEMpO2Vsc2UgaWYoZy5pc0FycmF5KEMpJiZTcihDKXx8KGcuaXNGaWxlTGlzdChDKXx8Zy5lbmRzV2l0aCh1LCJbXSIpKSYmKFE9Zy50b0FycmF5KEMpKSlyZXR1cm4gdT1QZSh1KSxRLmZvckVhY2goZnVuY3Rpb24oUyxaKXshKGcuaXNVbmRlZmluZWQoUyl8fFM9PT1udWxsKSYmZS5hcHBlbmQobz09PSEwP0xlKFt1XSxaLGkpOm89PT1udWxsP3U6dSsiW10iLEIoUykpfSksITF9cmV0dXJuIHFBKEMpPyEwOihlLmFwcGVuZChMZShwLHUsaSksQihDKSksITEpfWxldCBhPVtdLGY9T2JqZWN0LmFzc2lnbihrcix7ZGVmYXVsdFZpc2l0b3I6cyxjb252ZXJ0VmFsdWU6Qixpc1Zpc2l0YWJsZTpxQX0pO2Z1bmN0aW9uIGwoQyx1KXtpZighZy5pc1VuZGVmaW5lZChDKSl7aWYoYS5pbmRleE9mKEMpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK3Uuam9pbigiLiIpKTthLnB1c2goQyksZy5mb3JFYWNoKEMsZnVuY3Rpb24oUSxkKXsoIShnLmlzVW5kZWZpbmVkKFEpfHxRPT09bnVsbCkmJm4uY2FsbChlLFEsZy5pc1N0cmluZyhkKT9kLnRyaW0oKTpkLHUsZikpPT09ITAmJmwoUSx1P3UuY29uY2F0KGQpOltkXSl9KSxhLnBvcCgpfX1pZighZy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIGwoQSksZX12YXIgUD1GcjtmdW5jdGlvbiB4ZShBKXtsZXQgZT17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihyKXtyZXR1cm4gZVtyXX0pfWZ1bmN0aW9uIEplKEEsZSl7dGhpcy5fcGFpcnM9W10sQSYmUChBLHRoaXMsZSl9dmFyIEhlPUplLnByb3RvdHlwZTtIZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wYWlycy5wdXNoKFtlLHRdKX07SGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7bGV0IHQ9ZT9mdW5jdGlvbihyKXtyZXR1cm4gZS5jYWxsKHRoaXMscix4ZSl9OnhlO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQoblswXSkrIj0iK3QoblsxXSl9LCIiKS5qb2luKCImIil9O3ZhciBwQT1KZTtmdW5jdGlvbiBicihBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1mdW5jdGlvbiBlQShBLGUsdCl7aWYoIWUpcmV0dXJuIEE7bGV0IHI9dCYmdC5lbmNvZGV8fGJyLG49dCYmdC5zZXJpYWxpemUsaTtpZihuP2k9bihlLHQpOmk9Zy5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IHBBKGUsdCkudG9TdHJpbmcociksaSl7bGV0IG89QS5pbmRleE9mKCIjIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK2l9cmV0dXJuIEF9dmFyIEtBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6cj9yLnN5bmNocm9ub3VzOiExLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXtnLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihyKXtyIT09bnVsbCYmZShyKX0pfX0sdkE9S0E7dmFyIFFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgTWU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOnBBO3ZhciBXZT10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIFllPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIHFlPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOk1lLEZvcm1EYXRhOldlLEJsb2I6WWV9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgakE9e307a3QoakEse2hhc0Jyb3dzZXJFbnY6KCk9PktlLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+UnIsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5Vcn0pO3ZhciBLZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixScj0oQT0+S2UmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxVcj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIFI9ey4uLmpBLC4uLnFlfTtmdW5jdGlvbiBfQShBLGUpe3JldHVybiBQKEEsbmV3IFIuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LHIsbixpKXtyZXR1cm4gUi5pc05vZGUmJmcuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKHIsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTppLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBOcihBKXtyZXR1cm4gZy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIFRyKEEpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMoQSkscixuPXQubGVuZ3RoLGk7Zm9yKHI9MDtyPG47cisrKWk9dFtyXSxlW2ldPUFbaV07cmV0dXJuIGV9ZnVuY3Rpb24gR3IoQSl7ZnVuY3Rpb24gZSh0LHIsbixpKXtsZXQgbz10W2krK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBJPU51bWJlci5pc0Zpbml0ZSgrbyksYz1pPj10Lmxlbmd0aDtyZXR1cm4gbz0hbyYmZy5pc0FycmF5KG4pP24ubGVuZ3RoOm8sYz8oZy5oYXNPd25Qcm9wKG4sbyk/bltvXT1bbltvXSxyXTpuW29dPXIsIUkpOigoIW5bb118fCFnLmlzT2JqZWN0KG5bb10pKSYmKG5bb109W10pLGUodCxyLG5bb10saSkmJmcuaXNBcnJheShuW29dKSYmKG5bb109VHIobltvXSkpLCFJKX1pZihnLmlzRm9ybURhdGEoQSkmJmcuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gZy5mb3JFYWNoRW50cnkoQSwocixuKT0+e2UoTnIociksbix0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgbUE9R3I7ZnVuY3Rpb24gT3IoQSxlLHQpe2lmKGcuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxnLnRyaW0oQSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIHpBPXt0cmFuc2l0aW9uYWw6UUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxpPWcuaXNPYmplY3QoZSk7aWYoaSYmZy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLGcuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShtQShlKSk6ZTtpZihnLmlzQXJyYXlCdWZmZXIoZSl8fGcuaXNCdWZmZXIoZSl8fGcuaXNTdHJlYW0oZSl8fGcuaXNGaWxlKGUpfHxnLmlzQmxvYihlKSlyZXR1cm4gZTtpZihnLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihnLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgSTtpZihpKXtpZihyLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBfQShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEk9Zy5pc0ZpbGVMaXN0KGUpKXx8ci5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBjPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gUChJP3siZmlsZXNbXSI6ZX06ZSxjJiZuZXcgYyx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIGl8fG4/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxPcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8ekEudHJhbnNpdGlvbmFsLHI9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxuPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJmcuaXNTdHJpbmcoZSkmJihyJiYhdGhpcy5yZXNwb25zZVR5cGV8fG4pKXtsZXQgbz0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChJKXtpZihvKXRocm93IEkubmFtZT09PSJTeW50YXhFcnJvciI/bS5mcm9tKEksbS5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpJfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6Ui5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6Ui5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Zy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9Pnt6QS5oZWFkZXJzW0FdPXt9fSk7dmFyIHY9ekE7dmFyIExyPWcudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksdmU9QT0+e2xldCBlPXt9LHQscixuO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihvKXtuPW8uaW5kZXhPZigiOiIpLHQ9by5zdWJzdHJpbmcoMCxuKS50cmltKCkudG9Mb3dlckNhc2UoKSxyPW8uc3Vic3RyaW5nKG4rMSkudHJpbSgpLCEoIXR8fGVbdF0mJkxyW3RdKSYmKHQ9PT0ic2V0LWNvb2tpZSI/ZVt0XT9lW3RdLnB1c2gocik6ZVt0XT1bcl06ZVt0XT1lW3RdP2VbdF0rIiwgIityOnIpfSksZX07dmFyIGplPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gdEEoQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBkQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6Zy5pc0FycmF5KEEpP0EubWFwKGRBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gUHIoQSl7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2cscjtmb3IoO3I9dC5leGVjKEEpOyllW3JbMV1dPXJbMl07cmV0dXJuIGV9dmFyIHhyPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIFZBKEEsZSx0LHIsbil7aWYoZy5pc0Z1bmN0aW9uKHIpKXJldHVybiByLmNhbGwodGhpcyxlLHQpO2lmKG4mJihlPXQpLCEhZy5pc1N0cmluZyhlKSl7aWYoZy5pc1N0cmluZyhyKSlyZXR1cm4gZS5pbmRleE9mKHIpIT09LTE7aWYoZy5pc1JlZ0V4cChyKSlyZXR1cm4gci50ZXN0KGUpfX1mdW5jdGlvbiBKcihBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLChlLHQscik9PnQudG9VcHBlckNhc2UoKStyKX1mdW5jdGlvbiBIcihBLGUpe2xldCB0PWcudG9DYW1lbENhc2UoIiAiK2UpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChyPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEscit0LHt2YWx1ZTpmdW5jdGlvbihuLGksbyl7cmV0dXJuIHRoaXNbcl0uY2FsbCh0aGlzLGUsbixpLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBqPWNsYXNze2NvbnN0cnVjdG9yKGUpe2UmJnRoaXMuc2V0KGUpfXNldChlLHQscil7bGV0IG49dGhpcztmdW5jdGlvbiBpKEksYyxCKXtsZXQgcz10QShjKTtpZighcyl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGE9Zy5maW5kS2V5KG4scyk7KCFhfHxuW2FdPT09dm9pZCAwfHxCPT09ITB8fEI9PT12b2lkIDAmJm5bYV0hPT0hMSkmJihuW2F8fGNdPWRBKEkpKX1sZXQgbz0oSSxjKT0+Zy5mb3JFYWNoKEksKEIscyk9PmkoQixzLGMpKTtyZXR1cm4gZy5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKGUsdCk6Zy5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYheHIoZSk/byh2ZShlKSx0KTplIT1udWxsJiZpKHQsZSxyKSx0aGlzfWdldChlLHQpe2lmKGU9dEEoZSksZSl7bGV0IHI9Zy5maW5kS2V5KHRoaXMsZSk7aWYocil7bGV0IG49dGhpc1tyXTtpZighdClyZXR1cm4gbjtpZih0PT09ITApcmV0dXJuIFByKG4pO2lmKGcuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsbixyKTtpZihnLmlzUmVnRXhwKHQpKXJldHVybiB0LmV4ZWMobik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHQpe2lmKGU9dEEoZSksZSl7bGV0IHI9Zy5maW5kS2V5KHRoaXMsZSk7cmV0dXJuISEociYmdGhpc1tyXSE9PXZvaWQgMCYmKCF0fHxWQSh0aGlzLHRoaXNbcl0scix0KSkpfXJldHVybiExfWRlbGV0ZShlLHQpe2xldCByPXRoaXMsbj0hMTtmdW5jdGlvbiBpKG8pe2lmKG89dEEobyksbyl7bGV0IEk9Zy5maW5kS2V5KHIsbyk7SSYmKCF0fHxWQShyLHJbSV0sSSx0KSkmJihkZWxldGUgcltJXSxuPSEwKX19cmV0dXJuIGcuaXNBcnJheShlKT9lLmZvckVhY2goaSk6aShlKSxufWNsZWFyKGUpe2xldCB0PU9iamVjdC5rZXlzKHRoaXMpLHI9dC5sZW5ndGgsbj0hMTtmb3IoO3ItLTspe2xldCBpPXRbcl07KCFlfHxWQSh0aGlzLHRoaXNbaV0saSxlLCEwKSkmJihkZWxldGUgdGhpc1tpXSxuPSEwKX1yZXR1cm4gbn1ub3JtYWxpemUoZSl7bGV0IHQ9dGhpcyxyPXt9O3JldHVybiBnLmZvckVhY2godGhpcywobixpKT0+e2xldCBvPWcuZmluZEtleShyLGkpO2lmKG8pe3Rbb109ZEEobiksZGVsZXRlIHRbaV07cmV0dXJufWxldCBJPWU/SnIoaSk6U3RyaW5nKGkpLnRyaW0oKTtJIT09aSYmZGVsZXRlIHRbaV0sdFtJXT1kQShuKSxyW0ldPSEwfSksdGhpc31jb25jYXQoLi4uZSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uZSl9dG9KU09OKGUpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGcuZm9yRWFjaCh0aGlzLChyLG4pPT57ciE9bnVsbCYmciE9PSExJiYodFtuXT1lJiZnLmlzQXJyYXkocik/ci5qb2luKCIsICIpOnIpfSksdH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbZSx0XSk9PmUrIjogIit0KS5qb2luKGAKYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXM/ZTpuZXcgdGhpcyhlKX1zdGF0aWMgY29uY2F0KGUsLi4udCl7bGV0IHI9bmV3IHRoaXMoZSk7cmV0dXJuIHQuZm9yRWFjaChuPT5yLnNldChuKSkscn1zdGF0aWMgYWNjZXNzb3IoZSl7bGV0IHI9KHRoaXNbamVdPXRoaXNbamVdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBpKG8pe2xldCBJPXRBKG8pO3JbSV18fChIcihuLG8pLHJbSV09ITApfXJldHVybiBnLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSksdGhpc319O2ouYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO2cucmVkdWNlRGVzY3JpcHRvcnMoai5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHIpe3RoaXNbdF09cn19fSk7Zy5mcmVlemVNZXRob2RzKGopO3ZhciBVPWo7ZnVuY3Rpb24gckEoQSxlKXtsZXQgdD10aGlzfHx2LHI9ZXx8dCxuPVUuZnJvbShyLmhlYWRlcnMpLGk9ci5kYXRhO3JldHVybiBnLmZvckVhY2goQSxmdW5jdGlvbihJKXtpPUkuY2FsbCh0LGksbi5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxuLm5vcm1hbGl6ZSgpLGl9ZnVuY3Rpb24gaUEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBfZShBLGUsdCl7bS5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixtLkVSUl9DQU5DRUxFRCxlLHQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Zy5pbmhlcml0cyhfZSxtLHtfX0NBTkNFTF9fOiEwfSk7dmFyIHg9X2U7ZnVuY3Rpb24gWkEoQSxlLHQpe2xldCByPXQuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyF0LnN0YXR1c3x8IXJ8fHIodC5zdGF0dXMpP0EodCk6ZShuZXcgbSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Quc3RhdHVzLFttLkVSUl9CQURfUkVRVUVTVCxtLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IodC5zdGF0dXMvMTAwKS00XSx0LmNvbmZpZyx0LnJlcXVlc3QsdCkpfXZhciB6ZT1SLmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHQscixuLGkpe2xldCBvPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO2cuaXNOdW1iZXIodCkmJm8ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHQpLnRvR01UU3RyaW5nKCkpLGcuaXNTdHJpbmcocikmJm8ucHVzaCgicGF0aD0iK3IpLGcuaXNTdHJpbmcobikmJm8ucHVzaCgiZG9tYWluPSIrbiksaT09PSEwJiZvLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1vLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBYQShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uICRBKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiBuQShBLGUpe3JldHVybiBBJiYhWEEoZSk/JEEoQSxlKTplfXZhciBWZT1SLmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikscjtmdW5jdGlvbiBuKGkpe2xldCBvPWk7cmV0dXJuIGUmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIHI9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IEk9Zy5pc1N0cmluZyhvKT9uKG8pOm87cmV0dXJuIEkucHJvdG9jb2w9PT1yLnByb3RvY29sJiZJLmhvc3Q9PT1yLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIEFlKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBNcihBLGUpe0E9QXx8MTA7bGV0IHQ9bmV3IEFycmF5KEEpLHI9bmV3IEFycmF5KEEpLG49MCxpPTAsbztyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKGMpe2xldCBCPURhdGUubm93KCkscz1yW2ldO298fChvPUIpLHRbbl09YyxyW25dPUI7bGV0IGE9aSxmPTA7Zm9yKDthIT09bjspZis9dFthKytdLGE9YSVBO2lmKG49KG4rMSklQSxuPT09aSYmKGk9KGkrMSklQSksQi1vPGUpcmV0dXJuO2xldCBsPXMmJkItcztyZXR1cm4gbD9NYXRoLnJvdW5kKGYqMWUzL2wpOnZvaWQgMH19dmFyIFplPU1yO2Z1bmN0aW9uIFhlKEEsZSl7bGV0IHQ9MCxyPVplKDUwLDI1MCk7cmV0dXJuIG49PntsZXQgaT1uLmxvYWRlZCxvPW4ubGVuZ3RoQ29tcHV0YWJsZT9uLnRvdGFsOnZvaWQgMCxJPWktdCxjPXIoSSksQj1pPD1vO3Q9aTtsZXQgcz17bG9hZGVkOmksdG90YWw6byxwcm9ncmVzczpvP2kvbzp2b2lkIDAsYnl0ZXM6SSxyYXRlOmN8fHZvaWQgMCxlc3RpbWF0ZWQ6YyYmbyYmQj8oby1pKS9jOnZvaWQgMCxldmVudDpufTtzW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShzKX19dmFyIFdyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsJGU9V3ImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe2xldCBuPUEuZGF0YSxpPVUuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOkl9PUEsYztmdW5jdGlvbiBCKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShjKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpfWxldCBzO2lmKGcuaXNGb3JtRGF0YShuKSl7aWYoUi5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fFIuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKHM9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbdSwuLi5wXT1zP3Muc3BsaXQoIjsiKS5tYXAoUT0+US50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFt1fHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4ucF0uam9pbigiOyAiKSl9fWxldCBhPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCB1PUEuYXV0aC51c2VybmFtZXx8IiIscD1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO2kuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKHUrIjoiK3ApKX1sZXQgZj1uQShBLmJhc2VVUkwsQS51cmwpO2Eub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLGVBKGYsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYS50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBsKCl7aWYoIWEpcmV0dXJuO2xldCB1PVUuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGEmJmEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLFE9e2RhdGE6IW98fG89PT0idGV4dCJ8fG89PT0ianNvbiI/YS5yZXNwb25zZVRleHQ6YS5yZXNwb25zZSxzdGF0dXM6YS5zdGF0dXMsc3RhdHVzVGV4dDphLnN0YXR1c1RleHQsaGVhZGVyczp1LGNvbmZpZzpBLHJlcXVlc3Q6YX07WkEoZnVuY3Rpb24oUyl7dChTKSxCKCl9LGZ1bmN0aW9uKFMpe3IoUyksQigpfSxRKSxhPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBhP2Eub25sb2FkZW5kPWw6YS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshYXx8YS5yZWFkeVN0YXRlIT09NHx8YS5zdGF0dXM9PT0wJiYhKGEucmVzcG9uc2VVUkwmJmEucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KGwpfSxhLm9uYWJvcnQ9ZnVuY3Rpb24oKXthJiYocihuZXcgbSgiUmVxdWVzdCBhYm9ydGVkIixtLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGwpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBtKCJOZXR3b3JrIEVycm9yIixtLkVSUl9ORVRXT1JLLEEsYSkpLGE9bnVsbH0sYS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgcD1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsUT1BLnRyYW5zaXRpb25hbHx8UUE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYocD1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIobmV3IG0ocCxRLmNsYXJpZnlUaW1lb3V0RXJyb3I/bS5FVElNRURPVVQ6bS5FQ09OTkFCT1JURUQsQSxhKSksYT1udWxsfSxSLmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKEkmJmcuaXNGdW5jdGlvbihJKSYmKEk9SShBKSksSXx8SSE9PSExJiZWZShmKSkpe2xldCB1PUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJnplLnJlYWQoQS54c3JmQ29va2llTmFtZSk7dSYmaS5zZXQoQS54c3JmSGVhZGVyTmFtZSx1KX1uPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGEmJmcuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKHAsUSl7YS5zZXRSZXF1ZXN0SGVhZGVyKFEscCl9KSxnLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KGEud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLG8mJm8hPT0ianNvbiImJihhLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZhLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixYZShBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEudXBsb2FkJiZhLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsWGUoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGM9dT0+e2EmJihyKCF1fHx1LnR5cGU/bmV3IHgobnVsbCxBLGEpOnUpLGEuYWJvcnQoKSxhPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShjKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/YygpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixjKSkpO2xldCBDPUFlKGYpO2lmKEMmJlIucHJvdG9jb2xzLmluZGV4T2YoQyk9PT0tMSl7cihuZXcgbSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitDKyI6IixtLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWEuc2VuZChufHxudWxsKX0pfTt2YXIgZWU9e2h0dHA6RUEseGhyOiRlfTtnLmZvckVhY2goZWUsKEEsZSk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTplfSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOmV9KX19KTt2YXIgQXQ9QT0+YC0gJHtBfWAsWXI9QT0+Zy5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLGhBPXtnZXRBZGFwdGVyOkE9PntBPWcuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOmV9PUEsdCxyLG49e307Zm9yKGxldCBpPTA7aTxlO2krKyl7dD1BW2ldO2xldCBvO2lmKHI9dCwhWXIodCkmJihyPWVlWyhvPVN0cmluZyh0KSkudG9Mb3dlckNhc2UoKV0scj09PXZvaWQgMCkpdGhyb3cgbmV3IG0oYFVua25vd24gYWRhcHRlciAnJHtvfSdgKTtpZihyKWJyZWFrO25bb3x8IiMiK2ldPXJ9aWYoIXIpe2xldCBpPU9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW0ksY10pPT5gYWRhcHRlciAke0l9IGArKGM9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPWU/aS5sZW5ndGg+MT9gc2luY2UgOgpgK2kubWFwKEF0KS5qb2luKGAKYCk6IiAiK0F0KGlbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IG0oIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gcn0sYWRhcHRlcnM6ZWV9O2Z1bmN0aW9uIHRlKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyB4KG51bGwsQSl9ZnVuY3Rpb24geUEoQSl7cmV0dXJuIHRlKEEpLEEuaGVhZGVycz1VLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9ckEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGhBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHx2LmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIHRlKEEpLHIuZGF0YT1yQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyKSxyLmhlYWRlcnM9VS5mcm9tKHIuaGVhZGVycykscn0sZnVuY3Rpb24ocil7cmV0dXJuIGlBKHIpfHwodGUoQSksciYmci5yZXNwb25zZSYmKHIucmVzcG9uc2UuZGF0YT1yQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyLnJlc3BvbnNlKSxyLnJlc3BvbnNlLmhlYWRlcnM9VS5mcm9tKHIucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChyKX0pfXZhciBldD1BPT5BIGluc3RhbmNlb2YgVT97Li4uQX06QTtmdW5jdGlvbiBMKEEsZSl7ZT1lfHx7fTtsZXQgdD17fTtmdW5jdGlvbiByKEIscyxhKXtyZXR1cm4gZy5pc1BsYWluT2JqZWN0KEIpJiZnLmlzUGxhaW5PYmplY3Qocyk/Zy5tZXJnZS5jYWxsKHtjYXNlbGVzczphfSxCLHMpOmcuaXNQbGFpbk9iamVjdChzKT9nLm1lcmdlKHt9LHMpOmcuaXNBcnJheShzKT9zLnNsaWNlKCk6c31mdW5jdGlvbiBuKEIscyxhKXtpZihnLmlzVW5kZWZpbmVkKHMpKXtpZighZy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gcih2b2lkIDAsQixhKX1lbHNlIHJldHVybiByKEIscyxhKX1mdW5jdGlvbiBpKEIscyl7aWYoIWcuaXNVbmRlZmluZWQocykpcmV0dXJuIHIodm9pZCAwLHMpfWZ1bmN0aW9uIG8oQixzKXtpZihnLmlzVW5kZWZpbmVkKHMpKXtpZighZy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gcih2b2lkIDAsQil9ZWxzZSByZXR1cm4gcih2b2lkIDAscyl9ZnVuY3Rpb24gSShCLHMsYSl7aWYoYSBpbiBlKXJldHVybiByKEIscyk7aWYoYSBpbiBBKXJldHVybiByKHZvaWQgMCxCKX1sZXQgYz17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpJLGhlYWRlcnM6KEIscyk9Pm4oZXQoQiksZXQocyksITApfTtyZXR1cm4gZy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSxlKSksZnVuY3Rpb24ocyl7bGV0IGE9Y1tzXXx8bixmPWEoQVtzXSxlW3NdLHMpO2cuaXNVbmRlZmluZWQoZikmJmEhPT1JfHwodFtzXT1mKX0pLHR9dmFyIHdBPSIxLjYuOCI7dmFyIHJlPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e3JlW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciB0dD17fTtyZS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oaSxvKXtyZXR1cm4iW0F4aW9zIHYiK3dBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIraSsiJyIrbysocj8iLiAiK3I6IiIpfXJldHVybihpLG8sSSk9PntpZihlPT09ITEpdGhyb3cgbmV3IG0obihvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxtLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIXR0W29dJiYodHRbb109ITAsY29uc29sZS53YXJuKG4obywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UoaSxvLEkpOiEwfX07ZnVuY3Rpb24gcXIoQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgbSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsbS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksbj1yLmxlbmd0aDtmb3IoO24tLSA+MDspe2xldCBpPXJbbl0sbz1lW2ldO2lmKG8pe2xldCBJPUFbaV0sYz1JPT09dm9pZCAwfHxvKEksaSxBKTtpZihjIT09ITApdGhyb3cgbmV3IG0oIm9wdGlvbiAiK2krIiBtdXN0IGJlICIrYyxtLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IG0oIlVua25vd24gb3B0aW9uICIraSxtLkVSUl9CQURfT1BUSU9OKX19dmFyIERBPXthc3NlcnRPcHRpb25zOnFyLHZhbGlkYXRvcnM6cmV9O3ZhciBKPURBLnZhbGlkYXRvcnMsXz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IHZBLHJlc3BvbnNlOm5ldyB2QX19YXN5bmMgcmVxdWVzdChlLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG47RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3I7bGV0IGk9bi5zdGFjaz9uLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7ci5zdGFjaz9pJiYhU3RyaW5nKHIuc3RhY2spLmVuZHNXaXRoKGkucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYoci5zdGFjays9YApgK2kpOnIuc3RhY2s9aX10aHJvdyByfX1fcmVxdWVzdChlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LHQ9TCh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm4saGVhZGVyczppfT10O3IhPT12b2lkIDAmJkRBLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKX0sITEpLG4hPW51bGwmJihnLmlzRnVuY3Rpb24obik/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bn06REEuYXNzZXJ0T3B0aW9ucyhuLHtlbmNvZGU6Si5mdW5jdGlvbixzZXJpYWxpemU6Si5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1pJiZnLm1lcmdlKGkuY29tbW9uLGlbdC5tZXRob2RdKTtpJiZnLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sQz0+e2RlbGV0ZSBpW0NdfSksdC5oZWFkZXJzPVUuY29uY2F0KG8saSk7bGV0IEk9W10sYz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24odSl7dHlwZW9mIHUucnVuV2hlbj09ImZ1bmN0aW9uIiYmdS5ydW5XaGVuKHQpPT09ITF8fChjPWMmJnUuc3luY2hyb25vdXMsSS51bnNoaWZ0KHUuZnVsZmlsbGVkLHUucmVqZWN0ZWQpKX0pO2xldCBCPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24odSl7Qi5wdXNoKHUuZnVsZmlsbGVkLHUucmVqZWN0ZWQpfSk7bGV0IHMsYT0wLGY7aWYoIWMpe2xldCBDPVt5QS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEMudW5zaGlmdC5hcHBseShDLEkpLEMucHVzaC5hcHBseShDLEIpLGY9Qy5sZW5ndGgscz1Qcm9taXNlLnJlc29sdmUodCk7YTxmOylzPXMudGhlbihDW2ErK10sQ1thKytdKTtyZXR1cm4gc31mPUkubGVuZ3RoO2xldCBsPXQ7Zm9yKGE9MDthPGY7KXtsZXQgQz1JW2ErK10sdT1JW2ErK107dHJ5e2w9QyhsKX1jYXRjaChwKXt1LmNhbGwodGhpcyxwKTticmVha319dHJ5e3M9eUEuY2FsbCh0aGlzLGwpfWNhdGNoKEMpe3JldHVybiBQcm9taXNlLnJlamVjdChDKX1mb3IoYT0wLGY9Qi5sZW5ndGg7YTxmOylzPXMudGhlbihCW2ErK10sQlthKytdKTtyZXR1cm4gc31nZXRVcmkoZSl7ZT1MKHRoaXMuZGVmYXVsdHMsZSk7bGV0IHQ9bkEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gZUEodCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07Zy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtfLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoTChyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSk7Zy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gZnVuY3Rpb24oaSxvLEkpe3JldHVybiB0aGlzLnJlcXVlc3QoTChJfHx7fSx7bWV0aG9kOmUsaGVhZGVyczpyP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDppLGRhdGE6b30pKX19Xy5wcm90b3R5cGVbZV09dCgpLF8ucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKX0pO3ZhciBvQT1fO3ZhciBpZT1jbGFzcyBBe2NvbnN0cnVjdG9yKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSl7dD1pfSk7bGV0IHI9dGhpczt0aGlzLnByb21pc2UudGhlbihuPT57aWYoIXIuX2xpc3RlbmVycylyZXR1cm47bGV0IGk9ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO2ktLSA+MDspci5fbGlzdGVuZXJzW2ldKG4pO3IuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49bj0+e2xldCBpLG89bmV3IFByb21pc2UoST0+e3Iuc3Vic2NyaWJlKEkpLGk9SX0pLnRoZW4obik7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZShpKX0sb30sZShmdW5jdGlvbihpLG8sSSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgeChpLG8sSSksdChyLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfXVuc3Vic2NyaWJlKGUpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgZTtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24obil7ZT1ufSksY2FuY2VsOmV9fX0scnQ9aWU7ZnVuY3Rpb24gbmUoQSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uIG9lKEEpe3JldHVybiBnLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBhZT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoYWUpLmZvckVhY2goKFtBLGVdKT0+e2FlW2VdPUF9KTt2YXIgaXQ9YWU7ZnVuY3Rpb24gbnQoQSl7bGV0IGU9bmV3IG9BKEEpLHQ9WChvQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gZy5leHRlbmQodCxvQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLGcuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIG50KEwoQSxuKSl9LHR9dmFyIEQ9bnQodik7RC5BeGlvcz1vQTtELkNhbmNlbGVkRXJyb3I9eDtELkNhbmNlbFRva2VuPXJ0O0QuaXNDYW5jZWw9aUE7RC5WRVJTSU9OPXdBO0QudG9Gb3JtRGF0YT1QO0QuQXhpb3NFcnJvcj1tO0QuQ2FuY2VsPUQuQ2FuY2VsZWRFcnJvcjtELmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O0Quc3ByZWFkPW5lO0QuaXNBeGlvc0Vycm9yPW9lO0QubWVyZ2VDb25maWc9TDtELkF4aW9zSGVhZGVycz1VO0QuZm9ybVRvSlNPTj1BPT5tQShnLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO0QuZ2V0QWRhcHRlcj1oQS5nZXRBZGFwdGVyO0QuSHR0cFN0YXR1c0NvZGU9aXQ7RC5kZWZhdWx0PUQ7dmFyIHo9RDt2YXJ7QXhpb3M6WWEsQXhpb3NFcnJvcjpxYSxDYW5jZWxlZEVycm9yOkthLGlzQ2FuY2VsOnZhLENhbmNlbFRva2VuOmphLFZFUlNJT046X2EsYWxsOnphLENhbmNlbDpWYSxpc0F4aW9zRXJyb3I6WmEsc3ByZWFkOlhhLHRvRm9ybURhdGE6JGEsQXhpb3NIZWFkZXJzOkFzLEh0dHBTdGF0dXNDb2RlOmVzLGZvcm1Ub0pTT046dHMsZ2V0QWRhcHRlcjpycyxtZXJnZUNvbmZpZzppc309ejthc3luYyBmdW5jdGlvbiBLcihBLGUpe2xldCB0PUEscj1udWxsO2lmKHQ9PW51bGwpcj1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG49YXdhaXQgei5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChuLmRhdGEpO3I9bmV3IFdvcmtlcihpLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBhQT1LcjtmdW5jdGlvbiBvdChBKXtsZXQgZT1KQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W3hBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIHZyKEEsZSx0KXtsZXQgcjtpZihBIT1udWxsKXtsZXQgaT1BO3JldHVybiBpLndvcmtlclByb3h5IT09dm9pZCAwPyhyPWkud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOml9KTpvdChBKX1sZXQgbj1hd2FpdCBhQShlLHQpO3JldHVybiBvdChuKX12YXIgYXQ9dnI7YXN5bmMgZnVuY3Rpb24ganIoQSxlLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/cj1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/cj1BOnI9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBuPWAke3J9Lndhc21gLG89KGF3YWl0IHouZ2V0KG4se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om99KX12YXIgc3Q9anI7dmFyIEl0PWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBCdD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixndD1uZXcgVGV4dEVuY29kZXIsbHQ9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIF9yKEEsZSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1BLmZzX29wZW4oZSx0LmZsYWdzKSxpPUEuZnNfc3RhdChlKS5zaXplLG89bnVsbDtCdD9vPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihpKTpvPW5ldyBBcnJheUJ1ZmZlcihpKTtsZXQgST1uZXcgVWludDhBcnJheShvKTtyZXR1cm4gQS5mc19yZWFkKHIsSSwwLGksMCksQS5mc19jbG9zZShyKSxJfWZ1bmN0aW9uIHV0KEEsZSx0KXtsZXQgcj1udWxsO0J0P3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBuPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUsdCk7cmV0dXJuIG4uc2V0KGkpLG59ZnVuY3Rpb24gayhBLGUsdCxyKXtsZXQgbj0wO3JldHVybiBlIT09bnVsbCYmKG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG4pKSxufWZ1bmN0aW9uIE0oQSxlLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KGUpLG49QS5sZW5ndGhCeXRlc1VURjgocikrMSxpPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxuXSk7QS5zdHJpbmdUb1VURjgocixpLG4pfWZ1bmN0aW9uIE4oQSxlLHQscil7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksaT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxvPXV0KEEsbixpKTtyZXR1cm4gRyhyLG8uYnVmZmVyKX1mdW5jdGlvbiBTQShBLGUpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLHI9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24genIoQSxlLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKEIscyl7c3dpdGNoKEIudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBhPWd0LmVuY29kZShCLmRhdGEuZGF0YSksZj1rKEEsYSxzLDApLGw9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEsbCxzKTticmVha31jYXNlIEUuSnNvbkNvbXBhdGlibGU6e2xldCBhPWd0LmVuY29kZShKU09OLnN0cmluZ2lmeShCLmRhdGEpKSxmPWsoQSxhLHMsMCksbD17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxsLHMpO2JyZWFrfWNhc2UgRS5CaW5hcnlTdHJlYW06e2xldCBhPUIuZGF0YS5kYXRhLGY9ayhBLGEscywwKSxsPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLGwscyk7YnJlYWt9Y2FzZSBFLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShCLmRhdGEucGF0aCxCLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBFLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKEIuZGF0YS5wYXRoLEIuZGF0YS5kYXRhKTticmVha31jYXNlIEUuSW1hZ2U6e2xldCBhPUIuZGF0YSxmPWsoQSxhLmRhdGEscywwKSxsPWsoQSxhLmRpcmVjdGlvbixzLDEpLEM9dHlwZW9mIGEubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oYS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLHU9e2ltYWdlVHlwZTphLmltYWdlVHlwZSxuYW1lOmEubmFtZSxvcmlnaW46YS5vcmlnaW4sc3BhY2luZzphLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLHNpemU6YS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6Q307TShBLHUscyk7YnJlYWt9Y2FzZSBFLk1lc2g6e2xldCBhPUIuZGF0YSxmPWsoQSxhLnBvaW50cyxzLDApLGw9ayhBLGEuY2VsbHMscywxKSxDPWsoQSxhLnBvaW50RGF0YSxzLDIpLHU9ayhBLGEuY2VsbERhdGEscywzKSxwPXttZXNoVHlwZTphLm1lc2hUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6YS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLGNlbGxCdWZmZXJTaXplOmEuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Q31gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07TShBLHAscyk7YnJlYWt9Y2FzZSBFLlBvaW50U2V0OntsZXQgYT1CLmRhdGEsZj1rKEEsYS5wb2ludHMscywwKSxsPWsoQSxhLnBvaW50RGF0YSxzLDEpLEM9e3BvaW50U2V0VHlwZTphLnBvaW50U2V0VHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtsfWB9O00oQSxDLHMpO2JyZWFrfWNhc2UgRS5Qb2x5RGF0YTp7bGV0IGE9Qi5kYXRhLGY9ayhBLGEucG9pbnRzLHMsMCksbD1rKEEsYS52ZXJ0aWNlcyxzLDEpLEM9ayhBLGEubGluZXMscywyKSx1PWsoQSxhLnBvbHlnb25zLHMsMykscD1rKEEsYS50cmlhbmdsZVN0cmlwcyxzLDQpLFE9ayhBLGEucG9pbnREYXRhLHMsNSksZD1rKEEsYS5wb2ludERhdGEscyw2KSxTPXtwb2x5RGF0YVR5cGU6YS5wb2x5RGF0YVR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOmEudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLGxpbmVzQnVmZmVyU2l6ZTphLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YCxwb2x5Z29uc0J1ZmZlclNpemU6YS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmEudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtkfWB9O00oQSxTLHMpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBuPUEuc3RhY2tTYXZlKCksaT0wO3RyeXtpPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChCKXt0aHJvdyB0eXBlb2YgQj09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShCKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxCfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobil9bGV0IG89QS5nZXRNb2R1bGVTdGRvdXQoKSxJPUEuZ2V0TW9kdWxlU3RkZXJyKCksYz1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmaT09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihCLHMpe2xldCBhPW51bGw7c3dpdGNoKEIudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBsPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksdT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbCxDKTthPXtkYXRhOmx0LmRlY29kZSh1KX07YnJlYWt9Y2FzZSBFLkpzb25Db21wYXRpYmxlOntsZXQgbD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSxDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLHU9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGwsQyk7YT1KU09OLnBhcnNlKGx0LmRlY29kZSh1KSk7YnJlYWt9Y2FzZSBFLkJpbmFyeVN0cmVhbTp7bGV0IGw9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKTthPXtkYXRhOnV0KEEsbCxDKX07YnJlYWt9Y2FzZSBFLlRleHRGaWxlOnthPXtwYXRoOkIuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShCLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRS5CaW5hcnlGaWxlOnthPXtwYXRoOkIuZGF0YS5wYXRoLGRhdGE6X3IoQSxCLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRS5JbWFnZTp7bGV0IGw9U0EoQSxzKTtsLmRhdGE9TihBLHMsMCxsLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxsLmRpcmVjdGlvbj1OKEEscywxLFcuRmxvYXQ2NCksbC5tZXRhZGF0YT1uZXcgTWFwKGwubWV0YWRhdGEpLGE9bDticmVha31jYXNlIEUuTWVzaDp7bGV0IGw9U0EoQSxzKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9TihBLHMsMCxsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6bC5wb2ludHM9RyhsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZDZWxscz4wP2wuY2VsbHM9TihBLHMsMSxsLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpsLmNlbGxzPUcobC5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZQb2ludFBpeGVscz4wP2wucG9pbnREYXRhPU4oQSxzLDIsbC5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9RyhsLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPU4oQSxzLDMsbC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpsLmNlbGxEYXRhPUcobC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1sO2JyZWFrfWNhc2UgRS5Qb2ludFNldDp7bGV0IGw9U0EoQSxzKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9TihBLHMsMCxsLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmwucG9pbnRzPUcobC5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bC5wb2ludERhdGE9TihBLHMsMSxsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9RyhsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9bDticmVha31jYXNlIEUuUG9seURhdGE6e2xldCBsPVNBKEEscyk7bC5udW1iZXJPZlBvaW50cz4wP2wucG9pbnRzPU4oQSxzLDAsVy5GbG9hdDMyKTpsLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGwudmVydGljZXNCdWZmZXJTaXplPjA/bC52ZXJ0aWNlcz1OKEEscywxLGIuVUludDMyKTpsLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxsLmxpbmVzQnVmZmVyU2l6ZT4wP2wubGluZXM9TihBLHMsMixiLlVJbnQzMik6bC5saW5lcz1uZXcgVWludDMyQXJyYXksbC5wb2x5Z29uc0J1ZmZlclNpemU+MD9sLnBvbHlnb25zPU4oQSxzLDMsYi5VSW50MzIpOmwucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGwudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bC50cmlhbmdsZVN0cmlwcz1OKEEscyw0LGIuVUludDMyKTpsLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxsLm51bWJlck9mUG9pbnRQaXhlbHM+MD9sLnBvaW50RGF0YT1OKEEscyw1LGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpsLnBvaW50RGF0YT1HKGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPU4oQSxzLDYsbC5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bC5jZWxsRGF0YT1HKGwucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPWw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpCLnR5cGUsZGF0YTphfTtjLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6byxzdGRlcnI6SSxvdXRwdXRzOmN9fXZhciBjdD16cjt2YXIgVnI9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFpyKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IG49WHIoQVtyXSxlKTtuIT09bnVsbCYmdC5wdXNoKG4pfXJldHVybiB0fWZ1bmN0aW9uIFhyKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksVnImJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBDdD1acjtmdW5jdGlvbiAkcihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgZnQ9JHI7ZnVuY3Rpb24gQWkoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIEV0PUFpO2Z1bmN0aW9uIGVpKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBwdD1laTt2YXIgdGk7ZnVuY3Rpb24ga0EoKXtyZXR1cm4gdGl9dmFyIHJpO2Z1bmN0aW9uIFF0KCl7cmV0dXJuIHJpfXZhciBpaTtmdW5jdGlvbiBGQSgpe3JldHVybiBpaX12YXIgc2U9bmV3IE1hcDtmdW5jdGlvbiBuaSgpe2xldCBBPUZBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBtdCgpe2xldCBBPWtBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIGJBKCl7bGV0IEE9UXQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBvaShBLGUsdCl7bGV0IHI9QSxuPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksbj1yLmhyZWYpLHNlLmhhcyhuKSlyZXR1cm4gc2UuZ2V0KG4pO3tsZXQgaT1hd2FpdCBzdChBLGU/LnRvU3RyaW5nKCk/P210KCksdD8/YkEoKSk7cmV0dXJuIHNlLnNldChuLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIGFpKEEsZSx0LHIsbil7aWYoIWF3YWl0IEl0KCkpe2xldCBwPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChwKSxuZXcgRXJyb3IocCl9bGV0IGk9bj8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IHA9YXdhaXQgb2koQS50b1N0cmluZygpLG4/LnBpcGVsaW5lQmFzZVVybCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9iQSgpKTtyZXR1cm4gY3QocCxlLHQscil9bGV0IG89aSxJPW4/LnBpcGVsaW5lV29ya2VyVXJsPz9uaSgpLGM9dHlwZW9mIEkhPSJzdHJpbmciJiZ0eXBlb2YgST8uaHJlZjwidSI/SS5ocmVmOkkse3dvcmtlclByb3h5OkIsd29ya2VyOnN9PWF3YWl0IGF0KG8sYyxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9iQSgpKTtvPXM7bGV0IGE9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKHApe2lmKHAudHlwZT09PUUuQmluYXJ5U3RyZWFtKXtsZXQgUT1wLmRhdGEuZGF0YTthLnB1c2goUSl9ZWxzZSBpZihwLnR5cGU9PT1FLkJpbmFyeUZpbGUpe2xldCBRPXAuZGF0YS5kYXRhO2EucHVzaChRKX1lbHNlIGlmKHAudHlwZT09PUUuSW1hZ2Upe2xldCBRPXAuZGF0YTtRLmRhdGEhPT1udWxsJiZhLnB1c2goLi4uZnQoUSkpfWVsc2UgaWYocC50eXBlPT09RS5NZXNoKXtsZXQgUT1wLmRhdGE7YS5wdXNoKC4uLkV0KFEpKX1lbHNlIGlmKHAudHlwZT09PUUuUG9seURhdGEpe2xldCBRPXAuZGF0YTthLnB1c2goLi4ucHQoUSkpfX0pO2xldCBmPW4/LnBpcGVsaW5lQmFzZVVybD8/bXQoKSxsPXR5cGVvZiBmIT0ic3RyaW5nIiYmdHlwZW9mIGY/LmhyZWY8InUiP2YuaHJlZjpmLEM9ciE9bnVsbD9IQShyLEN0KGEsbj8ubm9Db3B5KSk6bnVsbCx1PWF3YWl0IEIucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLGwsZSx0LEMsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/YkEoKSk7cmV0dXJue3JldHVyblZhbHVlOnUucmV0dXJuVmFsdWUsc3Rkb3V0OnUuc3Rkb3V0LHN0ZGVycjp1LnN0ZGVycixvdXRwdXRzOnUub3V0cHV0cyx3ZWJXb3JrZXI6b319dmFyIHk9YWk7dmFyIHNpPW51bGw7ZnVuY3Rpb24gZHQoKXtyZXR1cm4gc2l9dmFyIEllLElpPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9kaWNvbUAke1JBfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gX3MoQSl7SWU9QX1mdW5jdGlvbiB3KCl7aWYodHlwZW9mIEllPCJ1IilyZXR1cm4gSWU7bGV0IEE9a0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6SWl9dmFyIGdlLGdpPW51bGw7ZnVuY3Rpb24gaHQoQSl7Z2U9QX1mdW5jdGlvbiBoKCl7aWYodHlwZW9mIGdlPCJ1IilyZXR1cm4gZ2U7bGV0IEE9RkEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6Z2l9dmFyIFY9bnVsbDthc3luYyBmdW5jdGlvbiB5dCgpe2xldCBBPWgoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO1Y9YXdhaXQgYUEoZSl9ZnVuY3Rpb24gZUkoQSl7Vj1BfWFzeW5jIGZ1bmN0aW9uIEYoKXtpZihWIT09bnVsbClyZXR1cm4gVi50ZXJtaW5hdGVkJiZhd2FpdCB5dCgpLFY7bGV0IEE9ZHQoKTtyZXR1cm4gQSE9PW51bGw/QTooYXdhaXQgeXQoKSxWKX1hc3luYyBmdW5jdGlvbiBsaShBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuSW1hZ2V9XSxuPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBTPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtuPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFMpfX1sZXQgaT1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUz1hd2FpdCBlLmFycmF5QnVmZmVyKCk7aT17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShTKX19bGV0IG89W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOm59LHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOml9XSxJPVtdLGM9bi5wYXRoO0kucHVzaChjKTtsZXQgQj1pLnBhdGg7SS5wdXNoKEIpLEkucHVzaCgiMCIpLEkucHVzaCgiMSIpLEkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmNvbG9yT3V0cHV0JiZ0LmNvbG9yT3V0cHV0JiZJLnB1c2goIi0tY29sb3Itb3V0cHV0IiksdC5jb25maWdGaWxlJiZJLnB1c2goIi0tY29uZmlnLWZpbGUiLHQuY29uZmlnRmlsZS50b1N0cmluZygpKSx0LmZyYW1lJiZJLnB1c2goIi0tZnJhbWUiLHQuZnJhbWUudG9TdHJpbmcoKSksdC5ub1ByZXNlbnRhdGlvblN0YXRlT3V0cHV0JiZ0Lm5vUHJlc2VudGF0aW9uU3RhdGVPdXRwdXQmJkkucHVzaCgiLS1uby1wcmVzZW50YXRpb24tc3RhdGUtb3V0cHV0IiksdC5ub0JpdG1hcE91dHB1dCYmdC5ub0JpdG1hcE91dHB1dCYmSS5wdXNoKCItLW5vLWJpdG1hcC1vdXRwdXQiKTtsZXQgZj0iYXBwbHktcHJlc2VudGF0aW9uLXN0YXRlLXRvLWltYWdlIixsPXQ/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBGKCkpO2xldHt3ZWJXb3JrZXI6QyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpwLG91dHB1dHM6UX09YXdhaXQgeShmLEkscixvLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6bCxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnAhPT0iIil0aHJvdyBuZXcgRXJyb3IocCk7cmV0dXJue3dlYldvcmtlcjpDLHByZXNlbnRhdGlvblN0YXRlT3V0U3RyZWFtOlFbMF0/LmRhdGEsb3V0cHV0SW1hZ2U6UVsxXT8uZGF0YX19dmFyIEJpPWxpO2FzeW5jIGZ1bmN0aW9uIHVpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuQmluYXJ5U3RyZWFtfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2kucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5yZWFkRmlsZU9ubHkmJmUucmVhZEZpbGVPbmx5JiZpLnB1c2goIi0tcmVhZC1maWxlLW9ubHkiKSxlLnJlYWREYXRhc2V0JiZlLnJlYWREYXRhc2V0JiZpLnB1c2goIi0tcmVhZC1kYXRhc2V0IiksZS5yZWFkWGZlckF1dG8mJmUucmVhZFhmZXJBdXRvJiZpLnB1c2goIi0tcmVhZC14ZmVyLWF1dG8iKSxlLnJlYWRYZmVyRGV0ZWN0JiZlLnJlYWRYZmVyRGV0ZWN0JiZpLnB1c2goIi0tcmVhZC14ZmVyLWRldGVjdCIpLGUucmVhZFhmZXJMaXR0bGUmJmUucmVhZFhmZXJMaXR0bGUmJmkucHVzaCgiLS1yZWFkLXhmZXItbGl0dGxlIiksZS5yZWFkWGZlckJpZyYmZS5yZWFkWGZlckJpZyYmaS5wdXNoKCItLXJlYWQteGZlci1iaWciKSxlLnJlYWRYZmVySW1wbGljaXQmJmUucmVhZFhmZXJJbXBsaWNpdCYmaS5wdXNoKCItLXJlYWQteGZlci1pbXBsaWNpdCIpLGUuYWNjZXB0T2RkTGVuZ3RoJiZlLmFjY2VwdE9kZExlbmd0aCYmaS5wdXNoKCItLWFjY2VwdC1vZGQtbGVuZ3RoIiksZS5hc3N1bWVFdmVuTGVuZ3RoJiZlLmFzc3VtZUV2ZW5MZW5ndGgmJmkucHVzaCgiLS1hc3N1bWUtZXZlbi1sZW5ndGgiKSxlLmVuYWJsZUNwMjQ2JiZlLmVuYWJsZUNwMjQ2JiZpLnB1c2goIi0tZW5hYmxlLWNwMjQ2IiksZS5kaXNhYmxlQ3AyNDYmJmUuZGlzYWJsZUNwMjQ2JiZpLnB1c2goIi0tZGlzYWJsZS1jcDI0NiIpLGUucmV0YWluVW4mJmUucmV0YWluVW4mJmkucHVzaCgiLS1yZXRhaW4tdW4iKSxlLmNvbnZlcnRVbiYmZS5jb252ZXJ0VW4mJmkucHVzaCgiLS1jb252ZXJ0LXVuIiksZS5lbmFibGVDb3JyZWN0aW9uJiZlLmVuYWJsZUNvcnJlY3Rpb24mJmkucHVzaCgiLS1lbmFibGUtY29ycmVjdGlvbiIpLGUuZGlzYWJsZUNvcnJlY3Rpb24mJmUuZGlzYWJsZUNvcnJlY3Rpb24mJmkucHVzaCgiLS1kaXNhYmxlLWNvcnJlY3Rpb24iKTtsZXQgYz0icmVhZC1kaWNvbS1lbmNhcHN1bGF0ZWQtcGRmIixCPWU/LndlYldvcmtlcjtCPT09dm9pZCAwJiYoQj1hd2FpdCBGKCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTphLHN0ZGVycjpmLG91dHB1dHM6bH09YXdhaXQgeShjLGksdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6Qixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoYSE9PTAmJmYhPT0iIil0aHJvdyBuZXcgRXJyb3IoZik7cmV0dXJue3dlYldvcmtlcjpzLHBkZkJpbmFyeU91dHB1dDoobFswXT8uZGF0YSkuZGF0YX19dmFyIGNpPXVpO2FzeW5jIGZ1bmN0aW9uIENpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuVGV4dFN0cmVhbX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IHU9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkodSl9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpZihpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUucmVhZEZpbGVPbmx5JiZlLnJlYWRGaWxlT25seSYmaS5wdXNoKCItLXJlYWQtZmlsZS1vbmx5IiksZS5yZWFkRGF0YXNldCYmZS5yZWFkRGF0YXNldCYmaS5wdXNoKCItLXJlYWQtZGF0YXNldCIpLGUucmVhZFhmZXJBdXRvJiZlLnJlYWRYZmVyQXV0byYmaS5wdXNoKCItLXJlYWQteGZlci1hdXRvIiksZS5yZWFkWGZlckRldGVjdCYmZS5yZWFkWGZlckRldGVjdCYmaS5wdXNoKCItLXJlYWQteGZlci1kZXRlY3QiKSxlLnJlYWRYZmVyTGl0dGxlJiZlLnJlYWRYZmVyTGl0dGxlJiZpLnB1c2goIi0tcmVhZC14ZmVyLWxpdHRsZSIpLGUucmVhZFhmZXJCaWcmJmUucmVhZFhmZXJCaWcmJmkucHVzaCgiLS1yZWFkLXhmZXItYmlnIiksZS5yZWFkWGZlckltcGxpY2l0JiZlLnJlYWRYZmVySW1wbGljaXQmJmkucHVzaCgiLS1yZWFkLXhmZXItaW1wbGljaXQiKSxlLnByb2Nlc3NpbmdEZXRhaWxzJiZlLnByb2Nlc3NpbmdEZXRhaWxzJiZpLnB1c2goIi0tcHJvY2Vzc2luZy1kZXRhaWxzIiksZS51bmtub3duUmVsYXRpb25zaGlwJiZlLnVua25vd25SZWxhdGlvbnNoaXAmJmkucHVzaCgiLS11bmtub3duLXJlbGF0aW9uc2hpcCIpLGUuaW52YWxpZEl0ZW1WYWx1ZSYmZS5pbnZhbGlkSXRlbVZhbHVlJiZpLnB1c2goIi0taW52YWxpZC1pdGVtLXZhbHVlIiksZS5pZ25vcmVDb25zdHJhaW50cyYmZS5pZ25vcmVDb25zdHJhaW50cyYmaS5wdXNoKCItLWlnbm9yZS1jb25zdHJhaW50cyIpLGUuaWdub3JlSXRlbUVycm9ycyYmZS5pZ25vcmVJdGVtRXJyb3JzJiZpLnB1c2goIi0taWdub3JlLWl0ZW0tZXJyb3JzIiksZS5za2lwSW52YWxpZEl0ZW1zJiZlLnNraXBJbnZhbGlkSXRlbXMmJmkucHVzaCgiLS1za2lwLWludmFsaWQtaXRlbXMiKSxlLmRpc2FibGVWckNoZWNrZXImJmUuZGlzYWJsZVZyQ2hlY2tlciYmaS5wdXNoKCItLWRpc2FibGUtdnItY2hlY2tlciIpLGUuY2hhcnNldFJlcXVpcmUmJmUuY2hhcnNldFJlcXVpcmUmJmkucHVzaCgiLS1jaGFyc2V0LXJlcXVpcmUiKSxlLmNoYXJzZXRBc3N1bWUmJmkucHVzaCgiLS1jaGFyc2V0LWFzc3VtZSIsZS5jaGFyc2V0QXNzdW1lLnRvU3RyaW5nKCkpLGUuY2hhcnNldENoZWNrQWxsJiZlLmNoYXJzZXRDaGVja0FsbCYmaS5wdXNoKCItLWNoYXJzZXQtY2hlY2stYWxsIiksZS5jb252ZXJ0VG9VdGY4JiZlLmNvbnZlcnRUb1V0ZjgmJmkucHVzaCgiLS1jb252ZXJ0LXRvLXV0ZjgiKSxlLnVybFByZWZpeCYmaS5wdXNoKCItLXVybC1wcmVmaXgiLGUudXJsUHJlZml4LnRvU3RyaW5nKCkpLGUuaHRtbDMyJiZlLmh0bWwzMiYmaS5wdXNoKCItLWh0bWwtMzIiKSxlLmh0bWw0MCYmZS5odG1sNDAmJmkucHVzaCgiLS1odG1sLTQwIiksZS54aHRtbDExJiZlLnhodG1sMTEmJmkucHVzaCgiLS14aHRtbC0xMSIpLGUuYWRkRG9jdW1lbnRUeXBlJiZlLmFkZERvY3VtZW50VHlwZSYmaS5wdXNoKCItLWFkZC1kb2N1bWVudC10eXBlIiksZS5jc3NSZWZlcmVuY2Upe2xldCB1PW4ubGVuZ3RoLnRvU3RyaW5nKCk7bi5wdXNoKHt0eXBlOkUuVGV4dFN0cmVhbSxkYXRhOntkYXRhOmUuY3NzUmVmZXJlbmNlfX0pLGkucHVzaCgiLS1jc3MtcmVmZXJlbmNlIix1KX1pZihlLmNzc0ZpbGUpe2xldCB1PWUuY3NzRmlsZSxwPXU7aWYodSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IHUuYXJyYXlCdWZmZXIoKTtwPXtwYXRoOnUubmFtZSxkYXRhOm5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkKX19aS5wdXNoKCItLWNzcy1maWxlIiksbi5wdXNoKHt0eXBlOkUuVGV4dEZpbGUsZGF0YTpwfSk7bGV0IFE9dSBpbnN0YW5jZW9mIEZpbGU/dS5uYW1lOnUucGF0aDtpLnB1c2goUSl9ZS5leHBhbmRJbmxpbmUmJmUuZXhwYW5kSW5saW5lJiZpLnB1c2goIi0tZXhwYW5kLWlubGluZSIpLGUubmV2ZXJFeHBhbmRJbmxpbmUmJmUubmV2ZXJFeHBhbmRJbmxpbmUmJmkucHVzaCgiLS1uZXZlci1leHBhbmQtaW5saW5lIiksZS5hbHdheXNFeHBhbmRJbmxpbmUmJmUuYWx3YXlzRXhwYW5kSW5saW5lJiZpLnB1c2goIi0tYWx3YXlzLWV4cGFuZC1pbmxpbmUiKSxlLnJlbmRlckZ1bGxEYXRhJiZlLnJlbmRlckZ1bGxEYXRhJiZpLnB1c2goIi0tcmVuZGVyLWZ1bGwtZGF0YSIpLGUuc2VjdGlvblRpdGxlSW5saW5lJiZlLnNlY3Rpb25UaXRsZUlubGluZSYmaS5wdXNoKCItLXNlY3Rpb24tdGl0bGUtaW5saW5lIiksZS5kb2N1bWVudFR5cGVUaXRsZSYmZS5kb2N1bWVudFR5cGVUaXRsZSYmaS5wdXNoKCItLWRvY3VtZW50LXR5cGUtdGl0bGUiKSxlLnBhdGllbnRJbmZvVGl0bGUmJmUucGF0aWVudEluZm9UaXRsZSYmaS5wdXNoKCItLXBhdGllbnQtaW5mby10aXRsZSIpLGUubm9Eb2N1bWVudEhlYWRlciYmZS5ub0RvY3VtZW50SGVhZGVyJiZpLnB1c2goIi0tbm8tZG9jdW1lbnQtaGVhZGVyIiksZS5yZW5kZXJJbmxpbmVDb2RlcyYmZS5yZW5kZXJJbmxpbmVDb2RlcyYmaS5wdXNoKCItLXJlbmRlci1pbmxpbmUtY29kZXMiKSxlLmNvbmNlcHROYW1lQ29kZXMmJmUuY29uY2VwdE5hbWVDb2RlcyYmaS5wdXNoKCItLWNvbmNlcHQtbmFtZS1jb2RlcyIpLGUubnVtZXJpY1VuaXRDb2RlcyYmZS5udW1lcmljVW5pdENvZGVzJiZpLnB1c2goIi0tbnVtZXJpYy11bml0LWNvZGVzIiksZS5jb2RlVmFsdWVVbml0JiZlLmNvZGVWYWx1ZVVuaXQmJmkucHVzaCgiLS1jb2RlLXZhbHVlLXVuaXQiKSxlLmNvZGVNZWFuaW5nVW5pdCYmZS5jb2RlTWVhbmluZ1VuaXQmJmkucHVzaCgiLS1jb2RlLW1lYW5pbmctdW5pdCIpLGUucmVuZGVyQWxsQ29kZXMmJmUucmVuZGVyQWxsQ29kZXMmJmkucHVzaCgiLS1yZW5kZXItYWxsLWNvZGVzIiksZS5jb2RlRGV0YWlsc1Rvb2x0aXAmJmUuY29kZURldGFpbHNUb29sdGlwJiZpLnB1c2goIi0tY29kZS1kZXRhaWxzLXRvb2x0aXAiKTtsZXQgYz0ic3RydWN0dXJlZC1yZXBvcnQtdG8taHRtbCIsQj1lPy53ZWJXb3JrZXI7Qj09PXZvaWQgMCYmKEI9YXdhaXQgRigpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6YSxzdGRlcnI6ZixvdXRwdXRzOmx9PWF3YWl0IHkoYyxpLHQsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOkIsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGEhPT0wJiZmIT09IiIpdGhyb3cgbmV3IEVycm9yKGYpO3JldHVybnt3ZWJXb3JrZXI6cyxvdXRwdXRUZXh0OihsWzBdPy5kYXRhKS5kYXRhfX12YXIgZmk9Q2k7YXN5bmMgZnVuY3Rpb24gRWkoQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5UZXh0U3RyZWFtfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2kucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS51bmtub3duUmVsYXRpb25zaGlwJiZlLnVua25vd25SZWxhdGlvbnNoaXAmJmkucHVzaCgiLS11bmtub3duLXJlbGF0aW9uc2hpcCIpLGUuaW52YWxpZEl0ZW1WYWx1ZSYmZS5pbnZhbGlkSXRlbVZhbHVlJiZpLnB1c2goIi0taW52YWxpZC1pdGVtLXZhbHVlIiksZS5pZ25vcmVDb25zdHJhaW50cyYmZS5pZ25vcmVDb25zdHJhaW50cyYmaS5wdXNoKCItLWlnbm9yZS1jb25zdHJhaW50cyIpLGUuaWdub3JlSXRlbUVycm9ycyYmZS5pZ25vcmVJdGVtRXJyb3JzJiZpLnB1c2goIi0taWdub3JlLWl0ZW0tZXJyb3JzIiksZS5za2lwSW52YWxpZEl0ZW1zJiZlLnNraXBJbnZhbGlkSXRlbXMmJmkucHVzaCgiLS1za2lwLWludmFsaWQtaXRlbXMiKSxlLm5vRG9jdW1lbnRIZWFkZXImJmUubm9Eb2N1bWVudEhlYWRlciYmaS5wdXNoKCItLW5vLWRvY3VtZW50LWhlYWRlciIpLGUubnVtYmVyTmVzdGVkSXRlbXMmJmUubnVtYmVyTmVzdGVkSXRlbXMmJmkucHVzaCgiLS1udW1iZXItbmVzdGVkLWl0ZW1zIiksZS5zaG9ydGVuTG9uZ1ZhbHVlcyYmZS5zaG9ydGVuTG9uZ1ZhbHVlcyYmaS5wdXNoKCItLXNob3J0ZW4tbG9uZy12YWx1ZXMiKSxlLnByaW50SW5zdGFuY2VVaWQmJmUucHJpbnRJbnN0YW5jZVVpZCYmaS5wdXNoKCItLXByaW50LWluc3RhbmNlLXVpZCIpLGUucHJpbnRTb3BjbGFzc1Nob3J0JiZlLnByaW50U29wY2xhc3NTaG9ydCYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLXNob3J0IiksZS5wcmludFNvcGNsYXNzTG9uZyYmZS5wcmludFNvcGNsYXNzTG9uZyYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLWxvbmciKSxlLnByaW50U29wY2xhc3NVaWQmJmUucHJpbnRTb3BjbGFzc1VpZCYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLXVpZCIpLGUucHJpbnRBbGxDb2RlcyYmZS5wcmludEFsbENvZGVzJiZpLnB1c2goIi0tcHJpbnQtYWxsLWNvZGVzIiksZS5wcmludEludmFsaWRDb2RlcyYmZS5wcmludEludmFsaWRDb2RlcyYmaS5wdXNoKCItLXByaW50LWludmFsaWQtY29kZXMiKSxlLnByaW50VGVtcGxhdGVJZCYmZS5wcmludFRlbXBsYXRlSWQmJmkucHVzaCgiLS1wcmludC10ZW1wbGF0ZS1pZCIpLGUuaW5kaWNhdGVFbmhhbmNlZCYmZS5pbmRpY2F0ZUVuaGFuY2VkJiZpLnB1c2goIi0taW5kaWNhdGUtZW5oYW5jZWQiKSxlLnByaW50Q29sb3ImJmUucHJpbnRDb2xvciYmaS5wdXNoKCItLXByaW50LWNvbG9yIik7bGV0IGM9InN0cnVjdHVyZWQtcmVwb3J0LXRvLXRleHQiLEI9ZT8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOmEsc3RkZXJyOmYsb3V0cHV0czpsfT1hd2FpdCB5KGMsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpCLG5vQ29weTplPy5ub0NvcHl9KTtpZihhIT09MCYmZiE9PSIiKXRocm93IG5ldyBFcnJvcihmKTtyZXR1cm57d2ViV29ya2VyOnMsb3V0cHV0VGV4dDoobFswXT8uZGF0YSkuZGF0YX19dmFyIHBpPUVpO2FzeW5jIGZ1bmN0aW9uIFFpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBDPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEMpfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aWYoaS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgZS50YWdzVG9SZWFkPCJ1Iil7bGV0IEM9bi5sZW5ndGgudG9TdHJpbmcoKTtuLnB1c2goe3R5cGU6RS5Kc29uQ29tcGF0aWJsZSxkYXRhOmUudGFnc1RvUmVhZH0pLGkucHVzaCgiLS10YWdzLXRvLXJlYWQiLEMpfWxldCBjPSJyZWFkLWRpY29tLXRhZ3MiLHt3ZWJXb3JrZXI6QixyZXR1cm5WYWx1ZTpzLHN0ZGVycjphLG91dHB1dHM6Zn09YXdhaXQgeShjLGksdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6ZT8ud2ViV29ya2VyPz9udWxsfSk7aWYocyE9PTApdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6Qix0YWdzOmZbMF0uZGF0YX19dmFyIG1pPVFpO2FzeW5jIGZ1bmN0aW9uIGRpKEEsZT0hMSx0PXt9KXtsZXQgcj1be3R5cGU6RS5JbWFnZX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZX1dLG49W10saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksaS5wdXNoKCItLWlucHV0LWltYWdlcyIpLEEuZm9yRWFjaChDPT57bi5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOkN9KSxpLnB1c2goQy5wYXRoKX0pLHR5cGVvZiBlPCJ1IiYmZSYmaS5wdXNoKCItLXNpbmdsZS1zb3J0ZWQtc2VyaWVzIik7bGV0IGM9InJlYWQtaW1hZ2UtZGljb20tZmlsZS1zZXJpZXMiLHt3ZWJXb3JrZXI6QixyZXR1cm5WYWx1ZTpzLHN0ZGVycjphLG91dHB1dHM6Zn09YXdhaXQgeShjLGkscixuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6dD8ud2ViV29ya2VyPz9udWxsfSk7aWYocyE9PTApdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6QixvdXRwdXRJbWFnZTpmWzBdLmRhdGEsc29ydGVkRmlsZW5hbWVzOmZbMV0uZGF0YX19dmFyIGxlPWRpO3ZhciBoaT10eXBlb2YgZ2xvYmFsVGhpcy5uYXZpZ2F0b3I/LmhhcmR3YXJlQ29uY3VycmVuY3k9PSJudW1iZXIiP2dsb2JhbFRoaXMubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k6NCx3dD04O2FzeW5jIGZ1bmN0aW9uIHlpKEE9e2lucHV0SW1hZ2VzOltdfSl7bGV0IGU9QS53ZWJXb3JrZXJQb29sPz9udWxsO2U9PT1udWxsJiYoZT1uZXcgT0EoaGksbGUpKTtsZXQgdD1bXTtpZihBLmlucHV0SW1hZ2VzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignImlucHV0LWltYWdlcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtpZihhd2FpdCBQcm9taXNlLmFsbChBLmlucHV0SW1hZ2VzLm1hcChhc3luYyByPT57bGV0IG49cjtpZihyIGluc3RhbmNlb2YgRmlsZSl7bGV0IGk9YXdhaXQgci5hcnJheUJ1ZmZlcigpO249e3BhdGg6ci5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoaSl9fXQucHVzaChuKX0pKSxBLnNpbmdsZVNvcnRlZFNlcmllcyl7bGV0IHI9W107Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDtjKz13dCl7bGV0IEI9dC5zbGljZShjLGMrd3QpO3IucHVzaChbQixBLnNpbmdsZVNvcnRlZFNlcmllcyx7fV0pfWxldCBuPWF3YWl0IGUucnVuVGFza3MocikucHJvbWlzZSxpPW4ubWFwKGM9PmMub3V0cHV0SW1hZ2UpLG89bi5yZWR1Y2UoKGMsQik9PmMuY29uY2F0KEIuc29ydGVkRmlsZW5hbWVzKSxbXSk7cmV0dXJue291dHB1dEltYWdlOlRBKGkpLHdlYldvcmtlclBvb2w6ZSxzb3J0ZWRGaWxlbmFtZXM6b319ZWxzZXtsZXQgcj1bW3QsQS5zaW5nbGVTb3J0ZWRTZXJpZXMse31dXSxuPWF3YWl0IGUucnVuVGFza3MocikucHJvbWlzZTtyZXR1cm57b3V0cHV0SW1hZ2U6blswXS5vdXRwdXRJbWFnZSx3ZWJXb3JrZXJQb29sOmUsc29ydGVkRmlsZW5hbWVzOm5bMF0uc29ydGVkRmlsZW5hbWVzfX19dmFyIHdpPXlpO2FzeW5jIGZ1bmN0aW9uIERpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSW1hZ2V9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGV9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBwPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KHApfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKTtsZXQgQj0icmVhZC1zZWdtZW50YXRpb24iLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOmwsb3V0cHV0czpDfT1hd2FpdCB5KEIsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihmIT09MCYmbCE9PSIiKXRocm93IG5ldyBFcnJvcihsKTtyZXR1cm57d2ViV29ya2VyOmEsc2VnSW1hZ2U6Q1swXT8uZGF0YSxtZXRhSW5mbzpDWzFdPy5kYXRhfX12YXIgU2k9RGk7YXN5bmMgZnVuY3Rpb24ga2koQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5JbWFnZX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IHA9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkocCl9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUubWVyZ2VTZWdtZW50cyYmZS5tZXJnZVNlZ21lbnRzJiZpLnB1c2goIi0tbWVyZ2Utc2VnbWVudHMiKTtsZXQgQj0icmVhZC1vdmVybGFwcGluZy1zZWdtZW50YXRpb24iLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOmwsb3V0cHV0czpDfT1hd2FpdCB5KEIsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihmIT09MCYmbCE9PSIiKXRocm93IG5ldyBFcnJvcihsKTtyZXR1cm57d2ViV29ya2VyOmEsc2VnSW1hZ2U6Q1swXT8uZGF0YSxtZXRhSW5mbzpDWzFdPy5kYXRhfX12YXIgRmk9a2k7YXN5bmMgZnVuY3Rpb24gYmkoQSxlLHQscj17cmVmRGljb21TZXJpZXM6W119KXtsZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLGk9W3t0eXBlOkUuSW1hZ2UsZGF0YTpBfSx7dHlwZTpFLkpzb25Db21wYXRpYmxlLGRhdGE6ZX1dLG89W107by5wdXNoKCIwIiksby5wdXNoKCIxIik7bGV0IEI9dDtpZihvLnB1c2goQiksby5wdXNoKCItLW1lbW9yeS1pbyIpLHIucmVmRGljb21TZXJpZXMpe2lmKHIucmVmRGljb21TZXJpZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcicmVmLWRpY29tLXNlcmllcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtvLnB1c2goIi0tcmVmLWRpY29tLXNlcmllcyIpLGF3YWl0IFByb21pc2UuYWxsKHIucmVmRGljb21TZXJpZXMubWFwKGFzeW5jIFE9PntsZXQgZD1RO2lmKFEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgWj1hd2FpdCBRLmFycmF5QnVmZmVyKCk7ZD17cGF0aDpRLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShaKX19aS5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOmR9KTtsZXQgUz1RIGluc3RhbmNlb2YgRmlsZT9RLm5hbWU6ZC5wYXRoO28ucHVzaChTKX0pKX1yLnNraXBFbXB0eVNsaWNlcyYmci5za2lwRW1wdHlTbGljZXMmJm8ucHVzaCgiLS1za2lwLWVtcHR5LXNsaWNlcyIpLHIudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmci51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZvLnB1c2goIi0tdXNlLWxhYmVsaWQtYXMtc2VnbWVudG51bWJlciIpO2xldCBzPSJ3cml0ZS1zZWdtZW50YXRpb24iLGE9cj8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjpmLHJldHVyblZhbHVlOmwsc3RkZXJyOkMsb3V0cHV0czp1fT1hd2FpdCB5KHMsbyxuLGkse3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjphLG5vQ29weTpyPy5ub0NvcHl9KTtpZihsIT09MCYmQyE9PSIiKXRocm93IG5ldyBFcnJvcihDKTtyZXR1cm57d2ViV29ya2VyOmYsb3V0cHV0RGljb21GaWxlOnVbMF0/LmRhdGF9fXZhciBSaT1iaTthc3luYyBmdW5jdGlvbiBVaShBLGUsdCxyPXtyZWZEaWNvbVNlcmllczpbXX0pe2xldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0saT1be3R5cGU6RS5JbWFnZSxkYXRhOkF9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGUsZGF0YTplfV0sbz1bXTtvLnB1c2goIjAiKSxvLnB1c2goIjEiKTtsZXQgQj10O2lmKG8ucHVzaChCKSxvLnB1c2goIi0tbWVtb3J5LWlvIiksci5yZWZEaWNvbVNlcmllcyl7aWYoci5yZWZEaWNvbVNlcmllcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJyZWYtZGljb20tc2VyaWVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO28ucHVzaCgiLS1yZWYtZGljb20tc2VyaWVzIiksYXdhaXQgUHJvbWlzZS5hbGwoci5yZWZEaWNvbVNlcmllcy5tYXAoYXN5bmMgUT0+e2xldCBkPVE7aWYoUSBpbnN0YW5jZW9mIEZpbGUpe2xldCBaPWF3YWl0IFEuYXJyYXlCdWZmZXIoKTtkPXtwYXRoOlEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFopfX1pLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6ZH0pO2xldCBTPVEgaW5zdGFuY2VvZiBGaWxlP1EubmFtZTpkLnBhdGg7by5wdXNoKFMpfSkpfXIuc2tpcEVtcHR5U2xpY2VzJiZyLnNraXBFbXB0eVNsaWNlcyYmby5wdXNoKCItLXNraXAtZW1wdHktc2xpY2VzIiksci51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZyLnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJm8ucHVzaCgiLS11c2UtbGFiZWxpZC1hcy1zZWdtZW50bnVtYmVyIik7bGV0IHM9IndyaXRlLW92ZXJsYXBwaW5nLXNlZ21lbnRhdGlvbiIsYT1yPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgRigpKTtsZXR7d2ViV29ya2VyOmYscmV0dXJuVmFsdWU6bCxzdGRlcnI6QyxvdXRwdXRzOnV9PWF3YWl0IHkocyxvLG4saSx7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOmEsbm9Db3B5OnI/Lm5vQ29weX0pO2lmKGwhPT0wJiZDIT09IiIpdGhyb3cgbmV3IEVycm9yKEMpO3JldHVybnt3ZWJXb3JrZXI6ZixvdXRwdXREaWNvbUZpbGU6dVswXT8uZGF0YX19dmFyIE5pPVVpO2FzeW5jIGZ1bmN0aW9uIFRpKEEsZSx0PXtyZWZEaWNvbVNlcmllczpbXSxzZWdJbWFnZXM6W119KXtsZXQgcj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG49W3t0eXBlOkUuSnNvbkNvbXBhdGlibGUsZGF0YTpBfV0saT1bXTtpLnB1c2goIjAiKTtsZXQgST1lO2lmKGkucHVzaChJKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5yZWZEaWNvbVNlcmllcyl7aWYodC5yZWZEaWNvbVNlcmllcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJyZWYtZGljb20tc2VyaWVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO2kucHVzaCgiLS1yZWYtZGljb20tc2VyaWVzIiksYXdhaXQgUHJvbWlzZS5hbGwodC5yZWZEaWNvbVNlcmllcy5tYXAoYXN5bmMgdT0+e2xldCBwPXU7aWYodSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IHUuYXJyYXlCdWZmZXIoKTtwPXtwYXRoOnUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1uLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cH0pO2xldCBRPXUgaW5zdGFuY2VvZiBGaWxlP3UubmFtZTpwLnBhdGg7aS5wdXNoKFEpfSkpfWlmKHQuc2VnSW1hZ2VzKXtpZih0LnNlZ0ltYWdlcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzZWctaW1hZ2VzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO2kucHVzaCgiLS1zZWctaW1hZ2VzIiksYXdhaXQgUHJvbWlzZS5hbGwodC5zZWdJbWFnZXMubWFwKGFzeW5jIHU9PntsZXQgcD11O2lmKHUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCB1LmFycmF5QnVmZmVyKCk7cD17cGF0aDp1Lm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bi5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnB9KTtsZXQgUT11IGluc3RhbmNlb2YgRmlsZT91Lm5hbWU6cC5wYXRoO2kucHVzaChRKX0pKX10LnNraXBFbXB0eVNsaWNlcyYmdC5za2lwRW1wdHlTbGljZXMmJmkucHVzaCgiLS1za2lwLWVtcHR5LXNsaWNlcyIpLHQudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmdC51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZpLnB1c2goIi0tdXNlLWxhYmVsaWQtYXMtc2VnbWVudG51bWJlciIpO2xldCBjPSJ3cml0ZS1tdWx0aS1zZWdtZW50YXRpb24iLEI9dD8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOmEsc3RkZXJyOmYsb3V0cHV0czpsfT1hd2FpdCB5KGMsaSxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpCLG5vQ29weTp0Py5ub0NvcHl9KTtpZihhIT09MCYmZiE9PSIiKXRocm93IG5ldyBFcnJvcihmKTtyZXR1cm57d2ViV29ya2VyOnMsb3V0cHV0RGljb21GaWxlOmxbMF0/LmRhdGF9fXZhciBHaT1UaTt2YXIgRHQ9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIElJPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZUk9KEEsdCk9Pntmb3IodmFyIEkgaW4gdClJSShBLEkse2dldDp0W0ldLGVudW1lcmFibGU6ITB9KX07dmFyIHZBPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGdJPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHJJPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxwQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLCRBPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLG9JPXtjYW5IYW5kbGU6QT0+JEEoQSkmJkFbdkFdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6dCxwb3J0MjpJfT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGlBKEEsdCksW0ksW0ldXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxuSShBKX19LGlJPXtjYW5IYW5kbGU6QT0+JEEoQSkmJmVBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IHQ7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj90PXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06dD17aXNFcnJvcjohMSx2YWx1ZTpBfSxbdCxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxBdD1uZXcgTWFwKFtbInByb3h5IixvSV0sWyJ0aHJvdyIsaUldXSk7ZnVuY3Rpb24gQ0koQSx0KXtmb3IobGV0IEkgb2YgQSlpZih0PT09SXx8ST09PSIqInx8SSBpbnN0YW5jZW9mIFJlZ0V4cCYmSS50ZXN0KHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGlBKEEsdD1nbG9iYWxUaGlzLEk9WyIqIl0pe3QuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gZShnKXtpZighZ3x8IWcuZGF0YSlyZXR1cm47aWYoIUNJKEksZy5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luIFwnJHtnLm9yaWdpbn1cJyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6cix0eXBlOm8scGF0aDpufT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxnLmRhdGEpLGE9KGcuZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoYiksUTt0cnl7bGV0IEI9bi5zbGljZSgwLC0xKS5yZWR1Y2UoKGYscyk9PmZbc10sQSksaT1uLnJlZHVjZSgoZixzKT0+ZltzXSxBKTtzd2l0Y2gobyl7Y2FzZSJHRVQiOlE9aTticmVhaztjYXNlIlNFVCI6QltuLnNsaWNlKC0xKVswXV09YihnLmRhdGEudmFsdWUpLFE9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6UT1pLmFwcGx5KEIsYSk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgaSguLi5hKTtRPWFJKGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpzfT1uZXcgTWVzc2FnZUNoYW5uZWw7aUEoQSxzKSxRPUZBKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOlE9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChCKXtRPXt2YWx1ZTpCLFtlQV06MH19UHJvbWlzZS5yZXNvbHZlKFEpLmNhdGNoKEI9Pih7dmFsdWU6QixbZUFdOjB9KSkudGhlbihCPT57bGV0W2ksZl09b0EoQik7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse2lkOnJ9KSxmKSxvPT09IlJFTEVBU0UiJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixlKSx0dCh0KSxwQSBpbiBBJiZ0eXBlb2YgQVtwQV09PSJmdW5jdGlvbiImJkFbcEFdKCkpfSkuY2F0Y2goQj0+e2xldFtpLGZdPW9BKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbZUFdOjB9KTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpfSl9KSx0LnN0YXJ0JiZ0LnN0YXJ0KCl9ZnVuY3Rpb24gQkkoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gdHQoQSl7QkkoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBuSShBLHQpe3JldHVybiBTQShBLFtdLHQpfWZ1bmN0aW9uIElBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBJdChBKXtyZXR1cm4gcShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9Pnt0dChBKX0pfXZhciBnQT1uZXcgV2Vha01hcCxyQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgdD0oZ0EuZ2V0KEEpfHwwKS0xO2dBLnNldChBLHQpLHQ9PT0wJiZJdChBKX0pO2Z1bmN0aW9uIHNJKEEsdCl7bGV0IEk9KGdBLmdldCh0KXx8MCkrMTtnQS5zZXQodCxJKSxyQSYmckEucmVnaXN0ZXIoQSx0LEEpfWZ1bmN0aW9uIFFJKEEpe3JBJiZyQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIFNBKEEsdD1bXSxJPWZ1bmN0aW9uKCl7fSl7bGV0IGU9ITEsZz1uZXcgUHJveHkoSSx7Z2V0KHIsbyl7aWYoSUEoZSksbz09PXJJKXJldHVybigpPT57UUkoZyksSXQoQSksZT0hMH07aWYobz09PSJ0aGVuIil7aWYodC5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5nfTtsZXQgbj1xKEEse3R5cGU6IkdFVCIscGF0aDp0Lm1hcChhPT5hLnRvU3RyaW5nKCkpfSkudGhlbihiKTtyZXR1cm4gbi50aGVuLmJpbmQobil9cmV0dXJuIFNBKEEsWy4uLnQsb10pfSxzZXQocixvLG4pe0lBKGUpO2xldFthLFFdPW9BKG4pO3JldHVybiBxKEEse3R5cGU6IlNFVCIscGF0aDpbLi4udCxvXS5tYXAoQj0+Qi50b1N0cmluZygpKSx2YWx1ZTphfSxRKS50aGVuKGIpfSxhcHBseShyLG8sbil7SUEoZSk7bGV0IGE9dFt0Lmxlbmd0aC0xXTtpZihhPT09Z0kpcmV0dXJuIHEoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihiKTtpZihhPT09ImJpbmQiKXJldHVybiBTQShBLHQuc2xpY2UoMCwtMSkpO2xldFtRLEJdPV9BKG4pO3JldHVybiBxKEEse3R5cGU6IkFQUExZIixwYXRoOnQubWFwKGk9PmkudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OlF9LEIpLnRoZW4oYil9LGNvbnN0cnVjdChyLG8pe0lBKGUpO2xldFtuLGFdPV9BKG8pO3JldHVybiBxKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDp0Lm1hcChRPT5RLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpufSxhKS50aGVuKGIpfX0pO3JldHVybiBzSShnLEEpLGd9ZnVuY3Rpb24gRUkoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gX0EoQSl7bGV0IHQ9QS5tYXAob0EpO3JldHVyblt0Lm1hcChJPT5JWzBdKSxFSSh0Lm1hcChJPT5JWzFdKSldfXZhciBldD1uZXcgV2Vha01hcDtmdW5jdGlvbiBGQShBLHQpe3JldHVybiBldC5zZXQoQSx0KSxBfWZ1bmN0aW9uIGFJKEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1t2QV06ITB9KX1mdW5jdGlvbiBvQShBKXtmb3IobGV0W3QsSV1vZiBBdClpZihJLmNhbkhhbmRsZShBKSl7bGV0W2UsZ109SS5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOnQsdmFsdWU6ZX0sZ119cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGV0LmdldChBKXx8W11dfWZ1bmN0aW9uIGIoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gQXQuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBxKEEsdCxJKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e2xldCBnPWNJKCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG8peyFvLmRhdGF8fCFvLmRhdGEuaWR8fG8uZGF0YS5pZCE9PWd8fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLGUoby5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpnfSx0KSxJKX0pfWZ1bmN0aW9uIGNJKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBXKEEsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkodCxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6Zkl9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOlVBfT1PYmplY3QsQkE9KEE9PnQ9PntsZXQgST1mSS5jYWxsKHQpO3JldHVybiBBW0ldfHwoQVtJXT1JLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksVT1BPT4oQT1BLnRvTG93ZXJDYXNlKCksdD0+QkEodCk9PT1BKSxuQT1BPT50PT50eXBlb2YgdD09PUEse2lzQXJyYXk6S309QXJyYXksWj1uQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gbEkoQSl7cmV0dXJuIEEhPT1udWxsJiYhWihBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFaKEEuY29uc3RydWN0b3IpJiZGKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBpdD1VKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIERJKEEpe2xldCB0O3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/dD1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6dD1BJiZBLmJ1ZmZlciYmaXQoQS5idWZmZXIpLHR9dmFyIHVJPW5BKCJzdHJpbmciKSxGPW5BKCJmdW5jdGlvbiIpLEN0PW5BKCJudW1iZXIiKSxzQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLGhJPUE9PkE9PT0hMHx8QT09PSExLENBPUE9PntpZihCQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCB0PVVBKEEpO3JldHVybih0PT09bnVsbHx8dD09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LGRJPVUoIkRhdGUiKSx5ST1VKCJGaWxlIiksd0k9VSgiQmxvYiIpLG1JPVUoIkZpbGVMaXN0IikscEk9QT0+c0EoQSkmJkYoQS5waXBlKSxTST1BPT57bGV0IHQ7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8RihBLmFwcGVuZCkmJigodD1CQShBKSk9PT0iZm9ybWRhdGEifHx0PT09Im9iamVjdCImJkYoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sRkk9VSgiVVJMU2VhcmNoUGFyYW1zIiksUkk9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIiIpO2Z1bmN0aW9uIFYoQSx0LHthbGxPd25LZXlzOkk9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgZSxnO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxLKEEpKWZvcihlPTAsZz1BLmxlbmd0aDtlPGc7ZSsrKXQuY2FsbChudWxsLEFbZV0sZSxBKTtlbHNle2xldCByPUk/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksbz1yLmxlbmd0aCxuO2ZvcihlPTA7ZTxvO2UrKyluPXJbZV0sdC5jYWxsKG51bGwsQVtuXSxuLEEpfX1mdW5jdGlvbiBCdChBLHQpe3Q9dC50b0xvd2VyQ2FzZSgpO2xldCBJPU9iamVjdC5rZXlzKEEpLGU9SS5sZW5ndGgsZztmb3IoO2UtLSA+MDspaWYoZz1JW2VdLHQ9PT1nLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGc7cmV0dXJuIG51bGx9dmFyIG50PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsc3Q9QT0+IVooQSkmJkEhPT1udDtmdW5jdGlvbiBOQSgpe2xldHtjYXNlbGVzczpBfT1zdCh0aGlzKSYmdGhpc3x8e30sdD17fSxJPShlLGcpPT57bGV0IHI9QSYmQnQodCxnKXx8ZztDQSh0W3JdKSYmQ0EoZSk/dFtyXT1OQSh0W3JdLGUpOkNBKGUpP3Rbcl09TkEoe30sZSk6SyhlKT90W3JdPWUuc2xpY2UoKTp0W3JdPWV9O2ZvcihsZXQgZT0wLGc9YXJndW1lbnRzLmxlbmd0aDtlPGc7ZSsrKWFyZ3VtZW50c1tlXSYmVihhcmd1bWVudHNbZV0sSSk7cmV0dXJuIHR9dmFyIE5JPShBLHQsSSx7YWxsT3duS2V5czplfT17fSk9PihWKHQsKGcscik9PntJJiZGKGcpP0Fbcl09VyhnLEkpOkFbcl09Z30se2FsbE93bktleXM6ZX0pLEEpLFVJPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksR0k9KEEsdCxJLGUpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSxlKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOnQucHJvdG90eXBlfSksSSYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSxJKX0sa0k9KEEsdCxJLGUpPT57bGV0IGcscixvLG49e307aWYodD10fHx7fSxBPT1udWxsKXJldHVybiB0O2Rve2ZvcihnPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLHI9Zy5sZW5ndGg7ci0tID4wOylvPWdbcl0sKCFlfHxlKG8sQSx0KSkmJiFuW29dJiYodFtvXT1BW29dLG5bb109ITApO0E9SSE9PSExJiZVQShBKX13aGlsZShBJiYoIUl8fEkoQSx0KSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gdH0sTEk9KEEsdCxJKT0+e0E9U3RyaW5nKEEpLChJPT09dm9pZCAwfHxJPkEubGVuZ3RoKSYmKEk9QS5sZW5ndGgpLEktPXQubGVuZ3RoO2xldCBlPUEuaW5kZXhPZih0LEkpO3JldHVybiBlIT09LTEmJmU9PT1JfSxKST1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoSyhBKSlyZXR1cm4gQTtsZXQgdD1BLmxlbmd0aDtpZighQ3QodCkpcmV0dXJuIG51bGw7bGV0IEk9bmV3IEFycmF5KHQpO2Zvcig7dC0tID4wOylJW3RdPUFbdF07cmV0dXJuIEl9LEhJPShBPT50PT5BJiZ0IGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZVQShVaW50OEFycmF5KSksWUk9KEEsdCk9PntsZXQgZT0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLGc7Zm9yKDsoZz1lLm5leHQoKSkmJiFnLmRvbmU7KXtsZXQgcj1nLnZhbHVlO3QuY2FsbChBLHJbMF0sclsxXSl9fSxiST0oQSx0KT0+e2xldCBJLGU9W107Zm9yKDsoST1BLmV4ZWModCkpIT09bnVsbDspZS5wdXNoKEkpO3JldHVybiBlfSxNST1VKCJIVE1MRm9ybUVsZW1lbnQiKSxxST1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxmdW5jdGlvbihJLGUsZyl7cmV0dXJuIGUudG9VcHBlckNhc2UoKStnfSkscnQ9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4odCxJKT0+QS5jYWxsKHQsSSkpKE9iamVjdC5wcm90b3R5cGUpLEtJPVUoIlJlZ0V4cCIpLFF0PShBLHQpPT57bGV0IEk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSksZT17fTtWKEksKGcscik9PntsZXQgbzsobz10KGcscixBKSkhPT0hMSYmKGVbcl09b3x8Zyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLGUpfSxPST1BPT57UXQoQSwodCxJKT0+e2lmKEYoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZihJKSE9PS0xKXJldHVybiExO2xldCBlPUFbSV07aWYoRihlKSl7aWYodC5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiB0KXt0LndyaXRhYmxlPSExO3JldHVybn10LnNldHx8KHQuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFwnIitJKyJcJyIpfSl9fSl9LFRJPShBLHQpPT57bGV0IEk9e30sZT1nPT57Zy5mb3JFYWNoKHI9PntJW3JdPSEwfSl9O3JldHVybiBLKEEpP2UoQSk6ZShTdHJpbmcoQSkuc3BsaXQodCkpLEl9LFBJPSgpPT57fSx4ST0oQSx0KT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6dCksUkE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixvdD0iMDEyMzQ1Njc4OSIsRXQ9e0RJR0lUOm90LEFMUEhBOlJBLEFMUEhBX0RJR0lUOlJBK1JBLnRvVXBwZXJDYXNlKCkrb3R9LGpJPShBPTE2LHQ9RXQuQUxQSEFfRElHSVQpPT57bGV0IEk9IiIse2xlbmd0aDplfT10O2Zvcig7QS0tOylJKz10W01hdGgucmFuZG9tKCkqZXwwXTtyZXR1cm4gSX07ZnVuY3Rpb24gV0koQSl7cmV0dXJuISEoQSYmRihBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIFpJPUE9PntsZXQgdD1uZXcgQXJyYXkoMTApLEk9KGUsZyk9PntpZihzQShlKSl7aWYodC5pbmRleE9mKGUpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gZSkpe3RbZ109ZTtsZXQgcj1LKGUpP1tdOnt9O3JldHVybiBWKGUsKG8sbik9PntsZXQgYT1JKG8sZysxKTshWihhKSYmKHJbbl09YSl9KSx0W2ddPXZvaWQgMCxyfX1yZXR1cm4gZX07cmV0dXJuIEkoQSwwKX0sVkk9VSgiQXN5bmNGdW5jdGlvbiIpLFhJPUE9PkEmJihzQShBKXx8RihBKSkmJkYoQS50aGVuKSYmRihBLmNhdGNoKSxDPXtpc0FycmF5OkssaXNBcnJheUJ1ZmZlcjppdCxpc0J1ZmZlcjpsSSxpc0Zvcm1EYXRhOlNJLGlzQXJyYXlCdWZmZXJWaWV3OkRJLGlzU3RyaW5nOnVJLGlzTnVtYmVyOkN0LGlzQm9vbGVhbjpoSSxpc09iamVjdDpzQSxpc1BsYWluT2JqZWN0OkNBLGlzVW5kZWZpbmVkOlosaXNEYXRlOmRJLGlzRmlsZTp5SSxpc0Jsb2I6d0ksaXNSZWdFeHA6S0ksaXNGdW5jdGlvbjpGLGlzU3RyZWFtOnBJLGlzVVJMU2VhcmNoUGFyYW1zOkZJLGlzVHlwZWRBcnJheTpISSxpc0ZpbGVMaXN0Om1JLGZvckVhY2g6VixtZXJnZTpOQSxleHRlbmQ6TkksdHJpbTpSSSxzdHJpcEJPTTpVSSxpbmhlcml0czpHSSx0b0ZsYXRPYmplY3Q6a0ksa2luZE9mOkJBLGtpbmRPZlRlc3Q6VSxlbmRzV2l0aDpMSSx0b0FycmF5OkpJLGZvckVhY2hFbnRyeTpZSSxtYXRjaEFsbDpiSSxpc0hUTUxGb3JtOk1JLGhhc093blByb3BlcnR5OnJ0LGhhc093blByb3A6cnQscmVkdWNlRGVzY3JpcHRvcnM6UXQsZnJlZXplTWV0aG9kczpPSSx0b09iamVjdFNldDpUSSx0b0NhbWVsQ2FzZTpxSSxub29wOlBJLHRvRmluaXRlTnVtYmVyOnhJLGZpbmRLZXk6QnQsZ2xvYmFsOm50LGlzQ29udGV4dERlZmluZWQ6c3QsQUxQSEFCRVQ6RXQsZ2VuZXJhdGVTdHJpbmc6akksaXNTcGVjQ29tcGxpYW50Rm9ybTpXSSx0b0pTT05PYmplY3Q6WkksaXNBc3luY0ZuOlZJLGlzVGhlbmFibGU6WEl9O2Z1bmN0aW9uIE8oQSx0LEksZSxnKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLHQmJih0aGlzLmNvZGU9dCksSSYmKHRoaXMuY29uZmlnPUkpLGUmJih0aGlzLnJlcXVlc3Q9ZSksZyYmKHRoaXMucmVzcG9uc2U9Zyl9Qy5pbmhlcml0cyhPLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6Qy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgYXQ9Ty5wcm90b3R5cGUsY3Q9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57Y3RbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTyxjdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGF0LCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO08uZnJvbT0oQSx0LEksZSxnLHIpPT57bGV0IG89T2JqZWN0LmNyZWF0ZShhdCk7cmV0dXJuIEMudG9GbGF0T2JqZWN0KEEsbyxmdW5jdGlvbihhKXtyZXR1cm4gYSE9PUVycm9yLnByb3RvdHlwZX0sbj0+biE9PSJpc0F4aW9zRXJyb3IiKSxPLmNhbGwobyxBLm1lc3NhZ2UsdCxJLGUsZyksby5jYXVzZT1BLG8ubmFtZT1BLm5hbWUsciYmT2JqZWN0LmFzc2lnbihvLHIpLG99O3ZhciBsPU87dmFyIFFBPW51bGw7ZnVuY3Rpb24gR0EoQSl7cmV0dXJuIEMuaXNQbGFpbk9iamVjdChBKXx8Qy5pc0FycmF5KEEpfWZ1bmN0aW9uIGx0KEEpe3JldHVybiBDLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIGZ0KEEsdCxJKXtyZXR1cm4gQT9BLmNvbmNhdCh0KS5tYXAoZnVuY3Rpb24oZyxyKXtyZXR1cm4gZz1sdChnKSwhSSYmcj8iWyIrZysiXSI6Z30pLmpvaW4oST8iLiI6IiIpOnR9ZnVuY3Rpb24gekkoQSl7cmV0dXJuIEMuaXNBcnJheShBKSYmIUEuc29tZShHQSl9dmFyIF9JPUMudG9GbGF0T2JqZWN0KEMse30sbnVsbCxmdW5jdGlvbih0KXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QodCl9KTtmdW5jdGlvbiB2SShBLHQsSSl7aWYoIUMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7dD10fHxuZXcoUUF8fEZvcm1EYXRhKSxJPUMudG9GbGF0T2JqZWN0KEkse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihjLHUpe3JldHVybiFDLmlzVW5kZWZpbmVkKHVbY10pfSk7bGV0IGU9SS5tZXRhVG9rZW5zLGc9SS52aXNpdG9yfHxCLHI9SS5kb3RzLG89SS5pbmRleGVzLGE9KEkuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmQy5pc1NwZWNDb21wbGlhbnRGb3JtKHQpO2lmKCFDLmlzRnVuY3Rpb24oZykpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBRKEUpe2lmKEU9PT1udWxsKXJldHVybiIiO2lmKEMuaXNEYXRlKEUpKXJldHVybiBFLnRvSVNPU3RyaW5nKCk7aWYoIWEmJkMuaXNCbG9iKEUpKXRocm93IG5ldyBsKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBDLmlzQXJyYXlCdWZmZXIoRSl8fEMuaXNUeXBlZEFycmF5KEUpP2EmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtFXSk6QnVmZmVyLmZyb20oRSk6RX1mdW5jdGlvbiBCKEUsYyx1KXtsZXQgeT1FO2lmKEUmJiF1JiZ0eXBlb2YgRT09Im9iamVjdCIpe2lmKEMuZW5kc1dpdGgoYywie30iKSljPWU/YzpjLnNsaWNlKDAsLTIpLEU9SlNPTi5zdHJpbmdpZnkoRSk7ZWxzZSBpZihDLmlzQXJyYXkoRSkmJnpJKEUpfHwoQy5pc0ZpbGVMaXN0KEUpfHxDLmVuZHNXaXRoKGMsIltdIikpJiYoeT1DLnRvQXJyYXkoRSkpKXJldHVybiBjPWx0KGMpLHkuZm9yRWFjaChmdW5jdGlvbihOLHRJKXshKEMuaXNVbmRlZmluZWQoTil8fE49PT1udWxsKSYmdC5hcHBlbmQobz09PSEwP2Z0KFtjXSx0SSxyKTpvPT09bnVsbD9jOmMrIltdIixRKE4pKX0pLCExfXJldHVybiBHQShFKT8hMDoodC5hcHBlbmQoZnQodSxjLHIpLFEoRSkpLCExKX1sZXQgaT1bXSxmPU9iamVjdC5hc3NpZ24oX0kse2RlZmF1bHRWaXNpdG9yOkIsY29udmVydFZhbHVlOlEsaXNWaXNpdGFibGU6R0F9KTtmdW5jdGlvbiBzKEUsYyl7aWYoIUMuaXNVbmRlZmluZWQoRSkpe2lmKGkuaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitjLmpvaW4oIi4iKSk7aS5wdXNoKEUpLEMuZm9yRWFjaChFLGZ1bmN0aW9uKHksUil7KCEoQy5pc1VuZGVmaW5lZCh5KXx8eT09PW51bGwpJiZnLmNhbGwodCx5LEMuaXNTdHJpbmcoUik/Ui50cmltKCk6UixjLGYpKT09PSEwJiZzKHksYz9jLmNvbmNhdChSKTpbUl0pfSksaS5wb3AoKX19aWYoIUMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBzKEEpLHR9dmFyIEo9dkk7ZnVuY3Rpb24gRHQoQSl7bGV0IHQ9eyIhIjoiJTI1MjEiLCJcJyI6IiUyNTI3IiwiKCI6IiUyNTI4IiwiKSI6IiUyNTI5IiwifiI6IiUyNTdFIiwiJTI1MjAiOiIrIiwiJTI1MDAiOiJcXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shXCcoKX5dfCUyNTIwfCUyNTAwL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX1mdW5jdGlvbiB1dChBLHQpe3RoaXMuX3BhaXJzPVtdLEEmJkooQSx0aGlzLHQpfXZhciBodD11dC5wcm90b3R5cGU7aHQuYXBwZW5kPWZ1bmN0aW9uKHQsSSl7dGhpcy5fcGFpcnMucHVzaChbdCxJXSl9O2h0LnRvU3RyaW5nPWZ1bmN0aW9uKHQpe2xldCBJPXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUsRHQpfTpEdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKGcpe3JldHVybiBJKGdbMF0pKyI9IitJKGdbMV0pfSwiIikuam9pbigiJiIpfTt2YXIgRUE9dXQ7ZnVuY3Rpb24gJEkoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lMjUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNTI0L2csIiQiKS5yZXBsYWNlKC8lMjUyQy9naSwiLCIpLnJlcGxhY2UoLyUyNTIwL2csIisiKS5yZXBsYWNlKC8lMjU1Qi9naSwiWyIpLnJlcGxhY2UoLyUyNTVEL2dpLCJdIil9ZnVuY3Rpb24gWChBLHQsSSl7aWYoIXQpcmV0dXJuIEE7bGV0IGU9SSYmSS5lbmNvZGV8fCRJLGc9SSYmSS5zZXJpYWxpemUscjtpZihnP3I9Zyh0LEkpOnI9Qy5pc1VSTFNlYXJjaFBhcmFtcyh0KT90LnRvU3RyaW5nKCk6bmV3IEVBKHQsSSkudG9TdHJpbmcoZSkscil7bGV0IG89QS5pbmRleE9mKCIlMjMiKTtvIT09LTEmJihBPUEuc2xpY2UoMCxvKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrcn1yZXR1cm4gQX12YXIga0E9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZSh0LEksZSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOnQscmVqZWN0ZWQ6SSxzeW5jaHJvbm91czplP2Uuc3luY2hyb25vdXM6ITEscnVuV2hlbjplP2UucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdCh0KXt0aGlzLmhhbmRsZXJzW3RdJiYodGhpcy5oYW5kbGVyc1t0XT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKHQpe0MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKGUpe2UhPT1udWxsJiZ0KGUpfSl9fSxMQT1rQTt2YXIgYUE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBkdD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6RUE7dmFyIHl0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgd3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgbXQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6ZHQsRm9ybURhdGE6eXQsQmxvYjp3dH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBKQT17fTtlSShKQSx7aGFzQnJvd3NlckVudjooKT0+cHQsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5BZSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PnRlfSk7dmFyIHB0PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLEFlPShBPT5wdCYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLHRlPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgdz17Li4uSkEsLi4ubXR9O2Z1bmN0aW9uIEhBKEEsdCl7cmV0dXJuIEooQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKEksZSxnLHIpe3JldHVybiB3LmlzTm9kZSYmQy5pc0J1ZmZlcihJKT8odGhpcy5hcHBlbmQoZSxJLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOnIuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sdCkpfWZ1bmN0aW9uIEllKEEpe3JldHVybiBDLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZyxBKS5tYXAodD0+dFswXT09PSJbXSI/IiI6dFsxXXx8dFswXSl9ZnVuY3Rpb24gZWUoQSl7bGV0IHQ9e30sST1PYmplY3Qua2V5cyhBKSxlLGc9SS5sZW5ndGgscjtmb3IoZT0wO2U8ZztlKyspcj1JW2VdLHRbcl09QVtyXTtyZXR1cm4gdH1mdW5jdGlvbiBnZShBKXtmdW5jdGlvbiB0KEksZSxnLHIpe2xldCBvPUlbcisrXTtpZihvPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IG49TnVtYmVyLmlzRmluaXRlKCtvKSxhPXI+PUkubGVuZ3RoO3JldHVybiBvPSFvJiZDLmlzQXJyYXkoZyk/Zy5sZW5ndGg6byxhPyhDLmhhc093blByb3AoZyxvKT9nW29dPVtnW29dLGVdOmdbb109ZSwhbik6KCghZ1tvXXx8IUMuaXNPYmplY3QoZ1tvXSkpJiYoZ1tvXT1bXSksdChJLGUsZ1tvXSxyKSYmQy5pc0FycmF5KGdbb10pJiYoZ1tvXT1lZShnW29dKSksIW4pfWlmKEMuaXNGb3JtRGF0YShBKSYmQy5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCBJPXt9O3JldHVybiBDLmZvckVhY2hFbnRyeShBLChlLGcpPT57dChJZShlKSxnLEksMCl9KSxJfXJldHVybiBudWxsfXZhciBjQT1nZTtmdW5jdGlvbiByZShBLHQsSSl7aWYoQy5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKEEpLEMudHJpbShBKX1jYXRjaChlKXtpZihlLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IGV9cmV0dXJuKEl8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgWUE9e3RyYW5zaXRpb25hbDphQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKHQsSSl7bGV0IGU9SS5nZXRDb250ZW50VHlwZSgpfHwiIixnPWUuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLHI9Qy5pc09iamVjdCh0KTtpZihyJiZDLmlzSFRNTEZvcm0odCkmJih0PW5ldyBGb3JtRGF0YSh0KSksQy5pc0Zvcm1EYXRhKHQpKXJldHVybiBnP0pTT04uc3RyaW5naWZ5KGNBKHQpKTp0O2lmKEMuaXNBcnJheUJ1ZmZlcih0KXx8Qy5pc0J1ZmZlcih0KXx8Qy5pc1N0cmVhbSh0KXx8Qy5pc0ZpbGUodCl8fEMuaXNCbG9iKHQpKXJldHVybiB0O2lmKEMuaXNBcnJheUJ1ZmZlclZpZXcodCkpcmV0dXJuIHQuYnVmZmVyO2lmKEMuaXNVUkxTZWFyY2hQYXJhbXModCkpcmV0dXJuIEkuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksdC50b1N0cmluZygpO2xldCBuO2lmKHIpe2lmKGUuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIEhBKHQsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigobj1DLmlzRmlsZUxpc3QodCkpfHxlLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGE9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBKKG4/eyJmaWxlc1tdIjp0fTp0LGEmJm5ldyBhLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gcnx8Zz8oSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLHJlKHQpKTp0fV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKHQpe2xldCBJPXRoaXMudHJhbnNpdGlvbmFsfHxZQS50cmFuc2l0aW9uYWwsZT1JJiZJLmZvcmNlZEpTT05QYXJzaW5nLGc9dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYodCYmQy5pc1N0cmluZyh0KSYmKGUmJiF0aGlzLnJlc3BvbnNlVHlwZXx8Zykpe2xldCBvPSEoSSYmSS5zaWxlbnRKU09OUGFyc2luZykmJmc7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKG4pe2lmKG8pdGhyb3cgbi5uYW1lPT09IlN5bnRheEVycm9yIj9sLmZyb20obixsLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOm59fXJldHVybiB0fV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp3LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp3LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIwMCYmdDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e1lBLmhlYWRlcnNbQV09e319KTt2YXIgVD1ZQTt2YXIgb2U9Qy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxTdD1BPT57bGV0IHQ9e30sSSxlLGc7cmV0dXJuIEEmJkEuc3BsaXQoYCUwQWApLmZvckVhY2goZnVuY3Rpb24obyl7Zz1vLmluZGV4T2YoIjoiKSxJPW8uc3Vic3RyaW5nKDAsZykudHJpbSgpLnRvTG93ZXJDYXNlKCksZT1vLnN1YnN0cmluZyhnKzEpLnRyaW0oKSwhKCFJfHx0W0ldJiZvZVtJXSkmJihJPT09InNldC1jb29raWUiP3RbSV0/dFtJXS5wdXNoKGUpOnRbSV09W2VdOnRbSV09dFtJXT90W0ldKyIsICIrZTplKX0pLHR9O3ZhciBGdD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIHooQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBmQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6Qy5pc0FycmF5KEEpP0EubWFwKGZBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gaWUoQSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxJPS8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2csZTtmb3IoO2U9SS5leGVjKEEpOyl0W2VbMV1dPWVbMl07cmV0dXJuIHR9dmFyIENlPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhJTIzJCUmXCcqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIGJBKEEsdCxJLGUsZyl7aWYoQy5pc0Z1bmN0aW9uKGUpKXJldHVybiBlLmNhbGwodGhpcyx0LEkpO2lmKGcmJih0PUkpLCEhQy5pc1N0cmluZyh0KSl7aWYoQy5pc1N0cmluZyhlKSlyZXR1cm4gdC5pbmRleE9mKGUpIT09LTE7aWYoQy5pc1JlZ0V4cChlKSlyZXR1cm4gZS50ZXN0KHQpfX1mdW5jdGlvbiBCZShBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csKHQsSSxlKT0+SS50b1VwcGVyQ2FzZSgpK2UpfWZ1bmN0aW9uIG5lKEEsdCl7bGV0IEk9Qy50b0NhbWVsQ2FzZSgiICIrdCk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKGU9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxlK0kse3ZhbHVlOmZ1bmN0aW9uKGcscixvKXtyZXR1cm4gdGhpc1tlXS5jYWxsKHRoaXMsdCxnLHIsbyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dCYmdGhpcy5zZXQodCl9c2V0KHQsSSxlKXtsZXQgZz10aGlzO2Z1bmN0aW9uIHIobixhLFEpe2xldCBCPXooYSk7aWYoIUIpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBpPUMuZmluZEtleShnLEIpOyghaXx8Z1tpXT09PXZvaWQgMHx8UT09PSEwfHxRPT09dm9pZCAwJiZnW2ldIT09ITEpJiYoZ1tpfHxhXT1mQShuKSl9bGV0IG89KG4sYSk9PkMuZm9yRWFjaChuLChRLEIpPT5yKFEsQixhKSk7cmV0dXJuIEMuaXNQbGFpbk9iamVjdCh0KXx8dCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/byh0LEkpOkMuaXNTdHJpbmcodCkmJih0PXQudHJpbSgpKSYmIUNlKHQpP28oU3QodCksSSk6dCE9bnVsbCYmcihJLHQsZSksdGhpc31nZXQodCxJKXtpZih0PXoodCksdCl7bGV0IGU9Qy5maW5kS2V5KHRoaXMsdCk7aWYoZSl7bGV0IGc9dGhpc1tlXTtpZighSSlyZXR1cm4gZztpZihJPT09ITApcmV0dXJuIGllKGcpO2lmKEMuaXNGdW5jdGlvbihJKSlyZXR1cm4gSS5jYWxsKHRoaXMsZyxlKTtpZihDLmlzUmVnRXhwKEkpKXJldHVybiBJLmV4ZWMoZyk7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtyZXR1cm4hIShlJiZ0aGlzW2VdIT09dm9pZCAwJiYoIUl8fGJBKHRoaXMsdGhpc1tlXSxlLEkpKSl9cmV0dXJuITF9ZGVsZXRlKHQsSSl7bGV0IGU9dGhpcyxnPSExO2Z1bmN0aW9uIHIobyl7aWYobz16KG8pLG8pe2xldCBuPUMuZmluZEtleShlLG8pO24mJighSXx8YkEoZSxlW25dLG4sSSkpJiYoZGVsZXRlIGVbbl0sZz0hMCl9fXJldHVybiBDLmlzQXJyYXkodCk/dC5mb3JFYWNoKHIpOnIodCksZ31jbGVhcih0KXtsZXQgST1PYmplY3Qua2V5cyh0aGlzKSxlPUkubGVuZ3RoLGc9ITE7Zm9yKDtlLS07KXtsZXQgcj1JW2VdOyghdHx8YkEodGhpcyx0aGlzW3JdLHIsdCwhMCkpJiYoZGVsZXRlIHRoaXNbcl0sZz0hMCl9cmV0dXJuIGd9bm9ybWFsaXplKHQpe2xldCBJPXRoaXMsZT17fTtyZXR1cm4gQy5mb3JFYWNoKHRoaXMsKGcscik9PntsZXQgbz1DLmZpbmRLZXkoZSxyKTtpZihvKXtJW29dPWZBKGcpLGRlbGV0ZSBJW3JdO3JldHVybn1sZXQgbj10P0JlKHIpOlN0cmluZyhyKS50cmltKCk7biE9PXImJmRlbGV0ZSBJW3JdLElbbl09ZkEoZyksZVtuXT0hMH0pLHRoaXN9Y29uY2F0KC4uLnQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLnQpfXRvSlNPTih0KXtsZXQgST1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBDLmZvckVhY2godGhpcywoZSxnKT0+e2UhPW51bGwmJmUhPT0hMSYmKElbZ109dCYmQy5pc0FycmF5KGUpP2Uuam9pbigiLCAiKTplKX0pLEl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW3QsSV0pPT50KyI6ICIrSSkuam9pbihgJTBBYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM/dDpuZXcgdGhpcyh0KX1zdGF0aWMgY29uY2F0KHQsLi4uSSl7bGV0IGU9bmV3IHRoaXModCk7cmV0dXJuIEkuZm9yRWFjaChnPT5lLnNldChnKSksZX1zdGF0aWMgYWNjZXNzb3IodCl7bGV0IGU9KHRoaXNbRnRdPXRoaXNbRnRdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsZz10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiByKG8pe2xldCBuPXoobyk7ZVtuXXx8KG5lKGcsbyksZVtuXT0hMCl9cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSx0aGlzfX07UC5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7Qy5yZWR1Y2VEZXNjcmlwdG9ycyhQLnByb3RvdHlwZSwoe3ZhbHVlOkF9LHQpPT57bGV0IEk9dFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQoZSl7dGhpc1tJXT1lfX19KTtDLmZyZWV6ZU1ldGhvZHMoUCk7dmFyIG09UDtmdW5jdGlvbiBfKEEsdCl7bGV0IEk9dGhpc3x8VCxlPXR8fEksZz1tLmZyb20oZS5oZWFkZXJzKSxyPWUuZGF0YTtyZXR1cm4gQy5mb3JFYWNoKEEsZnVuY3Rpb24obil7cj1uLmNhbGwoSSxyLGcubm9ybWFsaXplKCksdD90LnN0YXR1czp2b2lkIDApfSksZy5ub3JtYWxpemUoKSxyfWZ1bmN0aW9uIHYoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBSdChBLHQsSSl7bC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixsLkVSUl9DQU5DRUxFRCx0LEkpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Qy5pbmhlcml0cyhSdCxsLHtfX0NBTkNFTF9fOiEwfSk7dmFyIEg9UnQ7ZnVuY3Rpb24gTUEoQSx0LEkpe2xldCBlPUkuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFJLnN0YXR1c3x8IWV8fGUoSS5zdGF0dXMpP0EoSSk6dChuZXcgbCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK0kuc3RhdHVzLFtsLkVSUl9CQURfUkVRVUVTVCxsLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IoSS5zdGF0dXMvMTAwKS00XSxJLmNvbmZpZyxJLnJlcXVlc3QsSSkpfXZhciBOdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSx0LEksZSxnLHIpe2xldCBvPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQodCldO0MuaXNOdW1iZXIoSSkmJm8ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKEkpLnRvR01UU3RyaW5nKCkpLEMuaXNTdHJpbmcoZSkmJm8ucHVzaCgicGF0aD0iK2UpLEMuaXNTdHJpbmcoZykmJm8ucHVzaCgiZG9tYWluPSIrZykscj09PSEwJiZvLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1vLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXFxccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIHFBKEEpe3JldHVybi9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIEtBKEEsdCl7cmV0dXJuIHQ/QS5yZXBsYWNlKC9cXC8/XFwvJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cXC8rLywiIik6QX1mdW5jdGlvbiAkKEEsdCl7cmV0dXJuIEEmJiFxQSh0KT9LQShBLHQpOnR9dmFyIFV0PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxJPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxlO2Z1bmN0aW9uIGcocil7bGV0IG89cjtyZXR1cm4gdCYmKEkuc2V0QXR0cmlidXRlKCJocmVmIixvKSxvPUkuaHJlZiksSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLHtocmVmOkkuaHJlZixwcm90b2NvbDpJLnByb3RvY29sP0kucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OkkuaG9zdCxzZWFyY2g6SS5zZWFyY2g/SS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sIiIpOiIiLGhhc2g6SS5oYXNoP0kuaGFzaC5yZXBsYWNlKC9eJTIzLywiIik6IiIsaG9zdG5hbWU6SS5ob3N0bmFtZSxwb3J0OkkucG9ydCxwYXRobmFtZTpJLnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj9JLnBhdGhuYW1lOiIvIitJLnBhdGhuYW1lfX1yZXR1cm4gZT1nKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihvKXtsZXQgbj1DLmlzU3RyaW5nKG8pP2cobyk6bztyZXR1cm4gbi5wcm90b2NvbD09PWUucHJvdG9jb2wmJm4uaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gT0EoQSl7bGV0IHQ9L14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWMoQSk7cmV0dXJuIHQmJnRbMV18fCIifWZ1bmN0aW9uIHNlKEEsdCl7QT1BfHwxMDtsZXQgST1uZXcgQXJyYXkoQSksZT1uZXcgQXJyYXkoQSksZz0wLHI9MCxvO3JldHVybiB0PXQhPT12b2lkIDA/dDoxZTMsZnVuY3Rpb24oYSl7bGV0IFE9RGF0ZS5ub3coKSxCPWVbcl07b3x8KG89USksSVtnXT1hLGVbZ109UTtsZXQgaT1yLGY9MDtmb3IoO2khPT1nOylmKz1JW2krK10saT1pJUE7aWYoZz0oZysxKSVBLGc9PT1yJiYocj0ocisxKSVBKSxRLW88dClyZXR1cm47bGV0IHM9QiYmUS1CO3JldHVybiBzP01hdGgucm91bmQoZioxZTMvcyk6dm9pZCAwfX12YXIgR3Q9c2U7ZnVuY3Rpb24ga3QoQSx0KXtsZXQgST0wLGU9R3QoNTAsMjUwKTtyZXR1cm4gZz0+e2xldCByPWcubG9hZGVkLG89Zy5sZW5ndGhDb21wdXRhYmxlP2cudG90YWw6dm9pZCAwLG49ci1JLGE9ZShuKSxRPXI8PW87ST1yO2xldCBCPXtsb2FkZWQ6cix0b3RhbDpvLHByb2dyZXNzOm8/ci9vOnZvaWQgMCxieXRlczpuLHJhdGU6YXx8dm9pZCAwLGVzdGltYXRlZDphJiZvJiZRPyhvLXIpL2E6dm9pZCAwLGV2ZW50Omd9O0JbdD8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKEIpfX12YXIgUWU9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixMdD1RZSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEksZSl7bGV0IGc9QS5kYXRhLHI9bS5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpvLHdpdGhYU1JGVG9rZW46bn09QSxhO2Z1bmN0aW9uIFEoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYSl9bGV0IEI7aWYoQy5pc0Zvcm1EYXRhKGcpKXtpZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8dy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpci5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoQj1yLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtjLC4uLnVdPUI/Qi5zcGxpdCgiOyIpLm1hcCh5PT55LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO3Iuc2V0Q29udGVudFR5cGUoW2N8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi51XS5qb2luKCI7ICIpKX19bGV0IGk9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IGM9QS5hdXRoLnVzZXJuYW1lfHwiIix1PUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7ci5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoYysiOiIrdSkpfWxldCBmPSQoQS5iYXNlVVJMLEEudXJsKTtpLm9wZW4oQS5tZXRob2QudG9VcHBlckNhc2UoKSxYKGYsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksaS50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBzKCl7aWYoIWkpcmV0dXJuO2xldCBjPW0uZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGkmJmkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHk9e2RhdGE6IW98fG89PT0idGV4dCJ8fG89PT0ianNvbiI/aS5yZXNwb25zZVRleHQ6aS5yZXNwb25zZSxzdGF0dXM6aS5zdGF0dXMsc3RhdHVzVGV4dDppLnN0YXR1c1RleHQsaGVhZGVyczpjLGNvbmZpZzpBLHJlcXVlc3Q6aX07TUEoZnVuY3Rpb24oTil7SShOKSxRKCl9LGZ1bmN0aW9uKE4pe2UoTiksUSgpfSx5KSxpPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBpP2kub25sb2FkZW5kPXM6aS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshaXx8aS5yZWFkeVN0YXRlIT09NHx8aS5zdGF0dXM9PT0wJiYhKGkucmVzcG9uc2VVUkwmJmkucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KHMpfSxpLm9uYWJvcnQ9ZnVuY3Rpb24oKXtpJiYoZShuZXcgbCgiUmVxdWVzdCBhYm9ydGVkIixsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGwpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBsKCJOZXR3b3JrIEVycm9yIixsLkVSUl9ORVRXT1JLLEEsaSkpLGk9bnVsbH0saS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgdT1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIseT1BLnRyYW5zaXRpb25hbHx8YUE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodT1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLGUobmV3IGwodSx5LmNsYXJpZnlUaW1lb3V0RXJyb3I/bC5FVElNRURPVVQ6bC5FQ09OTkFCT1JURUQsQSxpKSksaT1udWxsfSx3Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKG4mJkMuaXNGdW5jdGlvbihuKSYmKG49bihBKSksbnx8biE9PSExJiZVdChmKSkpe2xldCBjPUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJk50LnJlYWQoQS54c3JmQ29va2llTmFtZSk7YyYmci5zZXQoQS54c3JmSGVhZGVyTmFtZSxjKX1nPT09dm9pZCAwJiZyLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGkmJkMuZm9yRWFjaChyLnRvSlNPTigpLGZ1bmN0aW9uKHUseSl7aS5zZXRSZXF1ZXN0SGVhZGVyKHksdSl9KSxDLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KGkud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLG8mJm8hPT0ianNvbiImJihpLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZpLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkudXBsb2FkJiZpLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa3QoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGE9Yz0+e2kmJihlKCFjfHxjLnR5cGU/bmV3IEgobnVsbCxBLGkpOmMpLGkuYWJvcnQoKSxpPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShhKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/YSgpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixhKSkpO2xldCBFPU9BKGYpO2lmKEUmJncucHJvdG9jb2xzLmluZGV4T2YoRSk9PT0tMSl7ZShuZXcgbCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitFKyI6IixsLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWkuc2VuZChnfHxudWxsKX0pfTt2YXIgVEE9e2h0dHA6UUEseGhyOkx0fTtDLmZvckVhY2goVEEsKEEsdCk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTp0fSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOnR9KX19KTt2YXIgSnQ9QT0+YC0gJHtBfWAsRWU9QT0+Qy5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLGxBPXtnZXRBZGFwdGVyOkE9PntBPUMuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOnR9PUEsSSxlLGc9e307Zm9yKGxldCByPTA7cjx0O3IrKyl7ST1BW3JdO2xldCBvO2lmKGU9SSwhRWUoSSkmJihlPVRBWyhvPVN0cmluZyhJKSkudG9Mb3dlckNhc2UoKV0sZT09PXZvaWQgMCkpdGhyb3cgbmV3IGwoYFVua25vd24gYWRhcHRlciBcJyR7b31cJ2ApO2lmKGUpYnJlYWs7Z1tvfHwiJTIzIityXT1lfWlmKCFlKXtsZXQgcj1PYmplY3QuZW50cmllcyhnKS5tYXAoKFtuLGFdKT0+YGFkYXB0ZXIgJHtufSBgKyhhPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksbz10P3IubGVuZ3RoPjE/YHNpbmNlIDolMEFgK3IubWFwKEp0KS5qb2luKGAlMEFgKToiICIrSnQoclswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgbCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK28sIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBlfSxhZGFwdGVyczpUQX07ZnVuY3Rpb24gUEEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEgobnVsbCxBKX1mdW5jdGlvbiBEQShBKXtyZXR1cm4gUEEoQSksQS5oZWFkZXJzPW0uZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxsQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8VC5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBQQShBKSxlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlKSxlLmhlYWRlcnM9bS5mcm9tKGUuaGVhZGVycyksZX0sZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSl8fChQQShBKSxlJiZlLnJlc3BvbnNlJiYoZS5yZXNwb25zZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZS5yZXNwb25zZSksZS5yZXNwb25zZS5oZWFkZXJzPW0uZnJvbShlLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QoZSl9KX12YXIgSHQ9QT0+QSBpbnN0YW5jZW9mIG0/ey4uLkF9OkE7ZnVuY3Rpb24gayhBLHQpe3Q9dHx8e307bGV0IEk9e307ZnVuY3Rpb24gZShRLEIsaSl7cmV0dXJuIEMuaXNQbGFpbk9iamVjdChRKSYmQy5pc1BsYWluT2JqZWN0KEIpP0MubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6aX0sUSxCKTpDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZSh7fSxCKTpDLmlzQXJyYXkoQik/Qi5zbGljZSgpOkJ9ZnVuY3Rpb24gZyhRLEIsaSl7aWYoQy5pc1VuZGVmaW5lZChCKSl7aWYoIUMuaXNVbmRlZmluZWQoUSkpcmV0dXJuIGUodm9pZCAwLFEsaSl9ZWxzZSByZXR1cm4gZShRLEIsaSl9ZnVuY3Rpb24gcihRLEIpe2lmKCFDLmlzVW5kZWZpbmVkKEIpKXJldHVybiBlKHZvaWQgMCxCKX1mdW5jdGlvbiBvKFEsQil7aWYoQy5pc1VuZGVmaW5lZChCKSl7aWYoIUMuaXNVbmRlZmluZWQoUSkpcmV0dXJuIGUodm9pZCAwLFEpfWVsc2UgcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG4oUSxCLGkpe2lmKGkgaW4gdClyZXR1cm4gZShRLEIpO2lmKGkgaW4gQSlyZXR1cm4gZSh2b2lkIDAsUSl9bGV0IGE9e3VybDpyLG1ldGhvZDpyLGRhdGE6cixiYXNlVVJMOm8sdHJhbnNmb3JtUmVxdWVzdDpvLHRyYW5zZm9ybVJlc3BvbnNlOm8scGFyYW1zU2VyaWFsaXplcjpvLHRpbWVvdXQ6byx0aW1lb3V0TWVzc2FnZTpvLHdpdGhDcmVkZW50aWFsczpvLHdpdGhYU1JGVG9rZW46byxhZGFwdGVyOm8scmVzcG9uc2VUeXBlOm8seHNyZkNvb2tpZU5hbWU6byx4c3JmSGVhZGVyTmFtZTpvLG9uVXBsb2FkUHJvZ3Jlc3M6byxvbkRvd25sb2FkUHJvZ3Jlc3M6byxkZWNvbXByZXNzOm8sbWF4Q29udGVudExlbmd0aDpvLG1heEJvZHlMZW5ndGg6byxiZWZvcmVSZWRpcmVjdDpvLHRyYW5zcG9ydDpvLGh0dHBBZ2VudDpvLGh0dHBzQWdlbnQ6byxjYW5jZWxUb2tlbjpvLHNvY2tldFBhdGg6byxyZXNwb25zZUVuY29kaW5nOm8sdmFsaWRhdGVTdGF0dXM6bixoZWFkZXJzOihRLEIpPT5nKEh0KFEpLEh0KEIpLCEwKX07cmV0dXJuIEMuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsdCkpLGZ1bmN0aW9uKEIpe2xldCBpPWFbQl18fGcsZj1pKEFbQl0sdFtCXSxCKTtDLmlzVW5kZWZpbmVkKGYpJiZpIT09bnx8KElbQl09Zil9KSxJfXZhciB1QT0iMS42LjgiO3ZhciB4QT17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKEEsdCk9Pnt4QVtBXT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PT1BfHwiYSIrKHQ8MT8ibiAiOiIgIikrQX19KTt2YXIgWXQ9e307eEEudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKHQsSSxlKXtmdW5jdGlvbiBnKHIsbyl7cmV0dXJuIltBeGlvcyB2Iit1QSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFwnIityKyJcJyIrbysoZT8iLiAiK2U6IiIpfXJldHVybihyLG8sbik9PntpZih0PT09ITEpdGhyb3cgbmV3IGwoZyhvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKEk/IiBpbiAiK0k6IiIpKSxsLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gSSYmIVl0W29dJiYoWXRbb109ITAsY29uc29sZS53YXJuKGcobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrSSsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSx0P3QocixvLG4pOiEwfX07ZnVuY3Rpb24gYWUoQSx0LEkpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgbCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IGU9T2JqZWN0LmtleXMoQSksZz1lLmxlbmd0aDtmb3IoO2ctLSA+MDspe2xldCByPWVbZ10sbz10W3JdO2lmKG8pe2xldCBuPUFbcl0sYT1uPT09dm9pZCAwfHxvKG4scixBKTtpZihhIT09ITApdGhyb3cgbmV3IGwoIm9wdGlvbiAiK3IrIiBtdXN0IGJlICIrYSxsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZihJIT09ITApdGhyb3cgbmV3IGwoIlVua25vd24gb3B0aW9uICIrcixsLkVSUl9CQURfT1BUSU9OKX19dmFyIGhBPXthc3NlcnRPcHRpb25zOmFlLHZhbGlkYXRvcnM6eEF9O3ZhciBZPWhBLnZhbGlkYXRvcnMseD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZmF1bHRzPXQsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IExBLHJlc3BvbnNlOm5ldyBMQX19YXN5bmMgcmVxdWVzdCh0LEkpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdCh0LEkpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcil7bGV0IGc7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZz17fSk6Zz1uZXcgRXJyb3I7bGV0IHI9Zy5zdGFjaz9nLnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sIiIpOiIiO2Uuc3RhY2s/ciYmIVN0cmluZyhlLnN0YWNrKS5lbmRzV2l0aChyLnJlcGxhY2UoL14uK1xcbi4rXFxuLywiIikpJiYoZS5zdGFjays9YCUwQWArcik6ZS5zdGFjaz1yfXRocm93IGV9fV9yZXF1ZXN0KHQsSSl7dHlwZW9mIHQ9PSJzdHJpbmciPyhJPUl8fHt9LEkudXJsPXQpOkk9dHx8e30sST1rKHRoaXMuZGVmYXVsdHMsSSk7bGV0e3RyYW5zaXRpb25hbDplLHBhcmFtc1NlcmlhbGl6ZXI6ZyxoZWFkZXJzOnJ9PUk7ZSE9PXZvaWQgMCYmaEEuYXNzZXJ0T3B0aW9ucyhlLHtzaWxlbnRKU09OUGFyc2luZzpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pfSwhMSksZyE9bnVsbCYmKEMuaXNGdW5jdGlvbihnKT9JLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpnfTpoQS5hc3NlcnRPcHRpb25zKGcse2VuY29kZTpZLmZ1bmN0aW9uLHNlcmlhbGl6ZTpZLmZ1bmN0aW9ufSwhMCkpLEkubWV0aG9kPShJLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBvPXImJkMubWVyZ2Uoci5jb21tb24scltJLm1ldGhvZF0pO3ImJkMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIHJbRV19KSxJLmhlYWRlcnM9bS5jb25jYXQobyxyKTtsZXQgbj1bXSxhPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihjKXt0eXBlb2YgYy5ydW5XaGVuPT0iZnVuY3Rpb24iJiZjLnJ1bldoZW4oSSk9PT0hMXx8KGE9YSYmYy5zeW5jaHJvbm91cyxuLnVuc2hpZnQoYy5mdWxmaWxsZWQsYy5yZWplY3RlZCkpfSk7bGV0IFE9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihjKXtRLnB1c2goYy5mdWxmaWxsZWQsYy5yZWplY3RlZCl9KTtsZXQgQixpPTAsZjtpZighYSl7bGV0IEU9W0RBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsbiksRS5wdXNoLmFwcGx5KEUsUSksZj1FLmxlbmd0aCxCPVByb21pc2UucmVzb2x2ZShJKTtpPGY7KUI9Qi50aGVuKEVbaSsrXSxFW2krK10pO3JldHVybiBCfWY9bi5sZW5ndGg7bGV0IHM9STtmb3IoaT0wO2k8Zjspe2xldCBFPW5baSsrXSxjPW5baSsrXTt0cnl7cz1FKHMpfWNhdGNoKHUpe2MuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7Qj1EQS5jYWxsKHRoaXMscyl9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihpPTAsZj1RLmxlbmd0aDtpPGY7KUI9Qi50aGVuKFFbaSsrXSxRW2krK10pO3JldHVybiBCfWdldFVyaSh0KXt0PWsodGhpcy5kZWZhdWx0cyx0KTtsZXQgST0kKHQuYmFzZVVSTCx0LnVybCk7cmV0dXJuIFgoSSx0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpfX07Qy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbih0KXt4LnByb3RvdHlwZVt0XT1mdW5jdGlvbihJLGUpe3JldHVybiB0aGlzLnJlcXVlc3QoayhlfHx7fSx7bWV0aG9kOnQsdXJsOkksZGF0YTooZXx8e30pLmRhdGF9KSl9fSk7Qy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gSShlKXtyZXR1cm4gZnVuY3Rpb24ocixvLG4pe3JldHVybiB0aGlzLnJlcXVlc3QoayhufHx7fSx7bWV0aG9kOnQsaGVhZGVyczplP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpyLGRhdGE6b30pKX19eC5wcm90b3R5cGVbdF09SSgpLHgucHJvdG90eXBlW3QrIkZvcm0iXT1JKCEwKX0pO3ZhciBBQT14O3ZhciBqQT1jbGFzcyBBe2NvbnN0cnVjdG9yKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgSTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24ocil7ST1yfSk7bGV0IGU9dGhpczt0aGlzLnByb21pc2UudGhlbihnPT57aWYoIWUuX2xpc3RlbmVycylyZXR1cm47bGV0IHI9ZS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO3ItLSA+MDspZS5fbGlzdGVuZXJzW3JdKGcpO2UuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49Zz0+e2xldCByLG89bmV3IFByb21pc2Uobj0+e2Uuc3Vic2NyaWJlKG4pLHI9bn0pLnRoZW4oZyk7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7ZS51bnN1YnNjcmliZShyKX0sb30sdChmdW5jdGlvbihyLG8sbil7ZS5yZWFzb258fChlLnJlYXNvbj1uZXcgSChyLG8sbiksSShlLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZSh0KXtpZih0aGlzLnJlYXNvbil7dCh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaCh0KTp0aGlzLl9saXN0ZW5lcnM9W3RdfXVuc3Vic2NyaWJlKHQpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBJPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKHQpO0khPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShJLDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgdDtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24oZyl7dD1nfSksY2FuY2VsOnR9fX0sYnQ9akE7ZnVuY3Rpb24gV0EoQSl7cmV0dXJuIGZ1bmN0aW9uKEkpe3JldHVybiBBLmFwcGx5KG51bGwsSSl9fWZ1bmN0aW9uIFpBKEEpe3JldHVybiBDLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBWQT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoVkEpLmZvckVhY2goKFtBLHRdKT0+e1ZBW3RdPUF9KTt2YXIgTXQ9VkE7ZnVuY3Rpb24gcXQoQSl7bGV0IHQ9bmV3IEFBKEEpLEk9VyhBQS5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gQy5leHRlbmQoSSxBQS5wcm90b3R5cGUsdCx7YWxsT3duS2V5czohMH0pLEMuZXh0ZW5kKEksdCxudWxsLHthbGxPd25LZXlzOiEwfSksSS5jcmVhdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHF0KGsoQSxnKSl9LEl9dmFyIGg9cXQoVCk7aC5BeGlvcz1BQTtoLkNhbmNlbGVkRXJyb3I9SDtoLkNhbmNlbFRva2VuPWJ0O2guaXNDYW5jZWw9djtoLlZFUlNJT049dUE7aC50b0Zvcm1EYXRhPUo7aC5BeGlvc0Vycm9yPWw7aC5DYW5jZWw9aC5DYW5jZWxlZEVycm9yO2guYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLmFsbCh0KX07aC5zcHJlYWQ9V0E7aC5pc0F4aW9zRXJyb3I9WkE7aC5tZXJnZUNvbmZpZz1rO2guQXhpb3NIZWFkZXJzPW07aC5mb3JtVG9KU09OPUE9PmNBKEMuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7aC5nZXRBZGFwdGVyPWxBLmdldEFkYXB0ZXI7aC5IdHRwU3RhdHVzQ29kZT1NdDtoLmRlZmF1bHQ9aDt2YXIgZEE9aDt2YXJ7QXhpb3M6aW8sQXhpb3NFcnJvcjpDbyxDYW5jZWxlZEVycm9yOkJvLGlzQ2FuY2VsOm5vLENhbmNlbFRva2VuOnNvLFZFUlNJT046UW8sYWxsOkVvLENhbmNlbDphbyxpc0F4aW9zRXJyb3I6Y28sc3ByZWFkOmZvLHRvRm9ybURhdGE6bG8sQXhpb3NIZWFkZXJzOkRvLEh0dHBTdGF0dXNDb2RlOnVvLGZvcm1Ub0pTT046aG8sZ2V0QWRhcHRlcjp5byxtZXJnZUNvbmZpZzp3b309ZEE7dmFyIHRBLEwsekEsWEE9e2Vudjp7ZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aDpmdW5jdGlvbihBKXt6QT1uZXcgVWludDhBcnJheShMLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcil9fX0seUE9Y2xhc3N7aW5pdCgpe3JldHVybiB0QXx8KHR5cGVvZiBmZXRjaDwidSI/dEE9ZmV0Y2goImRhdGE6YXBwbGljYXRpb24vd2FzbTtiYXNlNjQsIitLdCkudGhlbih0PT50LmFycmF5QnVmZmVyKCkpLnRoZW4odD0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodCxYQSkpLnRoZW4odGhpcy5faW5pdCk6dEE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20oS3QsImJhc2U2NCIpLFhBKS50aGVuKHRoaXMuX2luaXQpLHRBKX1faW5pdCh0KXtMPXQuaW5zdGFuY2UsWEEuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKHQsST0wKXtpZighTCl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgZT10LmJ5dGVMZW5ndGgsZz1MLmV4cG9ydHMubWFsbG9jKGUpO3pBLnNldCh0LGcpLEk9SXx8TnVtYmVyKEwuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKGcsZSkpO2xldCByPUwuZXhwb3J0cy5tYWxsb2MoSSksbz1MLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKHIsSSxnLGUpLG49ekEuc2xpY2UocixyK28pO3JldHVybiBMLmV4cG9ydHMuZnJlZShnKSxMLmV4cG9ydHMuZnJlZShyKSxufX0sS3Q9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgT3Q9bmV3IHlBLFR0PSExO2FzeW5jIGZ1bmN0aW9uIGNlKEEsdCxJKXtsZXQgZT1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9lPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9lPUE6ZT1gJHt0fS8ke0F9YCxlLmVuZHNXaXRoKCIuanMiKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0zKSksZS5lbmRzV2l0aCgiLndhc20iKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC01KSk7bGV0IGc9YCR7ZX0ud2FzbWAscj1hd2FpdCBkQS5nZXQoYCR7Z30uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOkl9KTtUdHx8KGF3YWl0IE90LmluaXQoKSxUdD0hMCk7bGV0IG49T3QuZGVjb2RlKG5ldyBVaW50OEFycmF5KHIuZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke2V9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6bn0pfXZhciBQdD1jZTt2YXIgd0E9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBmZShBLHQsSSl7bGV0IGU9QSxnPUEscj1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihlPW5ldyBVUkwoQS5ocmVmKSxnPWUuaHJlZiksd0EuaGFzKGcpP3I9YXdhaXQgd0EuZ2V0KGcpOih3QS5zZXQoZyxQdChlLHQsSSkpLHI9YXdhaXQgd0EuZ2V0KGcpKSxyfXZhciB4dD1mZTt2YXIgbGU9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybToiVHJhbnNmb3JtIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxEPWxlO3ZhciBEZT17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LFM9RGU7dmFyIHVlPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSxqPXVlO2Z1bmN0aW9uIGhlKEEsdCl7bGV0IEk9bnVsbDtzd2l0Y2goQSl7Y2FzZSBTLlVJbnQ4OntJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQ4OntJPW5ldyBJbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQxNjp7ST1uZXcgVWludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDE2OntJPW5ldyBJbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50MzI6e0k9bmV3IFVpbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQzMjp7ST1uZXcgSW50MzJBcnJheSh0KTticmVha31jYXNlIFMuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj9JPW5ldyBCaWdVaW50NjRBcnJheSh0KTpJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj9JPW5ldyBCaWdJbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBqLkZsb2F0MzI6e0k9bmV3IEZsb2F0MzJBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQ2NDp7ST1uZXcgRmxvYXQ2NEFycmF5KHQpO2JyZWFrfWNhc2UibnVsbCI6e0k9bnVsbDticmVha31jYXNlIG51bGw6e0k9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiBJfXZhciBHPWhlO3ZhciBadD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixqdD1uZXcgVGV4dEVuY29kZXIsV3Q9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIGRlKEEsdCl7bGV0IEk9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sZT1BLmZzX29wZW4odCxJLmZsYWdzKSxyPUEuZnNfc3RhdCh0KS5zaXplLG89bnVsbDtadD9vPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTpvPW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgbj1uZXcgVWludDhBcnJheShvKTtyZXR1cm4gQS5mc19yZWFkKGUsbiwwLHIsMCksQS5mc19jbG9zZShlKSxufWZ1bmN0aW9uIFZ0KEEsdCxJKXtsZXQgZT1udWxsO1p0P2U9bmV3IFNoYXJlZEFycmF5QnVmZmVyKEkpOmU9bmV3IEFycmF5QnVmZmVyKEkpO2xldCBnPW5ldyBVaW50OEFycmF5KGUpLHI9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHQsSSk7cmV0dXJuIGcuc2V0KHIpLGd9ZnVuY3Rpb24gZChBLHQsSSxlKXtsZXQgZz0wO3JldHVybiB0IT09bnVsbCYmKGc9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSxlLHQuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLGcpKSxnfWZ1bmN0aW9uIE0oQSx0LEkpe2xldCBlPUpTT04uc3RyaW5naWZ5KHQpLGc9QS5sZW5ndGhCeXRlc1VURjgoZSkrMSxyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSxnXSk7QS5zdHJpbmdUb1VURjgoZSxyLGcpfWZ1bmN0aW9uIHAoQSx0LEksZSl7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxJXSkscj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxvPVZ0KEEsZyxyKTtyZXR1cm4gRyhlLG8uYnVmZmVyKX1mdW5jdGlvbiBtQShBLHQpe2xldCBJPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsdF0pLGU9QS5VVEY4VG9TdHJpbmcoSSk7cmV0dXJuIEpTT04ucGFyc2UoZSl9ZnVuY3Rpb24geWUoQSx0LEksZSl7ZSE9bnVsbCYmZS5sZW5ndGg+MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBpPWp0LmVuY29kZShRLmRhdGEuZGF0YSksZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBpPWp0LmVuY29kZShKU09OLnN0cmluZ2lmeShRLmRhdGEpKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBpPVEuZGF0YS5kYXRhLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBpPVEuZGF0YSxmPWQoQSxpLmRhdGEsQiwwKSxzPWQoQSxpLmRpcmVjdGlvbixCLDEpLEU9dHlwZW9mIGkubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oaS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTppLmltYWdlVHlwZSxuYW1lOmkubmFtZSxvcmlnaW46aS5vcmlnaW4sc3BhY2luZzppLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLHNpemU6aS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07TShBLGMsQik7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkuY2VsbHMsQiwxKSxFPWQoQSxpLnBvaW50RGF0YSxCLDIpLGM9ZChBLGkuY2VsbERhdGEsQiwzKSx1PXttZXNoVHlwZTppLm1lc2hUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6aS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLGNlbGxCdWZmZXJTaXplOmkuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07TShBLHUsQik7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnBvaW50RGF0YSxCLDEpLEU9e3BvaW50U2V0VHlwZTppLnBvaW50U2V0VHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWB9O00oQSxFLEIpO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS52ZXJ0aWNlcyxCLDEpLEU9ZChBLGkubGluZXMsQiwyKSxjPWQoQSxpLnBvbHlnb25zLEIsMyksdT1kKEEsaS50cmlhbmdsZVN0cmlwcyxCLDQpLHk9ZChBLGkucG9pbnREYXRhLEIsNSksUj1kKEEsaS5wb2ludERhdGEsQiw2KSxOPXtwb2x5RGF0YVR5cGU6aS5wb2x5RGF0YVR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOmkudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLGxpbmVzQnVmZmVyU2l6ZTppLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxwb2x5Z29uc0J1ZmZlclNpemU6aS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmkudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3l9YCxudW1iZXJPZkNlbGxQaXhlbHM6aS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtSfWB9O00oQSxOLEIpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBnPUEuc3RhY2tTYXZlKCkscj0wO3RyeXtyPUEuY2FsbE1haW4odC5zbGljZSgpKX1jYXRjaChRKXt0aHJvdyB0eXBlb2YgUT09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShRKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxRfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUoZyl9bGV0IG89QS5nZXRNb2R1bGVTdGRvdXQoKSxuPUEuZ2V0TW9kdWxlU3RkZXJyKCksYT1bXTtyZXR1cm4gSSE9bnVsbCYmSS5sZW5ndGg+MCYmcj09PTAmJkkuZm9yRWFjaChmdW5jdGlvbihRLEIpe2xldCBpPW51bGw7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPXtkYXRhOld0LmRlY29kZShjKX07YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHMsRSk7aT1KU09OLnBhcnNlKFd0LmRlY29kZShjKSk7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKTtpPXtkYXRhOlZ0KEEscyxFKX07YnJlYWt9Y2FzZSBELlRleHRGaWxlOntpPXtwYXRoOlEuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShRLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntpPXtwYXRoOlEuZGF0YS5wYXRoLGRhdGE6ZGUoQSxRLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IHM9bUEoQSxCKTtzLmRhdGE9cChBLEIsMCxzLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxzLmRpcmVjdGlvbj1wKEEsQiwxLGouRmxvYXQ2NCkscy5tZXRhZGF0YT1uZXcgTWFwKHMubWV0YWRhdGEpLGk9czticmVha31jYXNlIEQuTWVzaDp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxzLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxscz4wP3MuY2VsbHM9cChBLEIsMSxzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpzLmNlbGxzPUcocy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDIscy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxQaXhlbHM+MD9zLmNlbGxEYXRhPXAoQSxCLDMscy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2ludFNldDp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOnMucG9pbnRzPUcocy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMSxzLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAsai5GbG9hdDMyKTpzLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LHMudmVydGljZXNCdWZmZXJTaXplPjA/cy52ZXJ0aWNlcz1wKEEsQiwxLFMuVUludDMyKTpzLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxzLmxpbmVzQnVmZmVyU2l6ZT4wP3MubGluZXM9cChBLEIsMixTLlVJbnQzMik6cy5saW5lcz1uZXcgVWludDMyQXJyYXkscy5wb2x5Z29uc0J1ZmZlclNpemU+MD9zLnBvbHlnb25zPXAoQSxCLDMsUy5VSW50MzIpOnMucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LHMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/cy50cmlhbmdsZVN0cmlwcz1wKEEsQiw0LFMuVUludDMyKTpzLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiw1LHMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxQaXhlbHM+MD9zLmNlbGxEYXRhPXAoQSxCLDYscy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6cy5jZWxsRGF0YT1HKHMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpRLnR5cGUsZGF0YTppfTthLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6cixzdGRvdXQ6byxzdGRlcnI6bixvdXRwdXRzOmF9fXZhciBYdD15ZTt2YXIgd2U9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIG1lKEEsdCl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgST1bXTtmb3IobGV0IGU9MDtlPEEubGVuZ3RoO2UrKyl7bGV0IGc9cGUoQVtlXSx0KTtnIT09bnVsbCYmSS5wdXNoKGcpfXJldHVybiBJfWZ1bmN0aW9uIHBlKEEsdCl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgST1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD9JPUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKEk9QSksd2UmJkkgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOnQ/STpJLnNsaWNlKDApfXZhciB6dD1tZTtmdW5jdGlvbiBTZShBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgX3Q9U2U7ZnVuY3Rpb24gRmUoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIHZ0PUZlO2Z1bmN0aW9uIFJlKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciAkdD1SZTthc3luYyBmdW5jdGlvbiBOZShBLHQsSSxlKXtsZXQgZz1YdChBLHQsSSxlKSxyPVtdO3JldHVybiBnLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihvKXtpZihvLnR5cGU9PT1ELkJpbmFyeVN0cmVhbXx8by50eXBlPT09RC5CaW5hcnlGaWxlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKG4pfWVsc2UgaWYoby50eXBlPT09RC5JbWFnZSl7bGV0IG49by5kYXRhO3IucHVzaCguLi5fdChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELk1lc2gpe2xldCBuPW8uZGF0YTtyLnB1c2goLi4udnQobikpfWVsc2UgaWYoby50eXBlPT09RC5Qb2x5RGF0YSl7bGV0IG49by5kYXRhO3IucHVzaCguLi4kdChuKSl9fSksRkEoZyx6dChyLCEwKSl9dmFyIEFJPU5lO3ZhciBVZT17cnVuUGlwZWxpbmU6YXN5bmMgZnVuY3Rpb24oQSx0LEksZSxnLHIpe2xldCBvPWF3YWl0IHh0KEEsdCxyKTtyZXR1cm4gYXdhaXQgQUkobyxJLGUsZyl9fTtpQShVZSk7JTBBLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjolMEElMEFjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOiUwQSAgKCoqJTBBICAgKiBAbGljZW5zZSUwQSAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQyUwQSAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAlMEEgICAqKSUwQSovJTBBJztodChEdCk7ZXhwb3J0e0JpIGFzIGFwcGx5UHJlc2VudGF0aW9uU3RhdGVUb0ltYWdlLEYgYXMgZ2V0RGVmYXVsdFdlYldvcmtlcixoIGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLHcgYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCxjaSBhcyByZWFkRGljb21FbmNhcHN1bGF0ZWRQZGYsbWkgYXMgcmVhZERpY29tVGFncyx3aSBhcyByZWFkSW1hZ2VEaWNvbUZpbGVTZXJpZXMsbGUgYXMgcmVhZEltYWdlRGljb21GaWxlU2VyaWVzV29ya2VyRnVuY3Rpb24sRmkgYXMgcmVhZE92ZXJsYXBwaW5nU2VnbWVudGF0aW9uLFNpIGFzIHJlYWRTZWdtZW50YXRpb24sZUkgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixodCBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxfcyBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLGZpIGFzIHN0cnVjdHVyZWRSZXBvcnRUb0h0bWwscGkgYXMgc3RydWN0dXJlZFJlcG9ydFRvVGV4dCxSQSBhcyB2ZXJzaW9uLEdpIGFzIHdyaXRlTXVsdGlTZWdtZW50YXRpb24sTmkgYXMgd3JpdGVPdmVybGFwcGluZ1NlZ21lbnRhdGlvbixSaSBhcyB3cml0ZVNlZ21lbnRhdGlvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" +default_js_module = """data:text/javascript;base64,dmFyIFN0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIga3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlTdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEZ0PSI3LjIuMyIsUkE9RnQ7dmFyIGJ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sYj1idDt2YXIgUnQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFc9UnQ7ZnVuY3Rpb24gVXQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIGIuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBiLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIGIuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIGIuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBiLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBiLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgYi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBiLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIFcuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgVy5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIEc9VXQ7dmFyIE50PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sQmU9TnQ7dmFyIFVBPWNsYXNze2RpbWVuc2lvbjtjb21wb25lbnRUeXBlO3BpeGVsVHlwZTtjb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PWIuVUludDgscj1CZS5TY2FsYXIsbj0xKXt0aGlzLmRpbWVuc2lvbj1lLHRoaXMuY29tcG9uZW50VHlwZT10LHRoaXMucGl4ZWxUeXBlPXIsdGhpcy5jb21wb25lbnRzPW59fSx1ZT1VQTtmdW5jdGlvbiBUdChBLGUsdCxyLG4pe0Fbcit0KmVdPW59dmFyIGNlPVR0O3ZhciBOQT1jbGFzc3tpbWFnZVR5cGU7bmFtZT0iSW1hZ2UiO29yaWdpbjtzcGFjaW5nO2RpcmVjdGlvbjtzaXplO21ldGFkYXRhO2RhdGE7Y29uc3RydWN0b3IoZT1uZXcgdWUpe3RoaXMuaW1hZ2VUeXBlPWU7bGV0IHQ9ZS5kaW1lbnNpb247dGhpcy5vcmlnaW49bmV3IEFycmF5KHQpLHRoaXMub3JpZ2luLmZpbGwoMCksdGhpcy5zcGFjaW5nPW5ldyBBcnJheSh0KSx0aGlzLnNwYWNpbmcuZmlsbCgxKSx0aGlzLmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KHQqdCksdGhpcy5kaXJlY3Rpb24uZmlsbCgwKTtmb3IobGV0IHI9MDtyPHQ7cisrKWNlKHRoaXMuZGlyZWN0aW9uLHQscixyLDEpO3RoaXMuc2l6ZT1uZXcgQXJyYXkodCksdGhpcy5zaXplLmZpbGwoMCksdGhpcy5tZXRhZGF0YT1uZXcgTWFwLHRoaXMuZGF0YT1udWxsfX0sQ2U9TkE7ZnVuY3Rpb24gR3QoQSl7aWYoQS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgZT1BWzBdO2lmKGUuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgQ2UoZS5pbWFnZVR5cGUpO3Qub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLHQuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyk7bGV0IHI9dC5pbWFnZVR5cGUuZGltZW5zaW9uO3QuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCk7bGV0IG49ci0xO3Quc2l6ZT1BcnJheS5mcm9tKGUuc2l6ZSk7bGV0IGk9QS5yZWR1Y2UoKHMsYSk9PnMrYS5zaXplW25dLDApO3Quc2l6ZVtuXT1pO2xldCBvPXQuc2l6ZS5yZWR1Y2UoKHMsYSk9PnMqYSwxKSp0LmltYWdlVHlwZS5jb21wb25lbnRzLEk9ZS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgSShvKTtsZXQgYz10LmltYWdlVHlwZS5jb21wb25lbnRzO2ZvcihsZXQgcz0wO3M8dC5zaXplLmxlbmd0aC0xO3MrKyljKj10LnNpemVbc107bGV0IEI9MDtpZih0LmRhdGEhPW51bGwpZm9yKGxldCBzPTA7czxBLmxlbmd0aDtzKyspdC5kYXRhLnNldChBW3NdLmRhdGEsYypCKSxCKz1BW3NdLnNpemVbbl07ZWxzZSB0aHJvdyBFcnJvcigiQ291bGQgbm90IGNyZWF0ZSByZXN1bHQgaW1hZ2UgZGF0YS4iKTtyZXR1cm4gdH12YXIgVEE9R3Q7dmFyIEdBPWNsYXNze2Zjbjt3b3JrZXJRdWV1ZTtydW5JbmZvO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mY249dCx0aGlzLndvcmtlclF1ZXVlPW5ldyBBcnJheShlKSx0aGlzLndvcmtlclF1ZXVlLmZpbGwobnVsbCksdGhpcy5ydW5JbmZvPVtdfXJ1blRhc2tzKGUsdD1udWxsKXtsZXQgcj17dGFza1F1ZXVlOltdLHJlc3VsdHM6W10sYWRkaW5nVGFza3M6ITEscG9zdHBvbmVkOiExLHJ1bm5pbmdXb3JrZXJzOjAsaW5kZXg6MCxjb21wbGV0ZWRUYXNrczowLHByb2dyZXNzQ2FsbGJhY2s6dCxjYW5jZWxlZDohMX07cmV0dXJuIHRoaXMucnVuSW5mby5wdXNoKHIpLHIuaW5kZXg9dGhpcy5ydW5JbmZvLmxlbmd0aC0xLHtwcm9taXNlOm5ldyBQcm9taXNlKChuLGkpPT57ci5yZXNvbHZlPW4sci5yZWplY3Q9aSxyLnJlc3VsdHM9bmV3IEFycmF5KGUubGVuZ3RoKSxyLmNvbXBsZXRlZFRhc2tzPTAsci5hZGRpbmdUYXNrcz0hMCxlLmZvckVhY2goKG8sSSk9Pnt0aGlzLmFkZFRhc2soci5pbmRleCxJLG8pfSksci5hZGRpbmdUYXNrcz0hMX0pLHJ1bklkOnIuaW5kZXh9fXRlcm1pbmF0ZVdvcmtlcnMoKXtmb3IobGV0IGU9MDtlPHRoaXMud29ya2VyUXVldWUubGVuZ3RoO2UrKyl7bGV0IHQ9dGhpcy53b3JrZXJRdWV1ZVtlXTt0Py50ZXJtaW5hdGUoKSx0aGlzLndvcmtlclF1ZXVlW2VdPW51bGx9fWNhbmNlbChlKXtsZXQgdD10aGlzLnJ1bkluZm9bZV07dCE9bnVsbCYmKHQuY2FuY2VsZWQ9ITApfWFkZFRhc2soZSx0LHIpe2xldCBuPXRoaXMucnVuSW5mb1tlXTtpZihuPy5jYW5jZWxlZD09PSEwKXtuLnJlamVjdCgiUmVtYWluaW5nIHRhc2tzIGNhbmNlbGVkIiksdGhpcy5jbGVhclRhc2sobi5pbmRleCk7cmV0dXJufWlmKHRoaXMud29ya2VyUXVldWUubGVuZ3RoPjApe2xldCBpPXRoaXMud29ya2VyUXVldWUucG9wKCk7bi5ydW5uaW5nV29ya2VycysrLHJbci5sZW5ndGgtMV0ud2ViV29ya2VyPWksdGhpcy5mY24oLi4ucikudGhlbigoe3dlYldvcmtlcjpvLC4uLkl9KT0+e2lmKHRoaXMud29ya2VyUXVldWUucHVzaChvKSx0aGlzLnJ1bkluZm9bZV0hPT1udWxsKXtpZihuLnJ1bm5pbmdXb3JrZXJzLS0sbi5yZXN1bHRzW3RdPUksbi5jb21wbGV0ZWRUYXNrcysrLG4ucHJvZ3Jlc3NDYWxsYmFjayE9bnVsbCYmbi5wcm9ncmVzc0NhbGxiYWNrKG4uY29tcGxldGVkVGFza3Msbi5yZXN1bHRzLmxlbmd0aCksbi50YXNrUXVldWUubGVuZ3RoPjApe2xldCBjPW4udGFza1F1ZXVlLnNoaWZ0KCk7dGhpcy5hZGRUYXNrKGUsY1swXSxjWzFdKX1lbHNlIGlmKCFuLmFkZGluZ1Rhc2tzJiZuLnJ1bm5pbmdXb3JrZXJzPT09MCl7bGV0IGM9bi5yZXN1bHRzO24ucmVzb2x2ZShjKSx0aGlzLmNsZWFyVGFzayhuLmluZGV4KX19fSkuY2F0Y2gobz0+e24ucmVqZWN0KG8pLHRoaXMuY2xlYXJUYXNrKG4uaW5kZXgpfSl9ZWxzZSBuLnJ1bm5pbmdXb3JrZXJzIT09MHx8bi5wb3N0cG9uZWQ/bi50YXNrUXVldWUucHVzaChbdCxyXSk6KG4ucG9zdHBvbmVkPSEwLHNldFRpbWVvdXQoKCk9PntuLnBvc3Rwb25lZD0hMSx0aGlzLmFkZFRhc2sobi5pbmRleCx0LHIpfSw1MCkpfWNsZWFyVGFzayhlKXt0aGlzLnJ1bkluZm9bZV0ucmVzdWx0cz1bXSx0aGlzLnJ1bkluZm9bZV0udGFza1F1ZXVlPVtdLHRoaXMucnVuSW5mb1tlXS5wcm9ncmVzc0NhbGxiYWNrPW51bGwsdGhpcy5ydW5JbmZvW2VdLmNhbmNlbGVkPW51bGwsdGhpcy5ydW5JbmZvW2VdLnJlamVjdD0oKT0+e30sdGhpcy5ydW5JbmZvW2VdLnJlc29sdmU9KCk9Pnt9fX0sT0E9R0E7dmFyIE90PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sRT1PdDt2YXIgRWU9U3ltYm9sKCJDb21saW5rLnByb3h5IiksTHQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IikseEE9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLExBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxJQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIikscGU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsUHQ9e2NhbkhhbmRsZTpBPT5wZShBKSYmQVtFZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gbWUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLEpBKEEpfX0seHQ9e2NhbkhhbmRsZTpBPT5wZShBKSYmSUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LFFlPW5ldyBNYXAoW1sicHJveHkiLFB0XSxbInRocm93Iix4dF1dKTtmdW5jdGlvbiBKdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbWUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG4pe2lmKCFufHwhbi5kYXRhKXJldHVybjtpZighSnQodCxuLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7bi5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6aSx0eXBlOm8scGF0aDpJfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxuLmRhdGEpLGM9KG4uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoSCksQjt0cnl7bGV0IHM9SS5zbGljZSgwLC0xKS5yZWR1Y2UoKGYsbCk9PmZbbF0sQSksYT1JLnJlZHVjZSgoZixsKT0+ZltsXSxBKTtzd2l0Y2gobyl7Y2FzZSJHRVQiOkI9YTticmVhaztjYXNlIlNFVCI6c1tJLnNsaWNlKC0xKVswXV09SChuLmRhdGEudmFsdWUpLEI9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6Qj1hLmFwcGx5KHMsYyk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgYSguLi5jKTtCPXF0KGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpsfT1uZXcgTWVzc2FnZUNoYW5uZWw7bWUoQSxsKSxCPUhBKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOkI9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChzKXtCPXt2YWx1ZTpzLFtJQV06MH19UHJvbWlzZS5yZXNvbHZlKEIpLmNhdGNoKHM9Pih7dmFsdWU6cyxbSUFdOjB9KSkudGhlbihzPT57bGV0W2EsZl09QkEocyk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOml9KSxmKSxvPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxkZShlKSxMQSBpbiBBJiZ0eXBlb2YgQVtMQV09PSJmdW5jdGlvbiImJkFbTEFdKCkpfSkuY2F0Y2gocz0+e2xldFthLGZdPUJBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbSUFdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6aX0pLGYpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gSHQoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gZGUoQSl7SHQoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBKQShBLGUpe3JldHVybiBQQShBLFtdLGUpfWZ1bmN0aW9uIHNBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBoZShBKXtyZXR1cm4gWShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntkZShBKX0pfXZhciBnQT1uZXcgV2Vha01hcCxsQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oZ0EuZ2V0KEEpfHwwKS0xO2dBLnNldChBLGUpLGU9PT0wJiZoZShBKX0pO2Z1bmN0aW9uIE10KEEsZSl7bGV0IHQ9KGdBLmdldChlKXx8MCkrMTtnQS5zZXQoZSx0KSxsQSYmbEEucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIFd0KEEpe2xBJiZsQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIFBBKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbj1uZXcgUHJveHkodCx7Z2V0KGksbyl7aWYoc0Eociksbz09PXhBKXJldHVybigpPT57V3QobiksaGUoQSkscj0hMH07aWYobz09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5ufTtsZXQgST1ZKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChjPT5jLnRvU3RyaW5nKCkpfSkudGhlbihIKTtyZXR1cm4gSS50aGVuLmJpbmQoSSl9cmV0dXJuIFBBKEEsWy4uLmUsb10pfSxzZXQoaSxvLEkpe3NBKHIpO2xldFtjLEJdPUJBKEkpO3JldHVybiBZKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxvXS5tYXAocz0+cy50b1N0cmluZygpKSx2YWx1ZTpjfSxCKS50aGVuKEgpfSxhcHBseShpLG8sSSl7c0Eocik7bGV0IGM9ZVtlLmxlbmd0aC0xXTtpZihjPT09THQpcmV0dXJuIFkoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihIKTtpZihjPT09ImJpbmQiKXJldHVybiBQQShBLGUuc2xpY2UoMCwtMSkpO2xldFtCLHNdPWZlKEkpO3JldHVybiBZKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkJ9LHMpLnRoZW4oSCl9LGNvbnN0cnVjdChpLG8pe3NBKHIpO2xldFtJLGNdPWZlKG8pO3JldHVybiBZKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChCPT5CLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpJfSxjKS50aGVuKEgpfX0pO3JldHVybiBNdChuLEEpLG59ZnVuY3Rpb24gWXQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gZmUoQSl7bGV0IGU9QS5tYXAoQkEpO3JldHVybltlLm1hcCh0PT50WzBdKSxZdChlLm1hcCh0PT50WzFdKSldfXZhciB5ZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBIQShBLGUpe3JldHVybiB5ZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIHF0KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tFZV06ITB9KX1mdW5jdGlvbiBCQShBKXtmb3IobGV0W2UsdF1vZiBRZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isbl09dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sbl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LHllLmdldChBKXx8W11dfWZ1bmN0aW9uIEgoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gUWUuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBZKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBuPUt0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKG8peyFvLmRhdGF8fCFvLmRhdGEuaWR8fG8uZGF0YS5pZCE9PW58fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLHIoby5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpufSxlKSx0KX0pfWZ1bmN0aW9uIEt0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBYKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6dnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOllBfT1PYmplY3QsY0E9KEE9PmU9PntsZXQgdD12dC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTz1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+Y0EoZSk9PT1BKSxDQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6cX09QXJyYXksJD1DQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24ganQoQSl7cmV0dXJuIEEhPT1udWxsJiYhJChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiEkKEEuY29uc3RydWN0b3IpJiZUKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBrZT1PKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIF90KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYma2UoQS5idWZmZXIpLGV9dmFyIHp0PUNBKCJzdHJpbmciKSxUPUNBKCJmdW5jdGlvbiIpLEZlPUNBKCJudW1iZXIiKSxmQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLFZ0PUE9PkE9PT0hMHx8QT09PSExLHVBPUE9PntpZihjQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPVlBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LFp0PU8oIkRhdGUiKSxYdD1PKCJGaWxlIiksJHQ9TygiQmxvYiIpLEFyPU8oIkZpbGVMaXN0IiksZXI9QT0+ZkEoQSkmJlQoQS5waXBlKSx0cj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8VChBLmFwcGVuZCkmJigoZT1jQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJlQoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0scnI9TygiVVJMU2VhcmNoUGFyYW1zIiksaXI9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uIEFBKEEsZSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IHIsbjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSkscShBKSlmb3Iocj0wLG49QS5sZW5ndGg7cjxuO3IrKyllLmNhbGwobnVsbCxBW3JdLHIsQSk7ZWxzZXtsZXQgaT10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG89aS5sZW5ndGgsSTtmb3Iocj0wO3I8bztyKyspST1pW3JdLGUuY2FsbChudWxsLEFbSV0sSSxBKX19ZnVuY3Rpb24gYmUoQSxlKXtlPWUudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxyPXQubGVuZ3RoLG47Zm9yKDtyLS0gPjA7KWlmKG49dFtyXSxlPT09bi50b0xvd2VyQ2FzZSgpKXJldHVybiBuO3JldHVybiBudWxsfXZhciBSZT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLFVlPUE9PiEkKEEpJiZBIT09UmU7ZnVuY3Rpb24gV0EoKXtsZXR7Y2FzZWxlc3M6QX09VWUodGhpcykmJnRoaXN8fHt9LGU9e30sdD0ocixuKT0+e2xldCBpPUEmJmJlKGUsbil8fG47dUEoZVtpXSkmJnVBKHIpP2VbaV09V0EoZVtpXSxyKTp1QShyKT9lW2ldPVdBKHt9LHIpOnEocik/ZVtpXT1yLnNsaWNlKCk6ZVtpXT1yfTtmb3IobGV0IHI9MCxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKylhcmd1bWVudHNbcl0mJkFBKGFyZ3VtZW50c1tyXSx0KTtyZXR1cm4gZX12YXIgbnI9KEEsZSx0LHthbGxPd25LZXlzOnJ9PXt9KT0+KEFBKGUsKG4saSk9Pnt0JiZUKG4pP0FbaV09WChuLHQpOkFbaV09bn0se2FsbE93bktleXM6cn0pLEEpLG9yPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksYXI9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sc3I9KEEsZSx0LHIpPT57bGV0IG4saSxvLEk9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLGk9bi5sZW5ndGg7aS0tID4wOylvPW5baV0sKCFyfHxyKG8sQSxlKSkmJiFJW29dJiYoZVtvXT1BW29dLElbb109ITApO0E9dCE9PSExJiZZQShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0sSXI9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxncj1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYocShBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighRmUoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LGxyPShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZZQShVaW50OEFycmF5KSksQnI9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG47Zm9yKDsobj1yLm5leHQoKSkmJiFuLmRvbmU7KXtsZXQgaT1uLnZhbHVlO2UuY2FsbChBLGlbMF0saVsxXSl9fSx1cj0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxjcj1PKCJIVE1MRm9ybUVsZW1lbnQiKSxDcj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbil7cmV0dXJuIHIudG9VcHBlckNhc2UoKStufSksRGU9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLGZyPU8oIlJlZ0V4cCIpLE5lPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTtBQSh0LChuLGkpPT57bGV0IG87KG89ZShuLGksQSkpIT09ITEmJihyW2ldPW98fG4pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxyKX0sRXI9QT0+e05lKEEsKGUsdCk9PntpZihUKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YodCkhPT0tMSlyZXR1cm4hMTtsZXQgcj1BW3RdO2lmKFQocikpe2lmKGUuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gZSl7ZS53cml0YWJsZT0hMTtyZXR1cm59ZS5zZXR8fChlLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIit0KyInIil9KX19KX0scHI9KEEsZSk9PntsZXQgdD17fSxyPW49PntuLmZvckVhY2goaT0+e3RbaV09ITB9KX07cmV0dXJuIHEoQSk/cihBKTpyKFN0cmluZyhBKS5zcGxpdChlKSksdH0sUXI9KCk9Pnt9LG1yPShBLGUpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTplKSxNQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLFNlPSIwMTIzNDU2Nzg5IixUZT17RElHSVQ6U2UsQUxQSEE6TUEsQUxQSEFfRElHSVQ6TUErTUEudG9VcHBlckNhc2UoKStTZX0sZHI9KEE9MTYsZT1UZS5BTFBIQV9ESUdJVCk9PntsZXQgdD0iIix7bGVuZ3RoOnJ9PWU7Zm9yKDtBLS07KXQrPWVbTWF0aC5yYW5kb20oKSpyfDBdO3JldHVybiB0fTtmdW5jdGlvbiBocihBKXtyZXR1cm4hIShBJiZUKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgeXI9QT0+e2xldCBlPW5ldyBBcnJheSgxMCksdD0ocixuKT0+e2lmKGZBKHIpKXtpZihlLmluZGV4T2Yocik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiByKSl7ZVtuXT1yO2xldCBpPXEocik/W106e307cmV0dXJuIEFBKHIsKG8sSSk9PntsZXQgYz10KG8sbisxKTshJChjKSYmKGlbSV09Yyl9KSxlW25dPXZvaWQgMCxpfX1yZXR1cm4gcn07cmV0dXJuIHQoQSwwKX0sd3I9TygiQXN5bmNGdW5jdGlvbiIpLERyPUE9PkEmJihmQShBKXx8VChBKSkmJlQoQS50aGVuKSYmVChBLmNhdGNoKSxnPXtpc0FycmF5OnEsaXNBcnJheUJ1ZmZlcjprZSxpc0J1ZmZlcjpqdCxpc0Zvcm1EYXRhOnRyLGlzQXJyYXlCdWZmZXJWaWV3Ol90LGlzU3RyaW5nOnp0LGlzTnVtYmVyOkZlLGlzQm9vbGVhbjpWdCxpc09iamVjdDpmQSxpc1BsYWluT2JqZWN0OnVBLGlzVW5kZWZpbmVkOiQsaXNEYXRlOlp0LGlzRmlsZTpYdCxpc0Jsb2I6JHQsaXNSZWdFeHA6ZnIsaXNGdW5jdGlvbjpULGlzU3RyZWFtOmVyLGlzVVJMU2VhcmNoUGFyYW1zOnJyLGlzVHlwZWRBcnJheTpscixpc0ZpbGVMaXN0OkFyLGZvckVhY2g6QUEsbWVyZ2U6V0EsZXh0ZW5kOm5yLHRyaW06aXIsc3RyaXBCT006b3IsaW5oZXJpdHM6YXIsdG9GbGF0T2JqZWN0OnNyLGtpbmRPZjpjQSxraW5kT2ZUZXN0Ok8sZW5kc1dpdGg6SXIsdG9BcnJheTpncixmb3JFYWNoRW50cnk6QnIsbWF0Y2hBbGw6dXIsaXNIVE1MRm9ybTpjcixoYXNPd25Qcm9wZXJ0eTpEZSxoYXNPd25Qcm9wOkRlLHJlZHVjZURlc2NyaXB0b3JzOk5lLGZyZWV6ZU1ldGhvZHM6RXIsdG9PYmplY3RTZXQ6cHIsdG9DYW1lbENhc2U6Q3Isbm9vcDpRcix0b0Zpbml0ZU51bWJlcjptcixmaW5kS2V5OmJlLGdsb2JhbDpSZSxpc0NvbnRleHREZWZpbmVkOlVlLEFMUEhBQkVUOlRlLGdlbmVyYXRlU3RyaW5nOmRyLGlzU3BlY0NvbXBsaWFudEZvcm06aHIsdG9KU09OT2JqZWN0OnlyLGlzQXN5bmNGbjp3cixpc1RoZW5hYmxlOkRyfTtmdW5jdGlvbiBLKEEsZSx0LHIsbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG4mJih0aGlzLnJlc3BvbnNlPW4pfWcuaW5oZXJpdHMoSyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmcudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIEdlPUsucHJvdG90eXBlLE9lPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e09lW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEssT2UpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShHZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtLLmZyb209KEEsZSx0LHIsbixpKT0+e2xldCBvPU9iamVjdC5jcmVhdGUoR2UpO3JldHVybiBnLnRvRmxhdE9iamVjdChBLG8sZnVuY3Rpb24oYyl7cmV0dXJuIGMhPT1FcnJvci5wcm90b3R5cGV9LEk9PkkhPT0iaXNBeGlvc0Vycm9yIiksSy5jYWxsKG8sQS5tZXNzYWdlLGUsdCxyLG4pLG8uY2F1c2U9QSxvLm5hbWU9QS5uYW1lLGkmJk9iamVjdC5hc3NpZ24obyxpKSxvfTt2YXIgbT1LO3ZhciBFQT1udWxsO2Z1bmN0aW9uIHFBKEEpe3JldHVybiBnLmlzUGxhaW5PYmplY3QoQSl8fGcuaXNBcnJheShBKX1mdW5jdGlvbiBQZShBKXtyZXR1cm4gZy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBMZShBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG49UGUobiksIXQmJmk/IlsiK24rIl0iOm59KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIFNyKEEpe3JldHVybiBnLmlzQXJyYXkoQSkmJiFBLnNvbWUocUEpfXZhciBrcj1nLnRvRmxhdE9iamVjdChnLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gRnIoQSxlLHQpe2lmKCFnLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KEVBfHxGb3JtRGF0YSksdD1nLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24odSxwKXtyZXR1cm4hZy5pc1VuZGVmaW5lZChwW3VdKX0pO2xldCByPXQubWV0YVRva2VucyxuPXQudmlzaXRvcnx8cyxpPXQuZG90cyxvPXQuaW5kZXhlcyxjPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmcuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighZy5pc0Z1bmN0aW9uKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gQihDKXtpZihDPT09bnVsbClyZXR1cm4iIjtpZihnLmlzRGF0ZShDKSlyZXR1cm4gQy50b0lTT1N0cmluZygpO2lmKCFjJiZnLmlzQmxvYihDKSl0aHJvdyBuZXcgbSgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gZy5pc0FycmF5QnVmZmVyKEMpfHxnLmlzVHlwZWRBcnJheShDKT9jJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbQ10pOkJ1ZmZlci5mcm9tKEMpOkN9ZnVuY3Rpb24gcyhDLHUscCl7bGV0IFE9QztpZihDJiYhcCYmdHlwZW9mIEM9PSJvYmplY3QiKXtpZihnLmVuZHNXaXRoKHUsInt9IikpdT1yP3U6dS5zbGljZSgwLC0yKSxDPUpTT04uc3RyaW5naWZ5KEMpO2Vsc2UgaWYoZy5pc0FycmF5KEMpJiZTcihDKXx8KGcuaXNGaWxlTGlzdChDKXx8Zy5lbmRzV2l0aCh1LCJbXSIpKSYmKFE9Zy50b0FycmF5KEMpKSlyZXR1cm4gdT1QZSh1KSxRLmZvckVhY2goZnVuY3Rpb24oUyxaKXshKGcuaXNVbmRlZmluZWQoUyl8fFM9PT1udWxsKSYmZS5hcHBlbmQobz09PSEwP0xlKFt1XSxaLGkpOm89PT1udWxsP3U6dSsiW10iLEIoUykpfSksITF9cmV0dXJuIHFBKEMpPyEwOihlLmFwcGVuZChMZShwLHUsaSksQihDKSksITEpfWxldCBhPVtdLGY9T2JqZWN0LmFzc2lnbihrcix7ZGVmYXVsdFZpc2l0b3I6cyxjb252ZXJ0VmFsdWU6Qixpc1Zpc2l0YWJsZTpxQX0pO2Z1bmN0aW9uIGwoQyx1KXtpZighZy5pc1VuZGVmaW5lZChDKSl7aWYoYS5pbmRleE9mKEMpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK3Uuam9pbigiLiIpKTthLnB1c2goQyksZy5mb3JFYWNoKEMsZnVuY3Rpb24oUSxkKXsoIShnLmlzVW5kZWZpbmVkKFEpfHxRPT09bnVsbCkmJm4uY2FsbChlLFEsZy5pc1N0cmluZyhkKT9kLnRyaW0oKTpkLHUsZikpPT09ITAmJmwoUSx1P3UuY29uY2F0KGQpOltkXSl9KSxhLnBvcCgpfX1pZighZy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIGwoQSksZX12YXIgUD1GcjtmdW5jdGlvbiB4ZShBKXtsZXQgZT17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihyKXtyZXR1cm4gZVtyXX0pfWZ1bmN0aW9uIEplKEEsZSl7dGhpcy5fcGFpcnM9W10sQSYmUChBLHRoaXMsZSl9dmFyIEhlPUplLnByb3RvdHlwZTtIZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wYWlycy5wdXNoKFtlLHRdKX07SGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7bGV0IHQ9ZT9mdW5jdGlvbihyKXtyZXR1cm4gZS5jYWxsKHRoaXMscix4ZSl9OnhlO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQoblswXSkrIj0iK3QoblsxXSl9LCIiKS5qb2luKCImIil9O3ZhciBwQT1KZTtmdW5jdGlvbiBicihBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1mdW5jdGlvbiBlQShBLGUsdCl7aWYoIWUpcmV0dXJuIEE7bGV0IHI9dCYmdC5lbmNvZGV8fGJyLG49dCYmdC5zZXJpYWxpemUsaTtpZihuP2k9bihlLHQpOmk9Zy5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IHBBKGUsdCkudG9TdHJpbmcociksaSl7bGV0IG89QS5pbmRleE9mKCIjIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK2l9cmV0dXJuIEF9dmFyIEtBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6cj9yLnN5bmNocm9ub3VzOiExLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXtnLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihyKXtyIT09bnVsbCYmZShyKX0pfX0sdkE9S0E7dmFyIFFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgTWU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOnBBO3ZhciBXZT10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIFllPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIHFlPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOk1lLEZvcm1EYXRhOldlLEJsb2I6WWV9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgakE9e307a3QoakEse2hhc0Jyb3dzZXJFbnY6KCk9PktlLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+UnIsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5Vcn0pO3ZhciBLZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixScj0oQT0+S2UmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxVcj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIFI9ey4uLmpBLC4uLnFlfTtmdW5jdGlvbiBfQShBLGUpe3JldHVybiBQKEEsbmV3IFIuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LHIsbixpKXtyZXR1cm4gUi5pc05vZGUmJmcuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKHIsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTppLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBOcihBKXtyZXR1cm4gZy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIFRyKEEpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMoQSkscixuPXQubGVuZ3RoLGk7Zm9yKHI9MDtyPG47cisrKWk9dFtyXSxlW2ldPUFbaV07cmV0dXJuIGV9ZnVuY3Rpb24gR3IoQSl7ZnVuY3Rpb24gZSh0LHIsbixpKXtsZXQgbz10W2krK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBJPU51bWJlci5pc0Zpbml0ZSgrbyksYz1pPj10Lmxlbmd0aDtyZXR1cm4gbz0hbyYmZy5pc0FycmF5KG4pP24ubGVuZ3RoOm8sYz8oZy5oYXNPd25Qcm9wKG4sbyk/bltvXT1bbltvXSxyXTpuW29dPXIsIUkpOigoIW5bb118fCFnLmlzT2JqZWN0KG5bb10pKSYmKG5bb109W10pLGUodCxyLG5bb10saSkmJmcuaXNBcnJheShuW29dKSYmKG5bb109VHIobltvXSkpLCFJKX1pZihnLmlzRm9ybURhdGEoQSkmJmcuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gZy5mb3JFYWNoRW50cnkoQSwocixuKT0+e2UoTnIociksbix0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgbUE9R3I7ZnVuY3Rpb24gT3IoQSxlLHQpe2lmKGcuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxnLnRyaW0oQSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIHpBPXt0cmFuc2l0aW9uYWw6UUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxpPWcuaXNPYmplY3QoZSk7aWYoaSYmZy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLGcuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShtQShlKSk6ZTtpZihnLmlzQXJyYXlCdWZmZXIoZSl8fGcuaXNCdWZmZXIoZSl8fGcuaXNTdHJlYW0oZSl8fGcuaXNGaWxlKGUpfHxnLmlzQmxvYihlKSlyZXR1cm4gZTtpZihnLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihnLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgSTtpZihpKXtpZihyLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBfQShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEk9Zy5pc0ZpbGVMaXN0KGUpKXx8ci5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBjPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gUChJP3siZmlsZXNbXSI6ZX06ZSxjJiZuZXcgYyx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIGl8fG4/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxPcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8ekEudHJhbnNpdGlvbmFsLHI9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxuPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJmcuaXNTdHJpbmcoZSkmJihyJiYhdGhpcy5yZXNwb25zZVR5cGV8fG4pKXtsZXQgbz0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChJKXtpZihvKXRocm93IEkubmFtZT09PSJTeW50YXhFcnJvciI/bS5mcm9tKEksbS5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpJfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6Ui5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6Ui5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Zy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9Pnt6QS5oZWFkZXJzW0FdPXt9fSk7dmFyIHY9ekE7dmFyIExyPWcudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksdmU9QT0+e2xldCBlPXt9LHQscixuO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihvKXtuPW8uaW5kZXhPZigiOiIpLHQ9by5zdWJzdHJpbmcoMCxuKS50cmltKCkudG9Mb3dlckNhc2UoKSxyPW8uc3Vic3RyaW5nKG4rMSkudHJpbSgpLCEoIXR8fGVbdF0mJkxyW3RdKSYmKHQ9PT0ic2V0LWNvb2tpZSI/ZVt0XT9lW3RdLnB1c2gocik6ZVt0XT1bcl06ZVt0XT1lW3RdP2VbdF0rIiwgIityOnIpfSksZX07dmFyIGplPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gdEEoQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBkQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6Zy5pc0FycmF5KEEpP0EubWFwKGRBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gUHIoQSl7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2cscjtmb3IoO3I9dC5leGVjKEEpOyllW3JbMV1dPXJbMl07cmV0dXJuIGV9dmFyIHhyPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIFZBKEEsZSx0LHIsbil7aWYoZy5pc0Z1bmN0aW9uKHIpKXJldHVybiByLmNhbGwodGhpcyxlLHQpO2lmKG4mJihlPXQpLCEhZy5pc1N0cmluZyhlKSl7aWYoZy5pc1N0cmluZyhyKSlyZXR1cm4gZS5pbmRleE9mKHIpIT09LTE7aWYoZy5pc1JlZ0V4cChyKSlyZXR1cm4gci50ZXN0KGUpfX1mdW5jdGlvbiBKcihBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLChlLHQscik9PnQudG9VcHBlckNhc2UoKStyKX1mdW5jdGlvbiBIcihBLGUpe2xldCB0PWcudG9DYW1lbENhc2UoIiAiK2UpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChyPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEscit0LHt2YWx1ZTpmdW5jdGlvbihuLGksbyl7cmV0dXJuIHRoaXNbcl0uY2FsbCh0aGlzLGUsbixpLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBqPWNsYXNze2NvbnN0cnVjdG9yKGUpe2UmJnRoaXMuc2V0KGUpfXNldChlLHQscil7bGV0IG49dGhpcztmdW5jdGlvbiBpKEksYyxCKXtsZXQgcz10QShjKTtpZighcyl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGE9Zy5maW5kS2V5KG4scyk7KCFhfHxuW2FdPT09dm9pZCAwfHxCPT09ITB8fEI9PT12b2lkIDAmJm5bYV0hPT0hMSkmJihuW2F8fGNdPWRBKEkpKX1sZXQgbz0oSSxjKT0+Zy5mb3JFYWNoKEksKEIscyk9PmkoQixzLGMpKTtyZXR1cm4gZy5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKGUsdCk6Zy5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYheHIoZSk/byh2ZShlKSx0KTplIT1udWxsJiZpKHQsZSxyKSx0aGlzfWdldChlLHQpe2lmKGU9dEEoZSksZSl7bGV0IHI9Zy5maW5kS2V5KHRoaXMsZSk7aWYocil7bGV0IG49dGhpc1tyXTtpZighdClyZXR1cm4gbjtpZih0PT09ITApcmV0dXJuIFByKG4pO2lmKGcuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsbixyKTtpZihnLmlzUmVnRXhwKHQpKXJldHVybiB0LmV4ZWMobik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHQpe2lmKGU9dEEoZSksZSl7bGV0IHI9Zy5maW5kS2V5KHRoaXMsZSk7cmV0dXJuISEociYmdGhpc1tyXSE9PXZvaWQgMCYmKCF0fHxWQSh0aGlzLHRoaXNbcl0scix0KSkpfXJldHVybiExfWRlbGV0ZShlLHQpe2xldCByPXRoaXMsbj0hMTtmdW5jdGlvbiBpKG8pe2lmKG89dEEobyksbyl7bGV0IEk9Zy5maW5kS2V5KHIsbyk7SSYmKCF0fHxWQShyLHJbSV0sSSx0KSkmJihkZWxldGUgcltJXSxuPSEwKX19cmV0dXJuIGcuaXNBcnJheShlKT9lLmZvckVhY2goaSk6aShlKSxufWNsZWFyKGUpe2xldCB0PU9iamVjdC5rZXlzKHRoaXMpLHI9dC5sZW5ndGgsbj0hMTtmb3IoO3ItLTspe2xldCBpPXRbcl07KCFlfHxWQSh0aGlzLHRoaXNbaV0saSxlLCEwKSkmJihkZWxldGUgdGhpc1tpXSxuPSEwKX1yZXR1cm4gbn1ub3JtYWxpemUoZSl7bGV0IHQ9dGhpcyxyPXt9O3JldHVybiBnLmZvckVhY2godGhpcywobixpKT0+e2xldCBvPWcuZmluZEtleShyLGkpO2lmKG8pe3Rbb109ZEEobiksZGVsZXRlIHRbaV07cmV0dXJufWxldCBJPWU/SnIoaSk6U3RyaW5nKGkpLnRyaW0oKTtJIT09aSYmZGVsZXRlIHRbaV0sdFtJXT1kQShuKSxyW0ldPSEwfSksdGhpc31jb25jYXQoLi4uZSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uZSl9dG9KU09OKGUpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGcuZm9yRWFjaCh0aGlzLChyLG4pPT57ciE9bnVsbCYmciE9PSExJiYodFtuXT1lJiZnLmlzQXJyYXkocik/ci5qb2luKCIsICIpOnIpfSksdH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbZSx0XSk9PmUrIjogIit0KS5qb2luKGAKYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXM/ZTpuZXcgdGhpcyhlKX1zdGF0aWMgY29uY2F0KGUsLi4udCl7bGV0IHI9bmV3IHRoaXMoZSk7cmV0dXJuIHQuZm9yRWFjaChuPT5yLnNldChuKSkscn1zdGF0aWMgYWNjZXNzb3IoZSl7bGV0IHI9KHRoaXNbamVdPXRoaXNbamVdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBpKG8pe2xldCBJPXRBKG8pO3JbSV18fChIcihuLG8pLHJbSV09ITApfXJldHVybiBnLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSksdGhpc319O2ouYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO2cucmVkdWNlRGVzY3JpcHRvcnMoai5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHIpe3RoaXNbdF09cn19fSk7Zy5mcmVlemVNZXRob2RzKGopO3ZhciBVPWo7ZnVuY3Rpb24gckEoQSxlKXtsZXQgdD10aGlzfHx2LHI9ZXx8dCxuPVUuZnJvbShyLmhlYWRlcnMpLGk9ci5kYXRhO3JldHVybiBnLmZvckVhY2goQSxmdW5jdGlvbihJKXtpPUkuY2FsbCh0LGksbi5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxuLm5vcm1hbGl6ZSgpLGl9ZnVuY3Rpb24gaUEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBfZShBLGUsdCl7bS5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixtLkVSUl9DQU5DRUxFRCxlLHQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Zy5pbmhlcml0cyhfZSxtLHtfX0NBTkNFTF9fOiEwfSk7dmFyIHg9X2U7ZnVuY3Rpb24gWkEoQSxlLHQpe2xldCByPXQuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyF0LnN0YXR1c3x8IXJ8fHIodC5zdGF0dXMpP0EodCk6ZShuZXcgbSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Quc3RhdHVzLFttLkVSUl9CQURfUkVRVUVTVCxtLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IodC5zdGF0dXMvMTAwKS00XSx0LmNvbmZpZyx0LnJlcXVlc3QsdCkpfXZhciB6ZT1SLmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHQscixuLGkpe2xldCBvPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO2cuaXNOdW1iZXIodCkmJm8ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHQpLnRvR01UU3RyaW5nKCkpLGcuaXNTdHJpbmcocikmJm8ucHVzaCgicGF0aD0iK3IpLGcuaXNTdHJpbmcobikmJm8ucHVzaCgiZG9tYWluPSIrbiksaT09PSEwJiZvLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1vLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBYQShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uICRBKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiBuQShBLGUpe3JldHVybiBBJiYhWEEoZSk/JEEoQSxlKTplfXZhciBWZT1SLmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikscjtmdW5jdGlvbiBuKGkpe2xldCBvPWk7cmV0dXJuIGUmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIHI9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IEk9Zy5pc1N0cmluZyhvKT9uKG8pOm87cmV0dXJuIEkucHJvdG9jb2w9PT1yLnByb3RvY29sJiZJLmhvc3Q9PT1yLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIEFlKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBNcihBLGUpe0E9QXx8MTA7bGV0IHQ9bmV3IEFycmF5KEEpLHI9bmV3IEFycmF5KEEpLG49MCxpPTAsbztyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKGMpe2xldCBCPURhdGUubm93KCkscz1yW2ldO298fChvPUIpLHRbbl09YyxyW25dPUI7bGV0IGE9aSxmPTA7Zm9yKDthIT09bjspZis9dFthKytdLGE9YSVBO2lmKG49KG4rMSklQSxuPT09aSYmKGk9KGkrMSklQSksQi1vPGUpcmV0dXJuO2xldCBsPXMmJkItcztyZXR1cm4gbD9NYXRoLnJvdW5kKGYqMWUzL2wpOnZvaWQgMH19dmFyIFplPU1yO2Z1bmN0aW9uIFhlKEEsZSl7bGV0IHQ9MCxyPVplKDUwLDI1MCk7cmV0dXJuIG49PntsZXQgaT1uLmxvYWRlZCxvPW4ubGVuZ3RoQ29tcHV0YWJsZT9uLnRvdGFsOnZvaWQgMCxJPWktdCxjPXIoSSksQj1pPD1vO3Q9aTtsZXQgcz17bG9hZGVkOmksdG90YWw6byxwcm9ncmVzczpvP2kvbzp2b2lkIDAsYnl0ZXM6SSxyYXRlOmN8fHZvaWQgMCxlc3RpbWF0ZWQ6YyYmbyYmQj8oby1pKS9jOnZvaWQgMCxldmVudDpufTtzW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShzKX19dmFyIFdyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsJGU9V3ImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe2xldCBuPUEuZGF0YSxpPVUuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOkl9PUEsYztmdW5jdGlvbiBCKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShjKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpfWxldCBzO2lmKGcuaXNGb3JtRGF0YShuKSl7aWYoUi5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fFIuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKHM9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbdSwuLi5wXT1zP3Muc3BsaXQoIjsiKS5tYXAoUT0+US50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFt1fHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4ucF0uam9pbigiOyAiKSl9fWxldCBhPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCB1PUEuYXV0aC51c2VybmFtZXx8IiIscD1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO2kuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKHUrIjoiK3ApKX1sZXQgZj1uQShBLmJhc2VVUkwsQS51cmwpO2Eub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLGVBKGYsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYS50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBsKCl7aWYoIWEpcmV0dXJuO2xldCB1PVUuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGEmJmEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLFE9e2RhdGE6IW98fG89PT0idGV4dCJ8fG89PT0ianNvbiI/YS5yZXNwb25zZVRleHQ6YS5yZXNwb25zZSxzdGF0dXM6YS5zdGF0dXMsc3RhdHVzVGV4dDphLnN0YXR1c1RleHQsaGVhZGVyczp1LGNvbmZpZzpBLHJlcXVlc3Q6YX07WkEoZnVuY3Rpb24oUyl7dChTKSxCKCl9LGZ1bmN0aW9uKFMpe3IoUyksQigpfSxRKSxhPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBhP2Eub25sb2FkZW5kPWw6YS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshYXx8YS5yZWFkeVN0YXRlIT09NHx8YS5zdGF0dXM9PT0wJiYhKGEucmVzcG9uc2VVUkwmJmEucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KGwpfSxhLm9uYWJvcnQ9ZnVuY3Rpb24oKXthJiYocihuZXcgbSgiUmVxdWVzdCBhYm9ydGVkIixtLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGwpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBtKCJOZXR3b3JrIEVycm9yIixtLkVSUl9ORVRXT1JLLEEsYSkpLGE9bnVsbH0sYS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgcD1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsUT1BLnRyYW5zaXRpb25hbHx8UUE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYocD1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIobmV3IG0ocCxRLmNsYXJpZnlUaW1lb3V0RXJyb3I/bS5FVElNRURPVVQ6bS5FQ09OTkFCT1JURUQsQSxhKSksYT1udWxsfSxSLmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKEkmJmcuaXNGdW5jdGlvbihJKSYmKEk9SShBKSksSXx8SSE9PSExJiZWZShmKSkpe2xldCB1PUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJnplLnJlYWQoQS54c3JmQ29va2llTmFtZSk7dSYmaS5zZXQoQS54c3JmSGVhZGVyTmFtZSx1KX1uPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGEmJmcuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKHAsUSl7YS5zZXRSZXF1ZXN0SGVhZGVyKFEscCl9KSxnLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KGEud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLG8mJm8hPT0ianNvbiImJihhLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZhLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixYZShBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEudXBsb2FkJiZhLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsWGUoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGM9dT0+e2EmJihyKCF1fHx1LnR5cGU/bmV3IHgobnVsbCxBLGEpOnUpLGEuYWJvcnQoKSxhPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShjKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/YygpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixjKSkpO2xldCBDPUFlKGYpO2lmKEMmJlIucHJvdG9jb2xzLmluZGV4T2YoQyk9PT0tMSl7cihuZXcgbSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitDKyI6IixtLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWEuc2VuZChufHxudWxsKX0pfTt2YXIgZWU9e2h0dHA6RUEseGhyOiRlfTtnLmZvckVhY2goZWUsKEEsZSk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTplfSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOmV9KX19KTt2YXIgQXQ9QT0+YC0gJHtBfWAsWXI9QT0+Zy5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLGhBPXtnZXRBZGFwdGVyOkE9PntBPWcuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOmV9PUEsdCxyLG49e307Zm9yKGxldCBpPTA7aTxlO2krKyl7dD1BW2ldO2xldCBvO2lmKHI9dCwhWXIodCkmJihyPWVlWyhvPVN0cmluZyh0KSkudG9Mb3dlckNhc2UoKV0scj09PXZvaWQgMCkpdGhyb3cgbmV3IG0oYFVua25vd24gYWRhcHRlciAnJHtvfSdgKTtpZihyKWJyZWFrO25bb3x8IiMiK2ldPXJ9aWYoIXIpe2xldCBpPU9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW0ksY10pPT5gYWRhcHRlciAke0l9IGArKGM9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPWU/aS5sZW5ndGg+MT9gc2luY2UgOgpgK2kubWFwKEF0KS5qb2luKGAKYCk6IiAiK0F0KGlbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IG0oIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gcn0sYWRhcHRlcnM6ZWV9O2Z1bmN0aW9uIHRlKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyB4KG51bGwsQSl9ZnVuY3Rpb24geUEoQSl7cmV0dXJuIHRlKEEpLEEuaGVhZGVycz1VLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9ckEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGhBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHx2LmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIHRlKEEpLHIuZGF0YT1yQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyKSxyLmhlYWRlcnM9VS5mcm9tKHIuaGVhZGVycykscn0sZnVuY3Rpb24ocil7cmV0dXJuIGlBKHIpfHwodGUoQSksciYmci5yZXNwb25zZSYmKHIucmVzcG9uc2UuZGF0YT1yQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyLnJlc3BvbnNlKSxyLnJlc3BvbnNlLmhlYWRlcnM9VS5mcm9tKHIucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChyKX0pfXZhciBldD1BPT5BIGluc3RhbmNlb2YgVT97Li4uQX06QTtmdW5jdGlvbiBMKEEsZSl7ZT1lfHx7fTtsZXQgdD17fTtmdW5jdGlvbiByKEIscyxhKXtyZXR1cm4gZy5pc1BsYWluT2JqZWN0KEIpJiZnLmlzUGxhaW5PYmplY3Qocyk/Zy5tZXJnZS5jYWxsKHtjYXNlbGVzczphfSxCLHMpOmcuaXNQbGFpbk9iamVjdChzKT9nLm1lcmdlKHt9LHMpOmcuaXNBcnJheShzKT9zLnNsaWNlKCk6c31mdW5jdGlvbiBuKEIscyxhKXtpZihnLmlzVW5kZWZpbmVkKHMpKXtpZighZy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gcih2b2lkIDAsQixhKX1lbHNlIHJldHVybiByKEIscyxhKX1mdW5jdGlvbiBpKEIscyl7aWYoIWcuaXNVbmRlZmluZWQocykpcmV0dXJuIHIodm9pZCAwLHMpfWZ1bmN0aW9uIG8oQixzKXtpZihnLmlzVW5kZWZpbmVkKHMpKXtpZighZy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gcih2b2lkIDAsQil9ZWxzZSByZXR1cm4gcih2b2lkIDAscyl9ZnVuY3Rpb24gSShCLHMsYSl7aWYoYSBpbiBlKXJldHVybiByKEIscyk7aWYoYSBpbiBBKXJldHVybiByKHZvaWQgMCxCKX1sZXQgYz17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpJLGhlYWRlcnM6KEIscyk9Pm4oZXQoQiksZXQocyksITApfTtyZXR1cm4gZy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSxlKSksZnVuY3Rpb24ocyl7bGV0IGE9Y1tzXXx8bixmPWEoQVtzXSxlW3NdLHMpO2cuaXNVbmRlZmluZWQoZikmJmEhPT1JfHwodFtzXT1mKX0pLHR9dmFyIHdBPSIxLjYuOCI7dmFyIHJlPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e3JlW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciB0dD17fTtyZS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oaSxvKXtyZXR1cm4iW0F4aW9zIHYiK3dBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIraSsiJyIrbysocj8iLiAiK3I6IiIpfXJldHVybihpLG8sSSk9PntpZihlPT09ITEpdGhyb3cgbmV3IG0obihvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxtLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIXR0W29dJiYodHRbb109ITAsY29uc29sZS53YXJuKG4obywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UoaSxvLEkpOiEwfX07ZnVuY3Rpb24gcXIoQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgbSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsbS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksbj1yLmxlbmd0aDtmb3IoO24tLSA+MDspe2xldCBpPXJbbl0sbz1lW2ldO2lmKG8pe2xldCBJPUFbaV0sYz1JPT09dm9pZCAwfHxvKEksaSxBKTtpZihjIT09ITApdGhyb3cgbmV3IG0oIm9wdGlvbiAiK2krIiBtdXN0IGJlICIrYyxtLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IG0oIlVua25vd24gb3B0aW9uICIraSxtLkVSUl9CQURfT1BUSU9OKX19dmFyIERBPXthc3NlcnRPcHRpb25zOnFyLHZhbGlkYXRvcnM6cmV9O3ZhciBKPURBLnZhbGlkYXRvcnMsXz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IHZBLHJlc3BvbnNlOm5ldyB2QX19YXN5bmMgcmVxdWVzdChlLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG47RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3I7bGV0IGk9bi5zdGFjaz9uLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7ci5zdGFjaz9pJiYhU3RyaW5nKHIuc3RhY2spLmVuZHNXaXRoKGkucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYoci5zdGFjays9YApgK2kpOnIuc3RhY2s9aX10aHJvdyByfX1fcmVxdWVzdChlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LHQ9TCh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm4saGVhZGVyczppfT10O3IhPT12b2lkIDAmJkRBLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6Si50cmFuc2l0aW9uYWwoSi5ib29sZWFuKX0sITEpLG4hPW51bGwmJihnLmlzRnVuY3Rpb24obik/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bn06REEuYXNzZXJ0T3B0aW9ucyhuLHtlbmNvZGU6Si5mdW5jdGlvbixzZXJpYWxpemU6Si5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1pJiZnLm1lcmdlKGkuY29tbW9uLGlbdC5tZXRob2RdKTtpJiZnLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sQz0+e2RlbGV0ZSBpW0NdfSksdC5oZWFkZXJzPVUuY29uY2F0KG8saSk7bGV0IEk9W10sYz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24odSl7dHlwZW9mIHUucnVuV2hlbj09ImZ1bmN0aW9uIiYmdS5ydW5XaGVuKHQpPT09ITF8fChjPWMmJnUuc3luY2hyb25vdXMsSS51bnNoaWZ0KHUuZnVsZmlsbGVkLHUucmVqZWN0ZWQpKX0pO2xldCBCPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24odSl7Qi5wdXNoKHUuZnVsZmlsbGVkLHUucmVqZWN0ZWQpfSk7bGV0IHMsYT0wLGY7aWYoIWMpe2xldCBDPVt5QS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEMudW5zaGlmdC5hcHBseShDLEkpLEMucHVzaC5hcHBseShDLEIpLGY9Qy5sZW5ndGgscz1Qcm9taXNlLnJlc29sdmUodCk7YTxmOylzPXMudGhlbihDW2ErK10sQ1thKytdKTtyZXR1cm4gc31mPUkubGVuZ3RoO2xldCBsPXQ7Zm9yKGE9MDthPGY7KXtsZXQgQz1JW2ErK10sdT1JW2ErK107dHJ5e2w9QyhsKX1jYXRjaChwKXt1LmNhbGwodGhpcyxwKTticmVha319dHJ5e3M9eUEuY2FsbCh0aGlzLGwpfWNhdGNoKEMpe3JldHVybiBQcm9taXNlLnJlamVjdChDKX1mb3IoYT0wLGY9Qi5sZW5ndGg7YTxmOylzPXMudGhlbihCW2ErK10sQlthKytdKTtyZXR1cm4gc31nZXRVcmkoZSl7ZT1MKHRoaXMuZGVmYXVsdHMsZSk7bGV0IHQ9bkEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gZUEodCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07Zy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtfLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoTChyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSk7Zy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gZnVuY3Rpb24oaSxvLEkpe3JldHVybiB0aGlzLnJlcXVlc3QoTChJfHx7fSx7bWV0aG9kOmUsaGVhZGVyczpyP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDppLGRhdGE6b30pKX19Xy5wcm90b3R5cGVbZV09dCgpLF8ucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKX0pO3ZhciBvQT1fO3ZhciBpZT1jbGFzcyBBe2NvbnN0cnVjdG9yKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSl7dD1pfSk7bGV0IHI9dGhpczt0aGlzLnByb21pc2UudGhlbihuPT57aWYoIXIuX2xpc3RlbmVycylyZXR1cm47bGV0IGk9ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO2ktLSA+MDspci5fbGlzdGVuZXJzW2ldKG4pO3IuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49bj0+e2xldCBpLG89bmV3IFByb21pc2UoST0+e3Iuc3Vic2NyaWJlKEkpLGk9SX0pLnRoZW4obik7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZShpKX0sb30sZShmdW5jdGlvbihpLG8sSSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgeChpLG8sSSksdChyLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfXVuc3Vic2NyaWJlKGUpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgZTtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24obil7ZT1ufSksY2FuY2VsOmV9fX0scnQ9aWU7ZnVuY3Rpb24gbmUoQSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uIG9lKEEpe3JldHVybiBnLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBhZT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoYWUpLmZvckVhY2goKFtBLGVdKT0+e2FlW2VdPUF9KTt2YXIgaXQ9YWU7ZnVuY3Rpb24gbnQoQSl7bGV0IGU9bmV3IG9BKEEpLHQ9WChvQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gZy5leHRlbmQodCxvQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLGcuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIG50KEwoQSxuKSl9LHR9dmFyIEQ9bnQodik7RC5BeGlvcz1vQTtELkNhbmNlbGVkRXJyb3I9eDtELkNhbmNlbFRva2VuPXJ0O0QuaXNDYW5jZWw9aUE7RC5WRVJTSU9OPXdBO0QudG9Gb3JtRGF0YT1QO0QuQXhpb3NFcnJvcj1tO0QuQ2FuY2VsPUQuQ2FuY2VsZWRFcnJvcjtELmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O0Quc3ByZWFkPW5lO0QuaXNBeGlvc0Vycm9yPW9lO0QubWVyZ2VDb25maWc9TDtELkF4aW9zSGVhZGVycz1VO0QuZm9ybVRvSlNPTj1BPT5tQShnLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO0QuZ2V0QWRhcHRlcj1oQS5nZXRBZGFwdGVyO0QuSHR0cFN0YXR1c0NvZGU9aXQ7RC5kZWZhdWx0PUQ7dmFyIHo9RDt2YXJ7QXhpb3M6WWEsQXhpb3NFcnJvcjpxYSxDYW5jZWxlZEVycm9yOkthLGlzQ2FuY2VsOnZhLENhbmNlbFRva2VuOmphLFZFUlNJT046X2EsYWxsOnphLENhbmNlbDpWYSxpc0F4aW9zRXJyb3I6WmEsc3ByZWFkOlhhLHRvRm9ybURhdGE6JGEsQXhpb3NIZWFkZXJzOkFzLEh0dHBTdGF0dXNDb2RlOmVzLGZvcm1Ub0pTT046dHMsZ2V0QWRhcHRlcjpycyxtZXJnZUNvbmZpZzppc309ejthc3luYyBmdW5jdGlvbiBLcihBLGUpe2xldCB0PUEscj1udWxsO2lmKHQ9PW51bGwpcj1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG49YXdhaXQgei5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChuLmRhdGEpO3I9bmV3IFdvcmtlcihpLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBhQT1LcjtmdW5jdGlvbiBvdChBKXtsZXQgZT1KQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W3hBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIHZyKEEsZSx0KXtsZXQgcjtpZihBIT1udWxsKXtsZXQgaT1BO3JldHVybiBpLndvcmtlclByb3h5IT09dm9pZCAwPyhyPWkud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOml9KTpvdChBKX1sZXQgbj1hd2FpdCBhQShlLHQpO3JldHVybiBvdChuKX12YXIgYXQ9dnI7YXN5bmMgZnVuY3Rpb24ganIoQSxlLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/cj1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/cj1BOnI9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBuPWAke3J9Lndhc21gLG89KGF3YWl0IHouZ2V0KG4se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om99KX12YXIgc3Q9anI7dmFyIEl0PWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBCdD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixndD1uZXcgVGV4dEVuY29kZXIsbHQ9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIF9yKEEsZSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1BLmZzX29wZW4oZSx0LmZsYWdzKSxpPUEuZnNfc3RhdChlKS5zaXplLG89bnVsbDtCdD9vPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihpKTpvPW5ldyBBcnJheUJ1ZmZlcihpKTtsZXQgST1uZXcgVWludDhBcnJheShvKTtyZXR1cm4gQS5mc19yZWFkKHIsSSwwLGksMCksQS5mc19jbG9zZShyKSxJfWZ1bmN0aW9uIHV0KEEsZSx0KXtsZXQgcj1udWxsO0J0P3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBuPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUsdCk7cmV0dXJuIG4uc2V0KGkpLG59ZnVuY3Rpb24gayhBLGUsdCxyKXtsZXQgbj0wO3JldHVybiBlIT09bnVsbCYmKG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG4pKSxufWZ1bmN0aW9uIE0oQSxlLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KGUpLG49QS5sZW5ndGhCeXRlc1VURjgocikrMSxpPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxuXSk7QS5zdHJpbmdUb1VURjgocixpLG4pfWZ1bmN0aW9uIE4oQSxlLHQscil7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksaT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxvPXV0KEEsbixpKTtyZXR1cm4gRyhyLG8uYnVmZmVyKX1mdW5jdGlvbiBTQShBLGUpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLHI9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24genIoQSxlLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKEIscyl7c3dpdGNoKEIudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBhPWd0LmVuY29kZShCLmRhdGEuZGF0YSksZj1rKEEsYSxzLDApLGw9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEsbCxzKTticmVha31jYXNlIEUuSnNvbkNvbXBhdGlibGU6e2xldCBhPWd0LmVuY29kZShKU09OLnN0cmluZ2lmeShCLmRhdGEpKSxmPWsoQSxhLHMsMCksbD17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxsLHMpO2JyZWFrfWNhc2UgRS5CaW5hcnlTdHJlYW06e2xldCBhPUIuZGF0YS5kYXRhLGY9ayhBLGEscywwKSxsPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLGwscyk7YnJlYWt9Y2FzZSBFLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShCLmRhdGEucGF0aCxCLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBFLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKEIuZGF0YS5wYXRoLEIuZGF0YS5kYXRhKTticmVha31jYXNlIEUuSW1hZ2U6e2xldCBhPUIuZGF0YSxmPWsoQSxhLmRhdGEscywwKSxsPWsoQSxhLmRpcmVjdGlvbixzLDEpLEM9dHlwZW9mIGEubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oYS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLHU9e2ltYWdlVHlwZTphLmltYWdlVHlwZSxuYW1lOmEubmFtZSxvcmlnaW46YS5vcmlnaW4sc3BhY2luZzphLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLHNpemU6YS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6Q307TShBLHUscyk7YnJlYWt9Y2FzZSBFLk1lc2g6e2xldCBhPUIuZGF0YSxmPWsoQSxhLnBvaW50cyxzLDApLGw9ayhBLGEuY2VsbHMscywxKSxDPWsoQSxhLnBvaW50RGF0YSxzLDIpLHU9ayhBLGEuY2VsbERhdGEscywzKSxwPXttZXNoVHlwZTphLm1lc2hUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6YS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLGNlbGxCdWZmZXJTaXplOmEuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Q31gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07TShBLHAscyk7YnJlYWt9Y2FzZSBFLlBvaW50U2V0OntsZXQgYT1CLmRhdGEsZj1rKEEsYS5wb2ludHMscywwKSxsPWsoQSxhLnBvaW50RGF0YSxzLDEpLEM9e3BvaW50U2V0VHlwZTphLnBvaW50U2V0VHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtsfWB9O00oQSxDLHMpO2JyZWFrfWNhc2UgRS5Qb2x5RGF0YTp7bGV0IGE9Qi5kYXRhLGY9ayhBLGEucG9pbnRzLHMsMCksbD1rKEEsYS52ZXJ0aWNlcyxzLDEpLEM9ayhBLGEubGluZXMscywyKSx1PWsoQSxhLnBvbHlnb25zLHMsMykscD1rKEEsYS50cmlhbmdsZVN0cmlwcyxzLDQpLFE9ayhBLGEucG9pbnREYXRhLHMsNSksZD1rKEEsYS5wb2ludERhdGEscyw2KSxTPXtwb2x5RGF0YVR5cGU6YS5wb2x5RGF0YVR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOmEudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLGxpbmVzQnVmZmVyU2l6ZTphLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YCxwb2x5Z29uc0J1ZmZlclNpemU6YS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmEudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtkfWB9O00oQSxTLHMpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBuPUEuc3RhY2tTYXZlKCksaT0wO3RyeXtpPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChCKXt0aHJvdyB0eXBlb2YgQj09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShCKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxCfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobil9bGV0IG89QS5nZXRNb2R1bGVTdGRvdXQoKSxJPUEuZ2V0TW9kdWxlU3RkZXJyKCksYz1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmaT09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihCLHMpe2xldCBhPW51bGw7c3dpdGNoKEIudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBsPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksdT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbCxDKTthPXtkYXRhOmx0LmRlY29kZSh1KX07YnJlYWt9Y2FzZSBFLkpzb25Db21wYXRpYmxlOntsZXQgbD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSxDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLHU9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGwsQyk7YT1KU09OLnBhcnNlKGx0LmRlY29kZSh1KSk7YnJlYWt9Y2FzZSBFLkJpbmFyeVN0cmVhbTp7bGV0IGw9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKTthPXtkYXRhOnV0KEEsbCxDKX07YnJlYWt9Y2FzZSBFLlRleHRGaWxlOnthPXtwYXRoOkIuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShCLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRS5CaW5hcnlGaWxlOnthPXtwYXRoOkIuZGF0YS5wYXRoLGRhdGE6X3IoQSxCLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRS5JbWFnZTp7bGV0IGw9U0EoQSxzKTtsLmRhdGE9TihBLHMsMCxsLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxsLmRpcmVjdGlvbj1OKEEscywxLFcuRmxvYXQ2NCksbC5tZXRhZGF0YT1uZXcgTWFwKGwubWV0YWRhdGEpLGE9bDticmVha31jYXNlIEUuTWVzaDp7bGV0IGw9U0EoQSxzKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9TihBLHMsMCxsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6bC5wb2ludHM9RyhsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZDZWxscz4wP2wuY2VsbHM9TihBLHMsMSxsLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpsLmNlbGxzPUcobC5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZQb2ludFBpeGVscz4wP2wucG9pbnREYXRhPU4oQSxzLDIsbC5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9RyhsLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPU4oQSxzLDMsbC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpsLmNlbGxEYXRhPUcobC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1sO2JyZWFrfWNhc2UgRS5Qb2ludFNldDp7bGV0IGw9U0EoQSxzKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9TihBLHMsMCxsLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmwucG9pbnRzPUcobC5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bC5wb2ludERhdGE9TihBLHMsMSxsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9RyhsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9bDticmVha31jYXNlIEUuUG9seURhdGE6e2xldCBsPVNBKEEscyk7bC5udW1iZXJPZlBvaW50cz4wP2wucG9pbnRzPU4oQSxzLDAsVy5GbG9hdDMyKTpsLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGwudmVydGljZXNCdWZmZXJTaXplPjA/bC52ZXJ0aWNlcz1OKEEscywxLGIuVUludDMyKTpsLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxsLmxpbmVzQnVmZmVyU2l6ZT4wP2wubGluZXM9TihBLHMsMixiLlVJbnQzMik6bC5saW5lcz1uZXcgVWludDMyQXJyYXksbC5wb2x5Z29uc0J1ZmZlclNpemU+MD9sLnBvbHlnb25zPU4oQSxzLDMsYi5VSW50MzIpOmwucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGwudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bC50cmlhbmdsZVN0cmlwcz1OKEEscyw0LGIuVUludDMyKTpsLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxsLm51bWJlck9mUG9pbnRQaXhlbHM+MD9sLnBvaW50RGF0YT1OKEEscyw1LGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpsLnBvaW50RGF0YT1HKGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPU4oQSxzLDYsbC5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bC5jZWxsRGF0YT1HKGwucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPWw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpCLnR5cGUsZGF0YTphfTtjLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6byxzdGRlcnI6SSxvdXRwdXRzOmN9fXZhciBjdD16cjt2YXIgVnI9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFpyKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IG49WHIoQVtyXSxlKTtuIT09bnVsbCYmdC5wdXNoKG4pfXJldHVybiB0fWZ1bmN0aW9uIFhyKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksVnImJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBDdD1acjtmdW5jdGlvbiAkcihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgZnQ9JHI7ZnVuY3Rpb24gQWkoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIEV0PUFpO2Z1bmN0aW9uIGVpKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBwdD1laTt2YXIgdGk7ZnVuY3Rpb24ga0EoKXtyZXR1cm4gdGl9dmFyIHJpO2Z1bmN0aW9uIFF0KCl7cmV0dXJuIHJpfXZhciBpaTtmdW5jdGlvbiBGQSgpe3JldHVybiBpaX12YXIgc2U9bmV3IE1hcDtmdW5jdGlvbiBuaSgpe2xldCBBPUZBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBtdCgpe2xldCBBPWtBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIGJBKCl7bGV0IEE9UXQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBvaShBLGUsdCl7bGV0IHI9QSxuPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksbj1yLmhyZWYpLHNlLmhhcyhuKSlyZXR1cm4gc2UuZ2V0KG4pO3tsZXQgaT1hd2FpdCBzdChBLGU/LnRvU3RyaW5nKCk/P210KCksdD8/YkEoKSk7cmV0dXJuIHNlLnNldChuLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIGFpKEEsZSx0LHIsbil7aWYoIWF3YWl0IEl0KCkpe2xldCBwPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChwKSxuZXcgRXJyb3IocCl9bGV0IGk9bj8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IHA9YXdhaXQgb2koQS50b1N0cmluZygpLG4/LnBpcGVsaW5lQmFzZVVybCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9iQSgpKTtyZXR1cm4gY3QocCxlLHQscil9bGV0IG89aSxJPW4/LnBpcGVsaW5lV29ya2VyVXJsPz9uaSgpLGM9dHlwZW9mIEkhPSJzdHJpbmciJiZ0eXBlb2YgST8uaHJlZjwidSI/SS5ocmVmOkkse3dvcmtlclByb3h5OkIsd29ya2VyOnN9PWF3YWl0IGF0KG8sYyxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9iQSgpKTtvPXM7bGV0IGE9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKHApe2lmKHAudHlwZT09PUUuQmluYXJ5U3RyZWFtKXtsZXQgUT1wLmRhdGEuZGF0YTthLnB1c2goUSl9ZWxzZSBpZihwLnR5cGU9PT1FLkJpbmFyeUZpbGUpe2xldCBRPXAuZGF0YS5kYXRhO2EucHVzaChRKX1lbHNlIGlmKHAudHlwZT09PUUuSW1hZ2Upe2xldCBRPXAuZGF0YTtRLmRhdGEhPT1udWxsJiZhLnB1c2goLi4uZnQoUSkpfWVsc2UgaWYocC50eXBlPT09RS5NZXNoKXtsZXQgUT1wLmRhdGE7YS5wdXNoKC4uLkV0KFEpKX1lbHNlIGlmKHAudHlwZT09PUUuUG9seURhdGEpe2xldCBRPXAuZGF0YTthLnB1c2goLi4ucHQoUSkpfX0pO2xldCBmPW4/LnBpcGVsaW5lQmFzZVVybD8/bXQoKSxsPXR5cGVvZiBmIT0ic3RyaW5nIiYmdHlwZW9mIGY/LmhyZWY8InUiP2YuaHJlZjpmLEM9ciE9bnVsbD9IQShyLEN0KGEsbj8ubm9Db3B5KSk6bnVsbCx1PWF3YWl0IEIucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLGwsZSx0LEMsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/YkEoKSk7cmV0dXJue3JldHVyblZhbHVlOnUucmV0dXJuVmFsdWUsc3Rkb3V0OnUuc3Rkb3V0LHN0ZGVycjp1LnN0ZGVycixvdXRwdXRzOnUub3V0cHV0cyx3ZWJXb3JrZXI6b319dmFyIHk9YWk7dmFyIHNpPW51bGw7ZnVuY3Rpb24gZHQoKXtyZXR1cm4gc2l9dmFyIEllLElpPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9kaWNvbUAke1JBfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gX3MoQSl7SWU9QX1mdW5jdGlvbiB3KCl7aWYodHlwZW9mIEllPCJ1IilyZXR1cm4gSWU7bGV0IEE9a0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6SWl9dmFyIGdlLGdpPW51bGw7ZnVuY3Rpb24gaHQoQSl7Z2U9QX1mdW5jdGlvbiBoKCl7aWYodHlwZW9mIGdlPCJ1IilyZXR1cm4gZ2U7bGV0IEE9RkEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6Z2l9dmFyIFY9bnVsbDthc3luYyBmdW5jdGlvbiB5dCgpe2xldCBBPWgoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO1Y9YXdhaXQgYUEoZSl9ZnVuY3Rpb24gZUkoQSl7Vj1BfWFzeW5jIGZ1bmN0aW9uIEYoKXtpZihWIT09bnVsbClyZXR1cm4gVi50ZXJtaW5hdGVkJiZhd2FpdCB5dCgpLFY7bGV0IEE9ZHQoKTtyZXR1cm4gQSE9PW51bGw/QTooYXdhaXQgeXQoKSxWKX1hc3luYyBmdW5jdGlvbiBsaShBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuSW1hZ2V9XSxuPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBTPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtuPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFMpfX1sZXQgaT1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUz1hd2FpdCBlLmFycmF5QnVmZmVyKCk7aT17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShTKX19bGV0IG89W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOm59LHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOml9XSxJPVtdLGM9bi5wYXRoO0kucHVzaChjKTtsZXQgQj1pLnBhdGg7SS5wdXNoKEIpLEkucHVzaCgiMCIpLEkucHVzaCgiMSIpLEkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmNvbG9yT3V0cHV0JiZ0LmNvbG9yT3V0cHV0JiZJLnB1c2goIi0tY29sb3Itb3V0cHV0IiksdC5jb25maWdGaWxlJiZJLnB1c2goIi0tY29uZmlnLWZpbGUiLHQuY29uZmlnRmlsZS50b1N0cmluZygpKSx0LmZyYW1lJiZJLnB1c2goIi0tZnJhbWUiLHQuZnJhbWUudG9TdHJpbmcoKSksdC5ub1ByZXNlbnRhdGlvblN0YXRlT3V0cHV0JiZ0Lm5vUHJlc2VudGF0aW9uU3RhdGVPdXRwdXQmJkkucHVzaCgiLS1uby1wcmVzZW50YXRpb24tc3RhdGUtb3V0cHV0IiksdC5ub0JpdG1hcE91dHB1dCYmdC5ub0JpdG1hcE91dHB1dCYmSS5wdXNoKCItLW5vLWJpdG1hcC1vdXRwdXQiKTtsZXQgZj0iYXBwbHktcHJlc2VudGF0aW9uLXN0YXRlLXRvLWltYWdlIixsPXQ/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBGKCkpO2xldHt3ZWJXb3JrZXI6QyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpwLG91dHB1dHM6UX09YXdhaXQgeShmLEkscixvLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6bCxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnAhPT0iIil0aHJvdyBuZXcgRXJyb3IocCk7cmV0dXJue3dlYldvcmtlcjpDLHByZXNlbnRhdGlvblN0YXRlT3V0U3RyZWFtOlFbMF0/LmRhdGEsb3V0cHV0SW1hZ2U6UVsxXT8uZGF0YX19dmFyIEJpPWxpO2FzeW5jIGZ1bmN0aW9uIHVpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuQmluYXJ5U3RyZWFtfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2kucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5yZWFkRmlsZU9ubHkmJmUucmVhZEZpbGVPbmx5JiZpLnB1c2goIi0tcmVhZC1maWxlLW9ubHkiKSxlLnJlYWREYXRhc2V0JiZlLnJlYWREYXRhc2V0JiZpLnB1c2goIi0tcmVhZC1kYXRhc2V0IiksZS5yZWFkWGZlckF1dG8mJmUucmVhZFhmZXJBdXRvJiZpLnB1c2goIi0tcmVhZC14ZmVyLWF1dG8iKSxlLnJlYWRYZmVyRGV0ZWN0JiZlLnJlYWRYZmVyRGV0ZWN0JiZpLnB1c2goIi0tcmVhZC14ZmVyLWRldGVjdCIpLGUucmVhZFhmZXJMaXR0bGUmJmUucmVhZFhmZXJMaXR0bGUmJmkucHVzaCgiLS1yZWFkLXhmZXItbGl0dGxlIiksZS5yZWFkWGZlckJpZyYmZS5yZWFkWGZlckJpZyYmaS5wdXNoKCItLXJlYWQteGZlci1iaWciKSxlLnJlYWRYZmVySW1wbGljaXQmJmUucmVhZFhmZXJJbXBsaWNpdCYmaS5wdXNoKCItLXJlYWQteGZlci1pbXBsaWNpdCIpLGUuYWNjZXB0T2RkTGVuZ3RoJiZlLmFjY2VwdE9kZExlbmd0aCYmaS5wdXNoKCItLWFjY2VwdC1vZGQtbGVuZ3RoIiksZS5hc3N1bWVFdmVuTGVuZ3RoJiZlLmFzc3VtZUV2ZW5MZW5ndGgmJmkucHVzaCgiLS1hc3N1bWUtZXZlbi1sZW5ndGgiKSxlLmVuYWJsZUNwMjQ2JiZlLmVuYWJsZUNwMjQ2JiZpLnB1c2goIi0tZW5hYmxlLWNwMjQ2IiksZS5kaXNhYmxlQ3AyNDYmJmUuZGlzYWJsZUNwMjQ2JiZpLnB1c2goIi0tZGlzYWJsZS1jcDI0NiIpLGUucmV0YWluVW4mJmUucmV0YWluVW4mJmkucHVzaCgiLS1yZXRhaW4tdW4iKSxlLmNvbnZlcnRVbiYmZS5jb252ZXJ0VW4mJmkucHVzaCgiLS1jb252ZXJ0LXVuIiksZS5lbmFibGVDb3JyZWN0aW9uJiZlLmVuYWJsZUNvcnJlY3Rpb24mJmkucHVzaCgiLS1lbmFibGUtY29ycmVjdGlvbiIpLGUuZGlzYWJsZUNvcnJlY3Rpb24mJmUuZGlzYWJsZUNvcnJlY3Rpb24mJmkucHVzaCgiLS1kaXNhYmxlLWNvcnJlY3Rpb24iKTtsZXQgYz0icmVhZC1kaWNvbS1lbmNhcHN1bGF0ZWQtcGRmIixCPWU/LndlYldvcmtlcjtCPT09dm9pZCAwJiYoQj1hd2FpdCBGKCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTphLHN0ZGVycjpmLG91dHB1dHM6bH09YXdhaXQgeShjLGksdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6Qixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoYSE9PTAmJmYhPT0iIil0aHJvdyBuZXcgRXJyb3IoZik7cmV0dXJue3dlYldvcmtlcjpzLHBkZkJpbmFyeU91dHB1dDoobFswXT8uZGF0YSkuZGF0YX19dmFyIGNpPXVpO2FzeW5jIGZ1bmN0aW9uIENpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuVGV4dFN0cmVhbX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IHU9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkodSl9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpZihpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUucmVhZEZpbGVPbmx5JiZlLnJlYWRGaWxlT25seSYmaS5wdXNoKCItLXJlYWQtZmlsZS1vbmx5IiksZS5yZWFkRGF0YXNldCYmZS5yZWFkRGF0YXNldCYmaS5wdXNoKCItLXJlYWQtZGF0YXNldCIpLGUucmVhZFhmZXJBdXRvJiZlLnJlYWRYZmVyQXV0byYmaS5wdXNoKCItLXJlYWQteGZlci1hdXRvIiksZS5yZWFkWGZlckRldGVjdCYmZS5yZWFkWGZlckRldGVjdCYmaS5wdXNoKCItLXJlYWQteGZlci1kZXRlY3QiKSxlLnJlYWRYZmVyTGl0dGxlJiZlLnJlYWRYZmVyTGl0dGxlJiZpLnB1c2goIi0tcmVhZC14ZmVyLWxpdHRsZSIpLGUucmVhZFhmZXJCaWcmJmUucmVhZFhmZXJCaWcmJmkucHVzaCgiLS1yZWFkLXhmZXItYmlnIiksZS5yZWFkWGZlckltcGxpY2l0JiZlLnJlYWRYZmVySW1wbGljaXQmJmkucHVzaCgiLS1yZWFkLXhmZXItaW1wbGljaXQiKSxlLnByb2Nlc3NpbmdEZXRhaWxzJiZlLnByb2Nlc3NpbmdEZXRhaWxzJiZpLnB1c2goIi0tcHJvY2Vzc2luZy1kZXRhaWxzIiksZS51bmtub3duUmVsYXRpb25zaGlwJiZlLnVua25vd25SZWxhdGlvbnNoaXAmJmkucHVzaCgiLS11bmtub3duLXJlbGF0aW9uc2hpcCIpLGUuaW52YWxpZEl0ZW1WYWx1ZSYmZS5pbnZhbGlkSXRlbVZhbHVlJiZpLnB1c2goIi0taW52YWxpZC1pdGVtLXZhbHVlIiksZS5pZ25vcmVDb25zdHJhaW50cyYmZS5pZ25vcmVDb25zdHJhaW50cyYmaS5wdXNoKCItLWlnbm9yZS1jb25zdHJhaW50cyIpLGUuaWdub3JlSXRlbUVycm9ycyYmZS5pZ25vcmVJdGVtRXJyb3JzJiZpLnB1c2goIi0taWdub3JlLWl0ZW0tZXJyb3JzIiksZS5za2lwSW52YWxpZEl0ZW1zJiZlLnNraXBJbnZhbGlkSXRlbXMmJmkucHVzaCgiLS1za2lwLWludmFsaWQtaXRlbXMiKSxlLmRpc2FibGVWckNoZWNrZXImJmUuZGlzYWJsZVZyQ2hlY2tlciYmaS5wdXNoKCItLWRpc2FibGUtdnItY2hlY2tlciIpLGUuY2hhcnNldFJlcXVpcmUmJmUuY2hhcnNldFJlcXVpcmUmJmkucHVzaCgiLS1jaGFyc2V0LXJlcXVpcmUiKSxlLmNoYXJzZXRBc3N1bWUmJmkucHVzaCgiLS1jaGFyc2V0LWFzc3VtZSIsZS5jaGFyc2V0QXNzdW1lLnRvU3RyaW5nKCkpLGUuY2hhcnNldENoZWNrQWxsJiZlLmNoYXJzZXRDaGVja0FsbCYmaS5wdXNoKCItLWNoYXJzZXQtY2hlY2stYWxsIiksZS5jb252ZXJ0VG9VdGY4JiZlLmNvbnZlcnRUb1V0ZjgmJmkucHVzaCgiLS1jb252ZXJ0LXRvLXV0ZjgiKSxlLnVybFByZWZpeCYmaS5wdXNoKCItLXVybC1wcmVmaXgiLGUudXJsUHJlZml4LnRvU3RyaW5nKCkpLGUuaHRtbDMyJiZlLmh0bWwzMiYmaS5wdXNoKCItLWh0bWwtMzIiKSxlLmh0bWw0MCYmZS5odG1sNDAmJmkucHVzaCgiLS1odG1sLTQwIiksZS54aHRtbDExJiZlLnhodG1sMTEmJmkucHVzaCgiLS14aHRtbC0xMSIpLGUuYWRkRG9jdW1lbnRUeXBlJiZlLmFkZERvY3VtZW50VHlwZSYmaS5wdXNoKCItLWFkZC1kb2N1bWVudC10eXBlIiksZS5jc3NSZWZlcmVuY2Upe2xldCB1PW4ubGVuZ3RoLnRvU3RyaW5nKCk7bi5wdXNoKHt0eXBlOkUuVGV4dFN0cmVhbSxkYXRhOntkYXRhOmUuY3NzUmVmZXJlbmNlfX0pLGkucHVzaCgiLS1jc3MtcmVmZXJlbmNlIix1KX1pZihlLmNzc0ZpbGUpe2xldCB1PWUuY3NzRmlsZSxwPXU7aWYodSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IHUuYXJyYXlCdWZmZXIoKTtwPXtwYXRoOnUubmFtZSxkYXRhOm5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShkKX19aS5wdXNoKCItLWNzcy1maWxlIiksbi5wdXNoKHt0eXBlOkUuVGV4dEZpbGUsZGF0YTpwfSk7bGV0IFE9dSBpbnN0YW5jZW9mIEZpbGU/dS5uYW1lOnUucGF0aDtpLnB1c2goUSl9ZS5leHBhbmRJbmxpbmUmJmUuZXhwYW5kSW5saW5lJiZpLnB1c2goIi0tZXhwYW5kLWlubGluZSIpLGUubmV2ZXJFeHBhbmRJbmxpbmUmJmUubmV2ZXJFeHBhbmRJbmxpbmUmJmkucHVzaCgiLS1uZXZlci1leHBhbmQtaW5saW5lIiksZS5hbHdheXNFeHBhbmRJbmxpbmUmJmUuYWx3YXlzRXhwYW5kSW5saW5lJiZpLnB1c2goIi0tYWx3YXlzLWV4cGFuZC1pbmxpbmUiKSxlLnJlbmRlckZ1bGxEYXRhJiZlLnJlbmRlckZ1bGxEYXRhJiZpLnB1c2goIi0tcmVuZGVyLWZ1bGwtZGF0YSIpLGUuc2VjdGlvblRpdGxlSW5saW5lJiZlLnNlY3Rpb25UaXRsZUlubGluZSYmaS5wdXNoKCItLXNlY3Rpb24tdGl0bGUtaW5saW5lIiksZS5kb2N1bWVudFR5cGVUaXRsZSYmZS5kb2N1bWVudFR5cGVUaXRsZSYmaS5wdXNoKCItLWRvY3VtZW50LXR5cGUtdGl0bGUiKSxlLnBhdGllbnRJbmZvVGl0bGUmJmUucGF0aWVudEluZm9UaXRsZSYmaS5wdXNoKCItLXBhdGllbnQtaW5mby10aXRsZSIpLGUubm9Eb2N1bWVudEhlYWRlciYmZS5ub0RvY3VtZW50SGVhZGVyJiZpLnB1c2goIi0tbm8tZG9jdW1lbnQtaGVhZGVyIiksZS5yZW5kZXJJbmxpbmVDb2RlcyYmZS5yZW5kZXJJbmxpbmVDb2RlcyYmaS5wdXNoKCItLXJlbmRlci1pbmxpbmUtY29kZXMiKSxlLmNvbmNlcHROYW1lQ29kZXMmJmUuY29uY2VwdE5hbWVDb2RlcyYmaS5wdXNoKCItLWNvbmNlcHQtbmFtZS1jb2RlcyIpLGUubnVtZXJpY1VuaXRDb2RlcyYmZS5udW1lcmljVW5pdENvZGVzJiZpLnB1c2goIi0tbnVtZXJpYy11bml0LWNvZGVzIiksZS5jb2RlVmFsdWVVbml0JiZlLmNvZGVWYWx1ZVVuaXQmJmkucHVzaCgiLS1jb2RlLXZhbHVlLXVuaXQiKSxlLmNvZGVNZWFuaW5nVW5pdCYmZS5jb2RlTWVhbmluZ1VuaXQmJmkucHVzaCgiLS1jb2RlLW1lYW5pbmctdW5pdCIpLGUucmVuZGVyQWxsQ29kZXMmJmUucmVuZGVyQWxsQ29kZXMmJmkucHVzaCgiLS1yZW5kZXItYWxsLWNvZGVzIiksZS5jb2RlRGV0YWlsc1Rvb2x0aXAmJmUuY29kZURldGFpbHNUb29sdGlwJiZpLnB1c2goIi0tY29kZS1kZXRhaWxzLXRvb2x0aXAiKTtsZXQgYz0ic3RydWN0dXJlZC1yZXBvcnQtdG8taHRtbCIsQj1lPy53ZWJXb3JrZXI7Qj09PXZvaWQgMCYmKEI9YXdhaXQgRigpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6YSxzdGRlcnI6ZixvdXRwdXRzOmx9PWF3YWl0IHkoYyxpLHQsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOkIsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGEhPT0wJiZmIT09IiIpdGhyb3cgbmV3IEVycm9yKGYpO3JldHVybnt3ZWJXb3JrZXI6cyxvdXRwdXRUZXh0OihsWzBdPy5kYXRhKS5kYXRhfX12YXIgZmk9Q2k7YXN5bmMgZnVuY3Rpb24gRWkoQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5UZXh0U3RyZWFtfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2kucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS51bmtub3duUmVsYXRpb25zaGlwJiZlLnVua25vd25SZWxhdGlvbnNoaXAmJmkucHVzaCgiLS11bmtub3duLXJlbGF0aW9uc2hpcCIpLGUuaW52YWxpZEl0ZW1WYWx1ZSYmZS5pbnZhbGlkSXRlbVZhbHVlJiZpLnB1c2goIi0taW52YWxpZC1pdGVtLXZhbHVlIiksZS5pZ25vcmVDb25zdHJhaW50cyYmZS5pZ25vcmVDb25zdHJhaW50cyYmaS5wdXNoKCItLWlnbm9yZS1jb25zdHJhaW50cyIpLGUuaWdub3JlSXRlbUVycm9ycyYmZS5pZ25vcmVJdGVtRXJyb3JzJiZpLnB1c2goIi0taWdub3JlLWl0ZW0tZXJyb3JzIiksZS5za2lwSW52YWxpZEl0ZW1zJiZlLnNraXBJbnZhbGlkSXRlbXMmJmkucHVzaCgiLS1za2lwLWludmFsaWQtaXRlbXMiKSxlLm5vRG9jdW1lbnRIZWFkZXImJmUubm9Eb2N1bWVudEhlYWRlciYmaS5wdXNoKCItLW5vLWRvY3VtZW50LWhlYWRlciIpLGUubnVtYmVyTmVzdGVkSXRlbXMmJmUubnVtYmVyTmVzdGVkSXRlbXMmJmkucHVzaCgiLS1udW1iZXItbmVzdGVkLWl0ZW1zIiksZS5zaG9ydGVuTG9uZ1ZhbHVlcyYmZS5zaG9ydGVuTG9uZ1ZhbHVlcyYmaS5wdXNoKCItLXNob3J0ZW4tbG9uZy12YWx1ZXMiKSxlLnByaW50SW5zdGFuY2VVaWQmJmUucHJpbnRJbnN0YW5jZVVpZCYmaS5wdXNoKCItLXByaW50LWluc3RhbmNlLXVpZCIpLGUucHJpbnRTb3BjbGFzc1Nob3J0JiZlLnByaW50U29wY2xhc3NTaG9ydCYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLXNob3J0IiksZS5wcmludFNvcGNsYXNzTG9uZyYmZS5wcmludFNvcGNsYXNzTG9uZyYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLWxvbmciKSxlLnByaW50U29wY2xhc3NVaWQmJmUucHJpbnRTb3BjbGFzc1VpZCYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLXVpZCIpLGUucHJpbnRBbGxDb2RlcyYmZS5wcmludEFsbENvZGVzJiZpLnB1c2goIi0tcHJpbnQtYWxsLWNvZGVzIiksZS5wcmludEludmFsaWRDb2RlcyYmZS5wcmludEludmFsaWRDb2RlcyYmaS5wdXNoKCItLXByaW50LWludmFsaWQtY29kZXMiKSxlLnByaW50VGVtcGxhdGVJZCYmZS5wcmludFRlbXBsYXRlSWQmJmkucHVzaCgiLS1wcmludC10ZW1wbGF0ZS1pZCIpLGUuaW5kaWNhdGVFbmhhbmNlZCYmZS5pbmRpY2F0ZUVuaGFuY2VkJiZpLnB1c2goIi0taW5kaWNhdGUtZW5oYW5jZWQiKSxlLnByaW50Q29sb3ImJmUucHJpbnRDb2xvciYmaS5wdXNoKCItLXByaW50LWNvbG9yIik7bGV0IGM9InN0cnVjdHVyZWQtcmVwb3J0LXRvLXRleHQiLEI9ZT8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOmEsc3RkZXJyOmYsb3V0cHV0czpsfT1hd2FpdCB5KGMsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpCLG5vQ29weTplPy5ub0NvcHl9KTtpZihhIT09MCYmZiE9PSIiKXRocm93IG5ldyBFcnJvcihmKTtyZXR1cm57d2ViV29ya2VyOnMsb3V0cHV0VGV4dDoobFswXT8uZGF0YSkuZGF0YX19dmFyIHBpPUVpO2FzeW5jIGZ1bmN0aW9uIFFpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBDPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEMpfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aWYoaS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgZS50YWdzVG9SZWFkPCJ1Iil7bGV0IEM9bi5sZW5ndGgudG9TdHJpbmcoKTtuLnB1c2goe3R5cGU6RS5Kc29uQ29tcGF0aWJsZSxkYXRhOmUudGFnc1RvUmVhZH0pLGkucHVzaCgiLS10YWdzLXRvLXJlYWQiLEMpfWxldCBjPSJyZWFkLWRpY29tLXRhZ3MiLHt3ZWJXb3JrZXI6QixyZXR1cm5WYWx1ZTpzLHN0ZGVycjphLG91dHB1dHM6Zn09YXdhaXQgeShjLGksdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6ZT8ud2ViV29ya2VyPz9udWxsfSk7aWYocyE9PTApdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6Qix0YWdzOmZbMF0uZGF0YX19dmFyIG1pPVFpO2FzeW5jIGZ1bmN0aW9uIGRpKEEsZT0hMSx0PXt9KXtsZXQgcj1be3R5cGU6RS5JbWFnZX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZX1dLG49W10saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksaS5wdXNoKCItLWlucHV0LWltYWdlcyIpLEEuZm9yRWFjaChDPT57bi5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOkN9KSxpLnB1c2goQy5wYXRoKX0pLHR5cGVvZiBlPCJ1IiYmZSYmaS5wdXNoKCItLXNpbmdsZS1zb3J0ZWQtc2VyaWVzIik7bGV0IGM9InJlYWQtaW1hZ2UtZGljb20tZmlsZS1zZXJpZXMiLHt3ZWJXb3JrZXI6QixyZXR1cm5WYWx1ZTpzLHN0ZGVycjphLG91dHB1dHM6Zn09YXdhaXQgeShjLGkscixuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOmgoKSx3ZWJXb3JrZXI6dD8ud2ViV29ya2VyPz9udWxsfSk7aWYocyE9PTApdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6QixvdXRwdXRJbWFnZTpmWzBdLmRhdGEsc29ydGVkRmlsZW5hbWVzOmZbMV0uZGF0YX19dmFyIGxlPWRpO3ZhciBoaT10eXBlb2YgZ2xvYmFsVGhpcy5uYXZpZ2F0b3I/LmhhcmR3YXJlQ29uY3VycmVuY3k9PSJudW1iZXIiP2dsb2JhbFRoaXMubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k6NCx3dD04O2FzeW5jIGZ1bmN0aW9uIHlpKEE9e2lucHV0SW1hZ2VzOltdfSl7bGV0IGU9QS53ZWJXb3JrZXJQb29sPz9udWxsO2U9PT1udWxsJiYoZT1uZXcgT0EoaGksbGUpKTtsZXQgdD1bXTtpZihBLmlucHV0SW1hZ2VzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignImlucHV0LWltYWdlcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtpZihhd2FpdCBQcm9taXNlLmFsbChBLmlucHV0SW1hZ2VzLm1hcChhc3luYyByPT57bGV0IG49cjtpZihyIGluc3RhbmNlb2YgRmlsZSl7bGV0IGk9YXdhaXQgci5hcnJheUJ1ZmZlcigpO249e3BhdGg6ci5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoaSl9fXQucHVzaChuKX0pKSxBLnNpbmdsZVNvcnRlZFNlcmllcyl7bGV0IHI9W107Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDtjKz13dCl7bGV0IEI9dC5zbGljZShjLGMrd3QpO3IucHVzaChbQixBLnNpbmdsZVNvcnRlZFNlcmllcyx7fV0pfWxldCBuPWF3YWl0IGUucnVuVGFza3MocikucHJvbWlzZSxpPW4ubWFwKGM9PmMub3V0cHV0SW1hZ2UpLG89bi5yZWR1Y2UoKGMsQik9PmMuY29uY2F0KEIuc29ydGVkRmlsZW5hbWVzKSxbXSk7cmV0dXJue291dHB1dEltYWdlOlRBKGkpLHdlYldvcmtlclBvb2w6ZSxzb3J0ZWRGaWxlbmFtZXM6b319ZWxzZXtsZXQgcj1bW3QsQS5zaW5nbGVTb3J0ZWRTZXJpZXMse31dXSxuPWF3YWl0IGUucnVuVGFza3MocikucHJvbWlzZTtyZXR1cm57b3V0cHV0SW1hZ2U6blswXS5vdXRwdXRJbWFnZSx3ZWJXb3JrZXJQb29sOmUsc29ydGVkRmlsZW5hbWVzOm5bMF0uc29ydGVkRmlsZW5hbWVzfX19dmFyIHdpPXlpO2FzeW5jIGZ1bmN0aW9uIERpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSW1hZ2V9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGV9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBwPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KHApfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKTtsZXQgQj0icmVhZC1zZWdtZW50YXRpb24iLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOmwsb3V0cHV0czpDfT1hd2FpdCB5KEIsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihmIT09MCYmbCE9PSIiKXRocm93IG5ldyBFcnJvcihsKTtyZXR1cm57d2ViV29ya2VyOmEsc2VnSW1hZ2U6Q1swXT8uZGF0YSxtZXRhSW5mbzpDWzFdPy5kYXRhfX12YXIgU2k9RGk7YXN5bmMgZnVuY3Rpb24ga2koQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5JbWFnZX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IHA9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkocCl9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUubWVyZ2VTZWdtZW50cyYmZS5tZXJnZVNlZ21lbnRzJiZpLnB1c2goIi0tbWVyZ2Utc2VnbWVudHMiKTtsZXQgQj0icmVhZC1vdmVybGFwcGluZy1zZWdtZW50YXRpb24iLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOmwsb3V0cHV0czpDfT1hd2FpdCB5KEIsaSx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihmIT09MCYmbCE9PSIiKXRocm93IG5ldyBFcnJvcihsKTtyZXR1cm57d2ViV29ya2VyOmEsc2VnSW1hZ2U6Q1swXT8uZGF0YSxtZXRhSW5mbzpDWzFdPy5kYXRhfX12YXIgRmk9a2k7YXN5bmMgZnVuY3Rpb24gYmkoQSxlLHQscj17cmVmRGljb21TZXJpZXM6W119KXtsZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLGk9W3t0eXBlOkUuSW1hZ2UsZGF0YTpBfSx7dHlwZTpFLkpzb25Db21wYXRpYmxlLGRhdGE6ZX1dLG89W107by5wdXNoKCIwIiksby5wdXNoKCIxIik7bGV0IEI9dDtpZihvLnB1c2goQiksby5wdXNoKCItLW1lbW9yeS1pbyIpLHIucmVmRGljb21TZXJpZXMpe2lmKHIucmVmRGljb21TZXJpZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcicmVmLWRpY29tLXNlcmllcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtvLnB1c2goIi0tcmVmLWRpY29tLXNlcmllcyIpLGF3YWl0IFByb21pc2UuYWxsKHIucmVmRGljb21TZXJpZXMubWFwKGFzeW5jIFE9PntsZXQgZD1RO2lmKFEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgWj1hd2FpdCBRLmFycmF5QnVmZmVyKCk7ZD17cGF0aDpRLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShaKX19aS5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOmR9KTtsZXQgUz1RIGluc3RhbmNlb2YgRmlsZT9RLm5hbWU6ZC5wYXRoO28ucHVzaChTKX0pKX1yLnNraXBFbXB0eVNsaWNlcyYmci5za2lwRW1wdHlTbGljZXMmJm8ucHVzaCgiLS1za2lwLWVtcHR5LXNsaWNlcyIpLHIudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmci51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZvLnB1c2goIi0tdXNlLWxhYmVsaWQtYXMtc2VnbWVudG51bWJlciIpO2xldCBzPSJ3cml0ZS1zZWdtZW50YXRpb24iLGE9cj8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjpmLHJldHVyblZhbHVlOmwsc3RkZXJyOkMsb3V0cHV0czp1fT1hd2FpdCB5KHMsbyxuLGkse3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjphLG5vQ29weTpyPy5ub0NvcHl9KTtpZihsIT09MCYmQyE9PSIiKXRocm93IG5ldyBFcnJvcihDKTtyZXR1cm57d2ViV29ya2VyOmYsb3V0cHV0RGljb21GaWxlOnVbMF0/LmRhdGF9fXZhciBSaT1iaTthc3luYyBmdW5jdGlvbiBVaShBLGUsdCxyPXtyZWZEaWNvbVNlcmllczpbXX0pe2xldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0saT1be3R5cGU6RS5JbWFnZSxkYXRhOkF9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGUsZGF0YTplfV0sbz1bXTtvLnB1c2goIjAiKSxvLnB1c2goIjEiKTtsZXQgQj10O2lmKG8ucHVzaChCKSxvLnB1c2goIi0tbWVtb3J5LWlvIiksci5yZWZEaWNvbVNlcmllcyl7aWYoci5yZWZEaWNvbVNlcmllcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJyZWYtZGljb20tc2VyaWVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO28ucHVzaCgiLS1yZWYtZGljb20tc2VyaWVzIiksYXdhaXQgUHJvbWlzZS5hbGwoci5yZWZEaWNvbVNlcmllcy5tYXAoYXN5bmMgUT0+e2xldCBkPVE7aWYoUSBpbnN0YW5jZW9mIEZpbGUpe2xldCBaPWF3YWl0IFEuYXJyYXlCdWZmZXIoKTtkPXtwYXRoOlEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFopfX1pLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6ZH0pO2xldCBTPVEgaW5zdGFuY2VvZiBGaWxlP1EubmFtZTpkLnBhdGg7by5wdXNoKFMpfSkpfXIuc2tpcEVtcHR5U2xpY2VzJiZyLnNraXBFbXB0eVNsaWNlcyYmby5wdXNoKCItLXNraXAtZW1wdHktc2xpY2VzIiksci51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZyLnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJm8ucHVzaCgiLS11c2UtbGFiZWxpZC1hcy1zZWdtZW50bnVtYmVyIik7bGV0IHM9IndyaXRlLW92ZXJsYXBwaW5nLXNlZ21lbnRhdGlvbiIsYT1yPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgRigpKTtsZXR7d2ViV29ya2VyOmYscmV0dXJuVmFsdWU6bCxzdGRlcnI6QyxvdXRwdXRzOnV9PWF3YWl0IHkocyxvLG4saSx7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDpoKCksd2ViV29ya2VyOmEsbm9Db3B5OnI/Lm5vQ29weX0pO2lmKGwhPT0wJiZDIT09IiIpdGhyb3cgbmV3IEVycm9yKEMpO3JldHVybnt3ZWJXb3JrZXI6ZixvdXRwdXREaWNvbUZpbGU6dVswXT8uZGF0YX19dmFyIE5pPVVpO2FzeW5jIGZ1bmN0aW9uIFRpKEEsZSx0PXtyZWZEaWNvbVNlcmllczpbXSxzZWdJbWFnZXM6W119KXtsZXQgcj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG49W3t0eXBlOkUuSnNvbkNvbXBhdGlibGUsZGF0YTpBfV0saT1bXTtpLnB1c2goIjAiKTtsZXQgST1lO2lmKGkucHVzaChJKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5yZWZEaWNvbVNlcmllcyl7aWYodC5yZWZEaWNvbVNlcmllcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJyZWYtZGljb20tc2VyaWVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO2kucHVzaCgiLS1yZWYtZGljb20tc2VyaWVzIiksYXdhaXQgUHJvbWlzZS5hbGwodC5yZWZEaWNvbVNlcmllcy5tYXAoYXN5bmMgdT0+e2xldCBwPXU7aWYodSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IHUuYXJyYXlCdWZmZXIoKTtwPXtwYXRoOnUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1uLnB1c2goe3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cH0pO2xldCBRPXUgaW5zdGFuY2VvZiBGaWxlP3UubmFtZTpwLnBhdGg7aS5wdXNoKFEpfSkpfWlmKHQuc2VnSW1hZ2VzKXtpZih0LnNlZ0ltYWdlcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzZWctaW1hZ2VzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO2kucHVzaCgiLS1zZWctaW1hZ2VzIiksYXdhaXQgUHJvbWlzZS5hbGwodC5zZWdJbWFnZXMubWFwKGFzeW5jIHU9PntsZXQgcD11O2lmKHUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCB1LmFycmF5QnVmZmVyKCk7cD17cGF0aDp1Lm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bi5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnB9KTtsZXQgUT11IGluc3RhbmNlb2YgRmlsZT91Lm5hbWU6cC5wYXRoO2kucHVzaChRKX0pKX10LnNraXBFbXB0eVNsaWNlcyYmdC5za2lwRW1wdHlTbGljZXMmJmkucHVzaCgiLS1za2lwLWVtcHR5LXNsaWNlcyIpLHQudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmdC51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZpLnB1c2goIi0tdXNlLWxhYmVsaWQtYXMtc2VnbWVudG51bWJlciIpO2xldCBjPSJ3cml0ZS1tdWx0aS1zZWdtZW50YXRpb24iLEI9dD8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IEYoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOmEsc3RkZXJyOmYsb3V0cHV0czpsfT1hd2FpdCB5KGMsaSxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6aCgpLHdlYldvcmtlcjpCLG5vQ29weTp0Py5ub0NvcHl9KTtpZihhIT09MCYmZiE9PSIiKXRocm93IG5ldyBFcnJvcihmKTtyZXR1cm57d2ViV29ya2VyOnMsb3V0cHV0RGljb21GaWxlOmxbMF0/LmRhdGF9fXZhciBHaT1UaTt2YXIgRHQ9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIElJPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZUk9KEEsdCk9Pntmb3IodmFyIEkgaW4gdClJSShBLEkse2dldDp0W0ldLGVudW1lcmFibGU6ITB9KX07dmFyIHZBPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGdJPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHJJPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxwQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLCRBPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLG9JPXtjYW5IYW5kbGU6QT0+JEEoQSkmJkFbdkFdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6dCxwb3J0MjpJfT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGlBKEEsdCksW0ksW0ldXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxuSShBKX19LGlJPXtjYW5IYW5kbGU6QT0+JEEoQSkmJmVBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IHQ7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj90PXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06dD17aXNFcnJvcjohMSx2YWx1ZTpBfSxbdCxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxBdD1uZXcgTWFwKFtbInByb3h5IixvSV0sWyJ0aHJvdyIsaUldXSk7ZnVuY3Rpb24gQ0koQSx0KXtmb3IobGV0IEkgb2YgQSlpZih0PT09SXx8ST09PSIqInx8SSBpbnN0YW5jZW9mIFJlZ0V4cCYmSS50ZXN0KHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGlBKEEsdD1nbG9iYWxUaGlzLEk9WyIqIl0pe3QuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gZShnKXtpZighZ3x8IWcuZGF0YSlyZXR1cm47aWYoIUNJKEksZy5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luIFwnJHtnLm9yaWdpbn1cJyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6cix0eXBlOm8scGF0aDpufT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxnLmRhdGEpLGE9KGcuZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoYiksUTt0cnl7bGV0IEI9bi5zbGljZSgwLC0xKS5yZWR1Y2UoKGYscyk9PmZbc10sQSksaT1uLnJlZHVjZSgoZixzKT0+ZltzXSxBKTtzd2l0Y2gobyl7Y2FzZSJHRVQiOlE9aTticmVhaztjYXNlIlNFVCI6QltuLnNsaWNlKC0xKVswXV09YihnLmRhdGEudmFsdWUpLFE9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6UT1pLmFwcGx5KEIsYSk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgaSguLi5hKTtRPWFJKGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpzfT1uZXcgTWVzc2FnZUNoYW5uZWw7aUEoQSxzKSxRPUZBKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOlE9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChCKXtRPXt2YWx1ZTpCLFtlQV06MH19UHJvbWlzZS5yZXNvbHZlKFEpLmNhdGNoKEI9Pih7dmFsdWU6QixbZUFdOjB9KSkudGhlbihCPT57bGV0W2ksZl09b0EoQik7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse2lkOnJ9KSxmKSxvPT09IlJFTEVBU0UiJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixlKSx0dCh0KSxwQSBpbiBBJiZ0eXBlb2YgQVtwQV09PSJmdW5jdGlvbiImJkFbcEFdKCkpfSkuY2F0Y2goQj0+e2xldFtpLGZdPW9BKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbZUFdOjB9KTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpfSl9KSx0LnN0YXJ0JiZ0LnN0YXJ0KCl9ZnVuY3Rpb24gQkkoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gdHQoQSl7QkkoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBuSShBLHQpe3JldHVybiBTQShBLFtdLHQpfWZ1bmN0aW9uIElBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBJdChBKXtyZXR1cm4gcShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9Pnt0dChBKX0pfXZhciBnQT1uZXcgV2Vha01hcCxyQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgdD0oZ0EuZ2V0KEEpfHwwKS0xO2dBLnNldChBLHQpLHQ9PT0wJiZJdChBKX0pO2Z1bmN0aW9uIHNJKEEsdCl7bGV0IEk9KGdBLmdldCh0KXx8MCkrMTtnQS5zZXQodCxJKSxyQSYmckEucmVnaXN0ZXIoQSx0LEEpfWZ1bmN0aW9uIFFJKEEpe3JBJiZyQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIFNBKEEsdD1bXSxJPWZ1bmN0aW9uKCl7fSl7bGV0IGU9ITEsZz1uZXcgUHJveHkoSSx7Z2V0KHIsbyl7aWYoSUEoZSksbz09PXJJKXJldHVybigpPT57UUkoZyksSXQoQSksZT0hMH07aWYobz09PSJ0aGVuIil7aWYodC5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5nfTtsZXQgbj1xKEEse3R5cGU6IkdFVCIscGF0aDp0Lm1hcChhPT5hLnRvU3RyaW5nKCkpfSkudGhlbihiKTtyZXR1cm4gbi50aGVuLmJpbmQobil9cmV0dXJuIFNBKEEsWy4uLnQsb10pfSxzZXQocixvLG4pe0lBKGUpO2xldFthLFFdPW9BKG4pO3JldHVybiBxKEEse3R5cGU6IlNFVCIscGF0aDpbLi4udCxvXS5tYXAoQj0+Qi50b1N0cmluZygpKSx2YWx1ZTphfSxRKS50aGVuKGIpfSxhcHBseShyLG8sbil7SUEoZSk7bGV0IGE9dFt0Lmxlbmd0aC0xXTtpZihhPT09Z0kpcmV0dXJuIHEoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihiKTtpZihhPT09ImJpbmQiKXJldHVybiBTQShBLHQuc2xpY2UoMCwtMSkpO2xldFtRLEJdPV9BKG4pO3JldHVybiBxKEEse3R5cGU6IkFQUExZIixwYXRoOnQubWFwKGk9PmkudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OlF9LEIpLnRoZW4oYil9LGNvbnN0cnVjdChyLG8pe0lBKGUpO2xldFtuLGFdPV9BKG8pO3JldHVybiBxKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDp0Lm1hcChRPT5RLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpufSxhKS50aGVuKGIpfX0pO3JldHVybiBzSShnLEEpLGd9ZnVuY3Rpb24gRUkoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gX0EoQSl7bGV0IHQ9QS5tYXAob0EpO3JldHVyblt0Lm1hcChJPT5JWzBdKSxFSSh0Lm1hcChJPT5JWzFdKSldfXZhciBldD1uZXcgV2Vha01hcDtmdW5jdGlvbiBGQShBLHQpe3JldHVybiBldC5zZXQoQSx0KSxBfWZ1bmN0aW9uIGFJKEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1t2QV06ITB9KX1mdW5jdGlvbiBvQShBKXtmb3IobGV0W3QsSV1vZiBBdClpZihJLmNhbkhhbmRsZShBKSl7bGV0W2UsZ109SS5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOnQsdmFsdWU6ZX0sZ119cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGV0LmdldChBKXx8W11dfWZ1bmN0aW9uIGIoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gQXQuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBxKEEsdCxJKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e2xldCBnPWNJKCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG8peyFvLmRhdGF8fCFvLmRhdGEuaWR8fG8uZGF0YS5pZCE9PWd8fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLGUoby5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpnfSx0KSxJKX0pfWZ1bmN0aW9uIGNJKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBXKEEsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkodCxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6Zkl9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOlVBfT1PYmplY3QsQkE9KEE9PnQ9PntsZXQgST1mSS5jYWxsKHQpO3JldHVybiBBW0ldfHwoQVtJXT1JLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksVT1BPT4oQT1BLnRvTG93ZXJDYXNlKCksdD0+QkEodCk9PT1BKSxuQT1BPT50PT50eXBlb2YgdD09PUEse2lzQXJyYXk6S309QXJyYXksWj1uQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gbEkoQSl7cmV0dXJuIEEhPT1udWxsJiYhWihBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFaKEEuY29uc3RydWN0b3IpJiZGKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBpdD1VKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIERJKEEpe2xldCB0O3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/dD1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6dD1BJiZBLmJ1ZmZlciYmaXQoQS5idWZmZXIpLHR9dmFyIHVJPW5BKCJzdHJpbmciKSxGPW5BKCJmdW5jdGlvbiIpLEN0PW5BKCJudW1iZXIiKSxzQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLGhJPUE9PkE9PT0hMHx8QT09PSExLENBPUE9PntpZihCQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCB0PVVBKEEpO3JldHVybih0PT09bnVsbHx8dD09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LGRJPVUoIkRhdGUiKSx5ST1VKCJGaWxlIiksd0k9VSgiQmxvYiIpLG1JPVUoIkZpbGVMaXN0IikscEk9QT0+c0EoQSkmJkYoQS5waXBlKSxTST1BPT57bGV0IHQ7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8RihBLmFwcGVuZCkmJigodD1CQShBKSk9PT0iZm9ybWRhdGEifHx0PT09Im9iamVjdCImJkYoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sRkk9VSgiVVJMU2VhcmNoUGFyYW1zIiksUkk9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIiIpO2Z1bmN0aW9uIFYoQSx0LHthbGxPd25LZXlzOkk9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgZSxnO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxLKEEpKWZvcihlPTAsZz1BLmxlbmd0aDtlPGc7ZSsrKXQuY2FsbChudWxsLEFbZV0sZSxBKTtlbHNle2xldCByPUk/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksbz1yLmxlbmd0aCxuO2ZvcihlPTA7ZTxvO2UrKyluPXJbZV0sdC5jYWxsKG51bGwsQVtuXSxuLEEpfX1mdW5jdGlvbiBCdChBLHQpe3Q9dC50b0xvd2VyQ2FzZSgpO2xldCBJPU9iamVjdC5rZXlzKEEpLGU9SS5sZW5ndGgsZztmb3IoO2UtLSA+MDspaWYoZz1JW2VdLHQ9PT1nLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGc7cmV0dXJuIG51bGx9dmFyIG50PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsc3Q9QT0+IVooQSkmJkEhPT1udDtmdW5jdGlvbiBOQSgpe2xldHtjYXNlbGVzczpBfT1zdCh0aGlzKSYmdGhpc3x8e30sdD17fSxJPShlLGcpPT57bGV0IHI9QSYmQnQodCxnKXx8ZztDQSh0W3JdKSYmQ0EoZSk/dFtyXT1OQSh0W3JdLGUpOkNBKGUpP3Rbcl09TkEoe30sZSk6SyhlKT90W3JdPWUuc2xpY2UoKTp0W3JdPWV9O2ZvcihsZXQgZT0wLGc9YXJndW1lbnRzLmxlbmd0aDtlPGc7ZSsrKWFyZ3VtZW50c1tlXSYmVihhcmd1bWVudHNbZV0sSSk7cmV0dXJuIHR9dmFyIE5JPShBLHQsSSx7YWxsT3duS2V5czplfT17fSk9PihWKHQsKGcscik9PntJJiZGKGcpP0Fbcl09VyhnLEkpOkFbcl09Z30se2FsbE93bktleXM6ZX0pLEEpLFVJPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksR0k9KEEsdCxJLGUpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSxlKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOnQucHJvdG90eXBlfSksSSYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSxJKX0sa0k9KEEsdCxJLGUpPT57bGV0IGcscixvLG49e307aWYodD10fHx7fSxBPT1udWxsKXJldHVybiB0O2Rve2ZvcihnPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLHI9Zy5sZW5ndGg7ci0tID4wOylvPWdbcl0sKCFlfHxlKG8sQSx0KSkmJiFuW29dJiYodFtvXT1BW29dLG5bb109ITApO0E9SSE9PSExJiZVQShBKX13aGlsZShBJiYoIUl8fEkoQSx0KSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gdH0sTEk9KEEsdCxJKT0+e0E9U3RyaW5nKEEpLChJPT09dm9pZCAwfHxJPkEubGVuZ3RoKSYmKEk9QS5sZW5ndGgpLEktPXQubGVuZ3RoO2xldCBlPUEuaW5kZXhPZih0LEkpO3JldHVybiBlIT09LTEmJmU9PT1JfSxKST1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoSyhBKSlyZXR1cm4gQTtsZXQgdD1BLmxlbmd0aDtpZighQ3QodCkpcmV0dXJuIG51bGw7bGV0IEk9bmV3IEFycmF5KHQpO2Zvcig7dC0tID4wOylJW3RdPUFbdF07cmV0dXJuIEl9LEhJPShBPT50PT5BJiZ0IGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZVQShVaW50OEFycmF5KSksWUk9KEEsdCk9PntsZXQgZT0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLGc7Zm9yKDsoZz1lLm5leHQoKSkmJiFnLmRvbmU7KXtsZXQgcj1nLnZhbHVlO3QuY2FsbChBLHJbMF0sclsxXSl9fSxiST0oQSx0KT0+e2xldCBJLGU9W107Zm9yKDsoST1BLmV4ZWModCkpIT09bnVsbDspZS5wdXNoKEkpO3JldHVybiBlfSxNST1VKCJIVE1MRm9ybUVsZW1lbnQiKSxxST1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxmdW5jdGlvbihJLGUsZyl7cmV0dXJuIGUudG9VcHBlckNhc2UoKStnfSkscnQ9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4odCxJKT0+QS5jYWxsKHQsSSkpKE9iamVjdC5wcm90b3R5cGUpLEtJPVUoIlJlZ0V4cCIpLFF0PShBLHQpPT57bGV0IEk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSksZT17fTtWKEksKGcscik9PntsZXQgbzsobz10KGcscixBKSkhPT0hMSYmKGVbcl09b3x8Zyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLGUpfSxPST1BPT57UXQoQSwodCxJKT0+e2lmKEYoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZihJKSE9PS0xKXJldHVybiExO2xldCBlPUFbSV07aWYoRihlKSl7aWYodC5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiB0KXt0LndyaXRhYmxlPSExO3JldHVybn10LnNldHx8KHQuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFwnIitJKyJcJyIpfSl9fSl9LFRJPShBLHQpPT57bGV0IEk9e30sZT1nPT57Zy5mb3JFYWNoKHI9PntJW3JdPSEwfSl9O3JldHVybiBLKEEpP2UoQSk6ZShTdHJpbmcoQSkuc3BsaXQodCkpLEl9LFBJPSgpPT57fSx4ST0oQSx0KT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6dCksUkE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixvdD0iMDEyMzQ1Njc4OSIsRXQ9e0RJR0lUOm90LEFMUEhBOlJBLEFMUEhBX0RJR0lUOlJBK1JBLnRvVXBwZXJDYXNlKCkrb3R9LGpJPShBPTE2LHQ9RXQuQUxQSEFfRElHSVQpPT57bGV0IEk9IiIse2xlbmd0aDplfT10O2Zvcig7QS0tOylJKz10W01hdGgucmFuZG9tKCkqZXwwXTtyZXR1cm4gSX07ZnVuY3Rpb24gV0koQSl7cmV0dXJuISEoQSYmRihBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIFpJPUE9PntsZXQgdD1uZXcgQXJyYXkoMTApLEk9KGUsZyk9PntpZihzQShlKSl7aWYodC5pbmRleE9mKGUpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gZSkpe3RbZ109ZTtsZXQgcj1LKGUpP1tdOnt9O3JldHVybiBWKGUsKG8sbik9PntsZXQgYT1JKG8sZysxKTshWihhKSYmKHJbbl09YSl9KSx0W2ddPXZvaWQgMCxyfX1yZXR1cm4gZX07cmV0dXJuIEkoQSwwKX0sVkk9VSgiQXN5bmNGdW5jdGlvbiIpLFhJPUE9PkEmJihzQShBKXx8RihBKSkmJkYoQS50aGVuKSYmRihBLmNhdGNoKSxDPXtpc0FycmF5OkssaXNBcnJheUJ1ZmZlcjppdCxpc0J1ZmZlcjpsSSxpc0Zvcm1EYXRhOlNJLGlzQXJyYXlCdWZmZXJWaWV3OkRJLGlzU3RyaW5nOnVJLGlzTnVtYmVyOkN0LGlzQm9vbGVhbjpoSSxpc09iamVjdDpzQSxpc1BsYWluT2JqZWN0OkNBLGlzVW5kZWZpbmVkOlosaXNEYXRlOmRJLGlzRmlsZTp5SSxpc0Jsb2I6d0ksaXNSZWdFeHA6S0ksaXNGdW5jdGlvbjpGLGlzU3RyZWFtOnBJLGlzVVJMU2VhcmNoUGFyYW1zOkZJLGlzVHlwZWRBcnJheTpISSxpc0ZpbGVMaXN0Om1JLGZvckVhY2g6VixtZXJnZTpOQSxleHRlbmQ6TkksdHJpbTpSSSxzdHJpcEJPTTpVSSxpbmhlcml0czpHSSx0b0ZsYXRPYmplY3Q6a0ksa2luZE9mOkJBLGtpbmRPZlRlc3Q6VSxlbmRzV2l0aDpMSSx0b0FycmF5OkpJLGZvckVhY2hFbnRyeTpZSSxtYXRjaEFsbDpiSSxpc0hUTUxGb3JtOk1JLGhhc093blByb3BlcnR5OnJ0LGhhc093blByb3A6cnQscmVkdWNlRGVzY3JpcHRvcnM6UXQsZnJlZXplTWV0aG9kczpPSSx0b09iamVjdFNldDpUSSx0b0NhbWVsQ2FzZTpxSSxub29wOlBJLHRvRmluaXRlTnVtYmVyOnhJLGZpbmRLZXk6QnQsZ2xvYmFsOm50LGlzQ29udGV4dERlZmluZWQ6c3QsQUxQSEFCRVQ6RXQsZ2VuZXJhdGVTdHJpbmc6akksaXNTcGVjQ29tcGxpYW50Rm9ybTpXSSx0b0pTT05PYmplY3Q6WkksaXNBc3luY0ZuOlZJLGlzVGhlbmFibGU6WEl9O2Z1bmN0aW9uIE8oQSx0LEksZSxnKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLHQmJih0aGlzLmNvZGU9dCksSSYmKHRoaXMuY29uZmlnPUkpLGUmJih0aGlzLnJlcXVlc3Q9ZSksZyYmKHRoaXMucmVzcG9uc2U9Zyl9Qy5pbmhlcml0cyhPLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6Qy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgYXQ9Ty5wcm90b3R5cGUsY3Q9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57Y3RbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTyxjdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGF0LCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO08uZnJvbT0oQSx0LEksZSxnLHIpPT57bGV0IG89T2JqZWN0LmNyZWF0ZShhdCk7cmV0dXJuIEMudG9GbGF0T2JqZWN0KEEsbyxmdW5jdGlvbihhKXtyZXR1cm4gYSE9PUVycm9yLnByb3RvdHlwZX0sbj0+biE9PSJpc0F4aW9zRXJyb3IiKSxPLmNhbGwobyxBLm1lc3NhZ2UsdCxJLGUsZyksby5jYXVzZT1BLG8ubmFtZT1BLm5hbWUsciYmT2JqZWN0LmFzc2lnbihvLHIpLG99O3ZhciBsPU87dmFyIFFBPW51bGw7ZnVuY3Rpb24gR0EoQSl7cmV0dXJuIEMuaXNQbGFpbk9iamVjdChBKXx8Qy5pc0FycmF5KEEpfWZ1bmN0aW9uIGx0KEEpe3JldHVybiBDLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIGZ0KEEsdCxJKXtyZXR1cm4gQT9BLmNvbmNhdCh0KS5tYXAoZnVuY3Rpb24oZyxyKXtyZXR1cm4gZz1sdChnKSwhSSYmcj8iWyIrZysiXSI6Z30pLmpvaW4oST8iLiI6IiIpOnR9ZnVuY3Rpb24gekkoQSl7cmV0dXJuIEMuaXNBcnJheShBKSYmIUEuc29tZShHQSl9dmFyIF9JPUMudG9GbGF0T2JqZWN0KEMse30sbnVsbCxmdW5jdGlvbih0KXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QodCl9KTtmdW5jdGlvbiB2SShBLHQsSSl7aWYoIUMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7dD10fHxuZXcoUUF8fEZvcm1EYXRhKSxJPUMudG9GbGF0T2JqZWN0KEkse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihjLHUpe3JldHVybiFDLmlzVW5kZWZpbmVkKHVbY10pfSk7bGV0IGU9SS5tZXRhVG9rZW5zLGc9SS52aXNpdG9yfHxCLHI9SS5kb3RzLG89SS5pbmRleGVzLGE9KEkuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmQy5pc1NwZWNDb21wbGlhbnRGb3JtKHQpO2lmKCFDLmlzRnVuY3Rpb24oZykpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBRKEUpe2lmKEU9PT1udWxsKXJldHVybiIiO2lmKEMuaXNEYXRlKEUpKXJldHVybiBFLnRvSVNPU3RyaW5nKCk7aWYoIWEmJkMuaXNCbG9iKEUpKXRocm93IG5ldyBsKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBDLmlzQXJyYXlCdWZmZXIoRSl8fEMuaXNUeXBlZEFycmF5KEUpP2EmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtFXSk6QnVmZmVyLmZyb20oRSk6RX1mdW5jdGlvbiBCKEUsYyx1KXtsZXQgeT1FO2lmKEUmJiF1JiZ0eXBlb2YgRT09Im9iamVjdCIpe2lmKEMuZW5kc1dpdGgoYywie30iKSljPWU/YzpjLnNsaWNlKDAsLTIpLEU9SlNPTi5zdHJpbmdpZnkoRSk7ZWxzZSBpZihDLmlzQXJyYXkoRSkmJnpJKEUpfHwoQy5pc0ZpbGVMaXN0KEUpfHxDLmVuZHNXaXRoKGMsIltdIikpJiYoeT1DLnRvQXJyYXkoRSkpKXJldHVybiBjPWx0KGMpLHkuZm9yRWFjaChmdW5jdGlvbihOLHRJKXshKEMuaXNVbmRlZmluZWQoTil8fE49PT1udWxsKSYmdC5hcHBlbmQobz09PSEwP2Z0KFtjXSx0SSxyKTpvPT09bnVsbD9jOmMrIltdIixRKE4pKX0pLCExfXJldHVybiBHQShFKT8hMDoodC5hcHBlbmQoZnQodSxjLHIpLFEoRSkpLCExKX1sZXQgaT1bXSxmPU9iamVjdC5hc3NpZ24oX0kse2RlZmF1bHRWaXNpdG9yOkIsY29udmVydFZhbHVlOlEsaXNWaXNpdGFibGU6R0F9KTtmdW5jdGlvbiBzKEUsYyl7aWYoIUMuaXNVbmRlZmluZWQoRSkpe2lmKGkuaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitjLmpvaW4oIi4iKSk7aS5wdXNoKEUpLEMuZm9yRWFjaChFLGZ1bmN0aW9uKHksUil7KCEoQy5pc1VuZGVmaW5lZCh5KXx8eT09PW51bGwpJiZnLmNhbGwodCx5LEMuaXNTdHJpbmcoUik/Ui50cmltKCk6UixjLGYpKT09PSEwJiZzKHksYz9jLmNvbmNhdChSKTpbUl0pfSksaS5wb3AoKX19aWYoIUMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBzKEEpLHR9dmFyIEo9dkk7ZnVuY3Rpb24gRHQoQSl7bGV0IHQ9eyIhIjoiJTI1MjEiLCJcJyI6IiUyNTI3IiwiKCI6IiUyNTI4IiwiKSI6IiUyNTI5IiwifiI6IiUyNTdFIiwiJTI1MjAiOiIrIiwiJTI1MDAiOiJcXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shXCcoKX5dfCUyNTIwfCUyNTAwL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX1mdW5jdGlvbiB1dChBLHQpe3RoaXMuX3BhaXJzPVtdLEEmJkooQSx0aGlzLHQpfXZhciBodD11dC5wcm90b3R5cGU7aHQuYXBwZW5kPWZ1bmN0aW9uKHQsSSl7dGhpcy5fcGFpcnMucHVzaChbdCxJXSl9O2h0LnRvU3RyaW5nPWZ1bmN0aW9uKHQpe2xldCBJPXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUsRHQpfTpEdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKGcpe3JldHVybiBJKGdbMF0pKyI9IitJKGdbMV0pfSwiIikuam9pbigiJiIpfTt2YXIgRUE9dXQ7ZnVuY3Rpb24gJEkoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lMjUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNTI0L2csIiQiKS5yZXBsYWNlKC8lMjUyQy9naSwiLCIpLnJlcGxhY2UoLyUyNTIwL2csIisiKS5yZXBsYWNlKC8lMjU1Qi9naSwiWyIpLnJlcGxhY2UoLyUyNTVEL2dpLCJdIil9ZnVuY3Rpb24gWChBLHQsSSl7aWYoIXQpcmV0dXJuIEE7bGV0IGU9SSYmSS5lbmNvZGV8fCRJLGc9SSYmSS5zZXJpYWxpemUscjtpZihnP3I9Zyh0LEkpOnI9Qy5pc1VSTFNlYXJjaFBhcmFtcyh0KT90LnRvU3RyaW5nKCk6bmV3IEVBKHQsSSkudG9TdHJpbmcoZSkscil7bGV0IG89QS5pbmRleE9mKCIlMjMiKTtvIT09LTEmJihBPUEuc2xpY2UoMCxvKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrcn1yZXR1cm4gQX12YXIga0E9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZSh0LEksZSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOnQscmVqZWN0ZWQ6SSxzeW5jaHJvbm91czplP2Uuc3luY2hyb25vdXM6ITEscnVuV2hlbjplP2UucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdCh0KXt0aGlzLmhhbmRsZXJzW3RdJiYodGhpcy5oYW5kbGVyc1t0XT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKHQpe0MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKGUpe2UhPT1udWxsJiZ0KGUpfSl9fSxMQT1rQTt2YXIgYUE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBkdD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6RUE7dmFyIHl0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgd3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgbXQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6ZHQsRm9ybURhdGE6eXQsQmxvYjp3dH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBKQT17fTtlSShKQSx7aGFzQnJvd3NlckVudjooKT0+cHQsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5BZSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PnRlfSk7dmFyIHB0PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLEFlPShBPT5wdCYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLHRlPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgdz17Li4uSkEsLi4ubXR9O2Z1bmN0aW9uIEhBKEEsdCl7cmV0dXJuIEooQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKEksZSxnLHIpe3JldHVybiB3LmlzTm9kZSYmQy5pc0J1ZmZlcihJKT8odGhpcy5hcHBlbmQoZSxJLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOnIuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sdCkpfWZ1bmN0aW9uIEllKEEpe3JldHVybiBDLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZyxBKS5tYXAodD0+dFswXT09PSJbXSI/IiI6dFsxXXx8dFswXSl9ZnVuY3Rpb24gZWUoQSl7bGV0IHQ9e30sST1PYmplY3Qua2V5cyhBKSxlLGc9SS5sZW5ndGgscjtmb3IoZT0wO2U8ZztlKyspcj1JW2VdLHRbcl09QVtyXTtyZXR1cm4gdH1mdW5jdGlvbiBnZShBKXtmdW5jdGlvbiB0KEksZSxnLHIpe2xldCBvPUlbcisrXTtpZihvPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IG49TnVtYmVyLmlzRmluaXRlKCtvKSxhPXI+PUkubGVuZ3RoO3JldHVybiBvPSFvJiZDLmlzQXJyYXkoZyk/Zy5sZW5ndGg6byxhPyhDLmhhc093blByb3AoZyxvKT9nW29dPVtnW29dLGVdOmdbb109ZSwhbik6KCghZ1tvXXx8IUMuaXNPYmplY3QoZ1tvXSkpJiYoZ1tvXT1bXSksdChJLGUsZ1tvXSxyKSYmQy5pc0FycmF5KGdbb10pJiYoZ1tvXT1lZShnW29dKSksIW4pfWlmKEMuaXNGb3JtRGF0YShBKSYmQy5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCBJPXt9O3JldHVybiBDLmZvckVhY2hFbnRyeShBLChlLGcpPT57dChJZShlKSxnLEksMCl9KSxJfXJldHVybiBudWxsfXZhciBjQT1nZTtmdW5jdGlvbiByZShBLHQsSSl7aWYoQy5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKEEpLEMudHJpbShBKX1jYXRjaChlKXtpZihlLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IGV9cmV0dXJuKEl8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgWUE9e3RyYW5zaXRpb25hbDphQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKHQsSSl7bGV0IGU9SS5nZXRDb250ZW50VHlwZSgpfHwiIixnPWUuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLHI9Qy5pc09iamVjdCh0KTtpZihyJiZDLmlzSFRNTEZvcm0odCkmJih0PW5ldyBGb3JtRGF0YSh0KSksQy5pc0Zvcm1EYXRhKHQpKXJldHVybiBnP0pTT04uc3RyaW5naWZ5KGNBKHQpKTp0O2lmKEMuaXNBcnJheUJ1ZmZlcih0KXx8Qy5pc0J1ZmZlcih0KXx8Qy5pc1N0cmVhbSh0KXx8Qy5pc0ZpbGUodCl8fEMuaXNCbG9iKHQpKXJldHVybiB0O2lmKEMuaXNBcnJheUJ1ZmZlclZpZXcodCkpcmV0dXJuIHQuYnVmZmVyO2lmKEMuaXNVUkxTZWFyY2hQYXJhbXModCkpcmV0dXJuIEkuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksdC50b1N0cmluZygpO2xldCBuO2lmKHIpe2lmKGUuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIEhBKHQsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigobj1DLmlzRmlsZUxpc3QodCkpfHxlLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGE9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBKKG4/eyJmaWxlc1tdIjp0fTp0LGEmJm5ldyBhLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gcnx8Zz8oSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLHJlKHQpKTp0fV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKHQpe2xldCBJPXRoaXMudHJhbnNpdGlvbmFsfHxZQS50cmFuc2l0aW9uYWwsZT1JJiZJLmZvcmNlZEpTT05QYXJzaW5nLGc9dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYodCYmQy5pc1N0cmluZyh0KSYmKGUmJiF0aGlzLnJlc3BvbnNlVHlwZXx8Zykpe2xldCBvPSEoSSYmSS5zaWxlbnRKU09OUGFyc2luZykmJmc7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKG4pe2lmKG8pdGhyb3cgbi5uYW1lPT09IlN5bnRheEVycm9yIj9sLmZyb20obixsLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOm59fXJldHVybiB0fV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp3LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp3LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIwMCYmdDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e1lBLmhlYWRlcnNbQV09e319KTt2YXIgVD1ZQTt2YXIgb2U9Qy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxTdD1BPT57bGV0IHQ9e30sSSxlLGc7cmV0dXJuIEEmJkEuc3BsaXQoYCUwQWApLmZvckVhY2goZnVuY3Rpb24obyl7Zz1vLmluZGV4T2YoIjoiKSxJPW8uc3Vic3RyaW5nKDAsZykudHJpbSgpLnRvTG93ZXJDYXNlKCksZT1vLnN1YnN0cmluZyhnKzEpLnRyaW0oKSwhKCFJfHx0W0ldJiZvZVtJXSkmJihJPT09InNldC1jb29raWUiP3RbSV0/dFtJXS5wdXNoKGUpOnRbSV09W2VdOnRbSV09dFtJXT90W0ldKyIsICIrZTplKX0pLHR9O3ZhciBGdD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIHooQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBmQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6Qy5pc0FycmF5KEEpP0EubWFwKGZBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gaWUoQSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxJPS8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2csZTtmb3IoO2U9SS5leGVjKEEpOyl0W2VbMV1dPWVbMl07cmV0dXJuIHR9dmFyIENlPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhJTIzJCUmXCcqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIGJBKEEsdCxJLGUsZyl7aWYoQy5pc0Z1bmN0aW9uKGUpKXJldHVybiBlLmNhbGwodGhpcyx0LEkpO2lmKGcmJih0PUkpLCEhQy5pc1N0cmluZyh0KSl7aWYoQy5pc1N0cmluZyhlKSlyZXR1cm4gdC5pbmRleE9mKGUpIT09LTE7aWYoQy5pc1JlZ0V4cChlKSlyZXR1cm4gZS50ZXN0KHQpfX1mdW5jdGlvbiBCZShBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csKHQsSSxlKT0+SS50b1VwcGVyQ2FzZSgpK2UpfWZ1bmN0aW9uIG5lKEEsdCl7bGV0IEk9Qy50b0NhbWVsQ2FzZSgiICIrdCk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKGU9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxlK0kse3ZhbHVlOmZ1bmN0aW9uKGcscixvKXtyZXR1cm4gdGhpc1tlXS5jYWxsKHRoaXMsdCxnLHIsbyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dCYmdGhpcy5zZXQodCl9c2V0KHQsSSxlKXtsZXQgZz10aGlzO2Z1bmN0aW9uIHIobixhLFEpe2xldCBCPXooYSk7aWYoIUIpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBpPUMuZmluZEtleShnLEIpOyghaXx8Z1tpXT09PXZvaWQgMHx8UT09PSEwfHxRPT09dm9pZCAwJiZnW2ldIT09ITEpJiYoZ1tpfHxhXT1mQShuKSl9bGV0IG89KG4sYSk9PkMuZm9yRWFjaChuLChRLEIpPT5yKFEsQixhKSk7cmV0dXJuIEMuaXNQbGFpbk9iamVjdCh0KXx8dCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/byh0LEkpOkMuaXNTdHJpbmcodCkmJih0PXQudHJpbSgpKSYmIUNlKHQpP28oU3QodCksSSk6dCE9bnVsbCYmcihJLHQsZSksdGhpc31nZXQodCxJKXtpZih0PXoodCksdCl7bGV0IGU9Qy5maW5kS2V5KHRoaXMsdCk7aWYoZSl7bGV0IGc9dGhpc1tlXTtpZighSSlyZXR1cm4gZztpZihJPT09ITApcmV0dXJuIGllKGcpO2lmKEMuaXNGdW5jdGlvbihJKSlyZXR1cm4gSS5jYWxsKHRoaXMsZyxlKTtpZihDLmlzUmVnRXhwKEkpKXJldHVybiBJLmV4ZWMoZyk7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtyZXR1cm4hIShlJiZ0aGlzW2VdIT09dm9pZCAwJiYoIUl8fGJBKHRoaXMsdGhpc1tlXSxlLEkpKSl9cmV0dXJuITF9ZGVsZXRlKHQsSSl7bGV0IGU9dGhpcyxnPSExO2Z1bmN0aW9uIHIobyl7aWYobz16KG8pLG8pe2xldCBuPUMuZmluZEtleShlLG8pO24mJighSXx8YkEoZSxlW25dLG4sSSkpJiYoZGVsZXRlIGVbbl0sZz0hMCl9fXJldHVybiBDLmlzQXJyYXkodCk/dC5mb3JFYWNoKHIpOnIodCksZ31jbGVhcih0KXtsZXQgST1PYmplY3Qua2V5cyh0aGlzKSxlPUkubGVuZ3RoLGc9ITE7Zm9yKDtlLS07KXtsZXQgcj1JW2VdOyghdHx8YkEodGhpcyx0aGlzW3JdLHIsdCwhMCkpJiYoZGVsZXRlIHRoaXNbcl0sZz0hMCl9cmV0dXJuIGd9bm9ybWFsaXplKHQpe2xldCBJPXRoaXMsZT17fTtyZXR1cm4gQy5mb3JFYWNoKHRoaXMsKGcscik9PntsZXQgbz1DLmZpbmRLZXkoZSxyKTtpZihvKXtJW29dPWZBKGcpLGRlbGV0ZSBJW3JdO3JldHVybn1sZXQgbj10P0JlKHIpOlN0cmluZyhyKS50cmltKCk7biE9PXImJmRlbGV0ZSBJW3JdLElbbl09ZkEoZyksZVtuXT0hMH0pLHRoaXN9Y29uY2F0KC4uLnQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLnQpfXRvSlNPTih0KXtsZXQgST1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBDLmZvckVhY2godGhpcywoZSxnKT0+e2UhPW51bGwmJmUhPT0hMSYmKElbZ109dCYmQy5pc0FycmF5KGUpP2Uuam9pbigiLCAiKTplKX0pLEl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW3QsSV0pPT50KyI6ICIrSSkuam9pbihgJTBBYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM/dDpuZXcgdGhpcyh0KX1zdGF0aWMgY29uY2F0KHQsLi4uSSl7bGV0IGU9bmV3IHRoaXModCk7cmV0dXJuIEkuZm9yRWFjaChnPT5lLnNldChnKSksZX1zdGF0aWMgYWNjZXNzb3IodCl7bGV0IGU9KHRoaXNbRnRdPXRoaXNbRnRdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsZz10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiByKG8pe2xldCBuPXoobyk7ZVtuXXx8KG5lKGcsbyksZVtuXT0hMCl9cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSx0aGlzfX07UC5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7Qy5yZWR1Y2VEZXNjcmlwdG9ycyhQLnByb3RvdHlwZSwoe3ZhbHVlOkF9LHQpPT57bGV0IEk9dFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQoZSl7dGhpc1tJXT1lfX19KTtDLmZyZWV6ZU1ldGhvZHMoUCk7dmFyIG09UDtmdW5jdGlvbiBfKEEsdCl7bGV0IEk9dGhpc3x8VCxlPXR8fEksZz1tLmZyb20oZS5oZWFkZXJzKSxyPWUuZGF0YTtyZXR1cm4gQy5mb3JFYWNoKEEsZnVuY3Rpb24obil7cj1uLmNhbGwoSSxyLGcubm9ybWFsaXplKCksdD90LnN0YXR1czp2b2lkIDApfSksZy5ub3JtYWxpemUoKSxyfWZ1bmN0aW9uIHYoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBSdChBLHQsSSl7bC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixsLkVSUl9DQU5DRUxFRCx0LEkpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Qy5pbmhlcml0cyhSdCxsLHtfX0NBTkNFTF9fOiEwfSk7dmFyIEg9UnQ7ZnVuY3Rpb24gTUEoQSx0LEkpe2xldCBlPUkuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFJLnN0YXR1c3x8IWV8fGUoSS5zdGF0dXMpP0EoSSk6dChuZXcgbCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK0kuc3RhdHVzLFtsLkVSUl9CQURfUkVRVUVTVCxsLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IoSS5zdGF0dXMvMTAwKS00XSxJLmNvbmZpZyxJLnJlcXVlc3QsSSkpfXZhciBOdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSx0LEksZSxnLHIpe2xldCBvPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQodCldO0MuaXNOdW1iZXIoSSkmJm8ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKEkpLnRvR01UU3RyaW5nKCkpLEMuaXNTdHJpbmcoZSkmJm8ucHVzaCgicGF0aD0iK2UpLEMuaXNTdHJpbmcoZykmJm8ucHVzaCgiZG9tYWluPSIrZykscj09PSEwJiZvLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1vLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXFxccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIHFBKEEpe3JldHVybi9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIEtBKEEsdCl7cmV0dXJuIHQ/QS5yZXBsYWNlKC9cXC8/XFwvJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cXC8rLywiIik6QX1mdW5jdGlvbiAkKEEsdCl7cmV0dXJuIEEmJiFxQSh0KT9LQShBLHQpOnR9dmFyIFV0PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxJPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxlO2Z1bmN0aW9uIGcocil7bGV0IG89cjtyZXR1cm4gdCYmKEkuc2V0QXR0cmlidXRlKCJocmVmIixvKSxvPUkuaHJlZiksSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLHtocmVmOkkuaHJlZixwcm90b2NvbDpJLnByb3RvY29sP0kucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OkkuaG9zdCxzZWFyY2g6SS5zZWFyY2g/SS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sIiIpOiIiLGhhc2g6SS5oYXNoP0kuaGFzaC5yZXBsYWNlKC9eJTIzLywiIik6IiIsaG9zdG5hbWU6SS5ob3N0bmFtZSxwb3J0OkkucG9ydCxwYXRobmFtZTpJLnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj9JLnBhdGhuYW1lOiIvIitJLnBhdGhuYW1lfX1yZXR1cm4gZT1nKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihvKXtsZXQgbj1DLmlzU3RyaW5nKG8pP2cobyk6bztyZXR1cm4gbi5wcm90b2NvbD09PWUucHJvdG9jb2wmJm4uaG9zdD09PWUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gT0EoQSl7bGV0IHQ9L14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWMoQSk7cmV0dXJuIHQmJnRbMV18fCIifWZ1bmN0aW9uIHNlKEEsdCl7QT1BfHwxMDtsZXQgST1uZXcgQXJyYXkoQSksZT1uZXcgQXJyYXkoQSksZz0wLHI9MCxvO3JldHVybiB0PXQhPT12b2lkIDA/dDoxZTMsZnVuY3Rpb24oYSl7bGV0IFE9RGF0ZS5ub3coKSxCPWVbcl07b3x8KG89USksSVtnXT1hLGVbZ109UTtsZXQgaT1yLGY9MDtmb3IoO2khPT1nOylmKz1JW2krK10saT1pJUE7aWYoZz0oZysxKSVBLGc9PT1yJiYocj0ocisxKSVBKSxRLW88dClyZXR1cm47bGV0IHM9QiYmUS1CO3JldHVybiBzP01hdGgucm91bmQoZioxZTMvcyk6dm9pZCAwfX12YXIgR3Q9c2U7ZnVuY3Rpb24ga3QoQSx0KXtsZXQgST0wLGU9R3QoNTAsMjUwKTtyZXR1cm4gZz0+e2xldCByPWcubG9hZGVkLG89Zy5sZW5ndGhDb21wdXRhYmxlP2cudG90YWw6dm9pZCAwLG49ci1JLGE9ZShuKSxRPXI8PW87ST1yO2xldCBCPXtsb2FkZWQ6cix0b3RhbDpvLHByb2dyZXNzOm8/ci9vOnZvaWQgMCxieXRlczpuLHJhdGU6YXx8dm9pZCAwLGVzdGltYXRlZDphJiZvJiZRPyhvLXIpL2E6dm9pZCAwLGV2ZW50Omd9O0JbdD8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKEIpfX12YXIgUWU9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixMdD1RZSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEksZSl7bGV0IGc9QS5kYXRhLHI9bS5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpvLHdpdGhYU1JGVG9rZW46bn09QSxhO2Z1bmN0aW9uIFEoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYSl9bGV0IEI7aWYoQy5pc0Zvcm1EYXRhKGcpKXtpZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8dy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpci5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoQj1yLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtjLC4uLnVdPUI/Qi5zcGxpdCgiOyIpLm1hcCh5PT55LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO3Iuc2V0Q29udGVudFR5cGUoW2N8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi51XS5qb2luKCI7ICIpKX19bGV0IGk9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IGM9QS5hdXRoLnVzZXJuYW1lfHwiIix1PUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7ci5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoYysiOiIrdSkpfWxldCBmPSQoQS5iYXNlVVJMLEEudXJsKTtpLm9wZW4oQS5tZXRob2QudG9VcHBlckNhc2UoKSxYKGYsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksaS50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBzKCl7aWYoIWkpcmV0dXJuO2xldCBjPW0uZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGkmJmkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHk9e2RhdGE6IW98fG89PT0idGV4dCJ8fG89PT0ianNvbiI/aS5yZXNwb25zZVRleHQ6aS5yZXNwb25zZSxzdGF0dXM6aS5zdGF0dXMsc3RhdHVzVGV4dDppLnN0YXR1c1RleHQsaGVhZGVyczpjLGNvbmZpZzpBLHJlcXVlc3Q6aX07TUEoZnVuY3Rpb24oTil7SShOKSxRKCl9LGZ1bmN0aW9uKE4pe2UoTiksUSgpfSx5KSxpPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBpP2kub25sb2FkZW5kPXM6aS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshaXx8aS5yZWFkeVN0YXRlIT09NHx8aS5zdGF0dXM9PT0wJiYhKGkucmVzcG9uc2VVUkwmJmkucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KHMpfSxpLm9uYWJvcnQ9ZnVuY3Rpb24oKXtpJiYoZShuZXcgbCgiUmVxdWVzdCBhYm9ydGVkIixsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGwpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBsKCJOZXR3b3JrIEVycm9yIixsLkVSUl9ORVRXT1JLLEEsaSkpLGk9bnVsbH0saS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgdT1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIseT1BLnRyYW5zaXRpb25hbHx8YUE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodT1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLGUobmV3IGwodSx5LmNsYXJpZnlUaW1lb3V0RXJyb3I/bC5FVElNRURPVVQ6bC5FQ09OTkFCT1JURUQsQSxpKSksaT1udWxsfSx3Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKG4mJkMuaXNGdW5jdGlvbihuKSYmKG49bihBKSksbnx8biE9PSExJiZVdChmKSkpe2xldCBjPUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJk50LnJlYWQoQS54c3JmQ29va2llTmFtZSk7YyYmci5zZXQoQS54c3JmSGVhZGVyTmFtZSxjKX1nPT09dm9pZCAwJiZyLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGkmJkMuZm9yRWFjaChyLnRvSlNPTigpLGZ1bmN0aW9uKHUseSl7aS5zZXRSZXF1ZXN0SGVhZGVyKHksdSl9KSxDLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KGkud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLG8mJm8hPT0ianNvbiImJihpLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZpLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkudXBsb2FkJiZpLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa3QoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGE9Yz0+e2kmJihlKCFjfHxjLnR5cGU/bmV3IEgobnVsbCxBLGkpOmMpLGkuYWJvcnQoKSxpPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShhKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/YSgpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixhKSkpO2xldCBFPU9BKGYpO2lmKEUmJncucHJvdG9jb2xzLmluZGV4T2YoRSk9PT0tMSl7ZShuZXcgbCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitFKyI6IixsLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWkuc2VuZChnfHxudWxsKX0pfTt2YXIgVEE9e2h0dHA6UUEseGhyOkx0fTtDLmZvckVhY2goVEEsKEEsdCk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTp0fSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOnR9KX19KTt2YXIgSnQ9QT0+YC0gJHtBfWAsRWU9QT0+Qy5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLGxBPXtnZXRBZGFwdGVyOkE9PntBPUMuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOnR9PUEsSSxlLGc9e307Zm9yKGxldCByPTA7cjx0O3IrKyl7ST1BW3JdO2xldCBvO2lmKGU9SSwhRWUoSSkmJihlPVRBWyhvPVN0cmluZyhJKSkudG9Mb3dlckNhc2UoKV0sZT09PXZvaWQgMCkpdGhyb3cgbmV3IGwoYFVua25vd24gYWRhcHRlciBcJyR7b31cJ2ApO2lmKGUpYnJlYWs7Z1tvfHwiJTIzIityXT1lfWlmKCFlKXtsZXQgcj1PYmplY3QuZW50cmllcyhnKS5tYXAoKFtuLGFdKT0+YGFkYXB0ZXIgJHtufSBgKyhhPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksbz10P3IubGVuZ3RoPjE/YHNpbmNlIDolMEFgK3IubWFwKEp0KS5qb2luKGAlMEFgKToiICIrSnQoclswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgbCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK28sIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBlfSxhZGFwdGVyczpUQX07ZnVuY3Rpb24gUEEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEgobnVsbCxBKX1mdW5jdGlvbiBEQShBKXtyZXR1cm4gUEEoQSksQS5oZWFkZXJzPW0uZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxsQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8VC5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBQQShBKSxlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlKSxlLmhlYWRlcnM9bS5mcm9tKGUuaGVhZGVycyksZX0sZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSl8fChQQShBKSxlJiZlLnJlc3BvbnNlJiYoZS5yZXNwb25zZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZS5yZXNwb25zZSksZS5yZXNwb25zZS5oZWFkZXJzPW0uZnJvbShlLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QoZSl9KX12YXIgSHQ9QT0+QSBpbnN0YW5jZW9mIG0/ey4uLkF9OkE7ZnVuY3Rpb24gayhBLHQpe3Q9dHx8e307bGV0IEk9e307ZnVuY3Rpb24gZShRLEIsaSl7cmV0dXJuIEMuaXNQbGFpbk9iamVjdChRKSYmQy5pc1BsYWluT2JqZWN0KEIpP0MubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6aX0sUSxCKTpDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZSh7fSxCKTpDLmlzQXJyYXkoQik/Qi5zbGljZSgpOkJ9ZnVuY3Rpb24gZyhRLEIsaSl7aWYoQy5pc1VuZGVmaW5lZChCKSl7aWYoIUMuaXNVbmRlZmluZWQoUSkpcmV0dXJuIGUodm9pZCAwLFEsaSl9ZWxzZSByZXR1cm4gZShRLEIsaSl9ZnVuY3Rpb24gcihRLEIpe2lmKCFDLmlzVW5kZWZpbmVkKEIpKXJldHVybiBlKHZvaWQgMCxCKX1mdW5jdGlvbiBvKFEsQil7aWYoQy5pc1VuZGVmaW5lZChCKSl7aWYoIUMuaXNVbmRlZmluZWQoUSkpcmV0dXJuIGUodm9pZCAwLFEpfWVsc2UgcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG4oUSxCLGkpe2lmKGkgaW4gdClyZXR1cm4gZShRLEIpO2lmKGkgaW4gQSlyZXR1cm4gZSh2b2lkIDAsUSl9bGV0IGE9e3VybDpyLG1ldGhvZDpyLGRhdGE6cixiYXNlVVJMOm8sdHJhbnNmb3JtUmVxdWVzdDpvLHRyYW5zZm9ybVJlc3BvbnNlOm8scGFyYW1zU2VyaWFsaXplcjpvLHRpbWVvdXQ6byx0aW1lb3V0TWVzc2FnZTpvLHdpdGhDcmVkZW50aWFsczpvLHdpdGhYU1JGVG9rZW46byxhZGFwdGVyOm8scmVzcG9uc2VUeXBlOm8seHNyZkNvb2tpZU5hbWU6byx4c3JmSGVhZGVyTmFtZTpvLG9uVXBsb2FkUHJvZ3Jlc3M6byxvbkRvd25sb2FkUHJvZ3Jlc3M6byxkZWNvbXByZXNzOm8sbWF4Q29udGVudExlbmd0aDpvLG1heEJvZHlMZW5ndGg6byxiZWZvcmVSZWRpcmVjdDpvLHRyYW5zcG9ydDpvLGh0dHBBZ2VudDpvLGh0dHBzQWdlbnQ6byxjYW5jZWxUb2tlbjpvLHNvY2tldFBhdGg6byxyZXNwb25zZUVuY29kaW5nOm8sdmFsaWRhdGVTdGF0dXM6bixoZWFkZXJzOihRLEIpPT5nKEh0KFEpLEh0KEIpLCEwKX07cmV0dXJuIEMuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsdCkpLGZ1bmN0aW9uKEIpe2xldCBpPWFbQl18fGcsZj1pKEFbQl0sdFtCXSxCKTtDLmlzVW5kZWZpbmVkKGYpJiZpIT09bnx8KElbQl09Zil9KSxJfXZhciB1QT0iMS42LjgiO3ZhciB4QT17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKEEsdCk9Pnt4QVtBXT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PT1BfHwiYSIrKHQ8MT8ibiAiOiIgIikrQX19KTt2YXIgWXQ9e307eEEudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKHQsSSxlKXtmdW5jdGlvbiBnKHIsbyl7cmV0dXJuIltBeGlvcyB2Iit1QSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFwnIityKyJcJyIrbysoZT8iLiAiK2U6IiIpfXJldHVybihyLG8sbik9PntpZih0PT09ITEpdGhyb3cgbmV3IGwoZyhvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKEk/IiBpbiAiK0k6IiIpKSxsLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gSSYmIVl0W29dJiYoWXRbb109ITAsY29uc29sZS53YXJuKGcobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrSSsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSx0P3QocixvLG4pOiEwfX07ZnVuY3Rpb24gYWUoQSx0LEkpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgbCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IGU9T2JqZWN0LmtleXMoQSksZz1lLmxlbmd0aDtmb3IoO2ctLSA+MDspe2xldCByPWVbZ10sbz10W3JdO2lmKG8pe2xldCBuPUFbcl0sYT1uPT09dm9pZCAwfHxvKG4scixBKTtpZihhIT09ITApdGhyb3cgbmV3IGwoIm9wdGlvbiAiK3IrIiBtdXN0IGJlICIrYSxsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZihJIT09ITApdGhyb3cgbmV3IGwoIlVua25vd24gb3B0aW9uICIrcixsLkVSUl9CQURfT1BUSU9OKX19dmFyIGhBPXthc3NlcnRPcHRpb25zOmFlLHZhbGlkYXRvcnM6eEF9O3ZhciBZPWhBLnZhbGlkYXRvcnMseD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZmF1bHRzPXQsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IExBLHJlc3BvbnNlOm5ldyBMQX19YXN5bmMgcmVxdWVzdCh0LEkpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdCh0LEkpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcil7bGV0IGc7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZz17fSk6Zz1uZXcgRXJyb3I7bGV0IHI9Zy5zdGFjaz9nLnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sIiIpOiIiO2Uuc3RhY2s/ciYmIVN0cmluZyhlLnN0YWNrKS5lbmRzV2l0aChyLnJlcGxhY2UoL14uK1xcbi4rXFxuLywiIikpJiYoZS5zdGFjays9YCUwQWArcik6ZS5zdGFjaz1yfXRocm93IGV9fV9yZXF1ZXN0KHQsSSl7dHlwZW9mIHQ9PSJzdHJpbmciPyhJPUl8fHt9LEkudXJsPXQpOkk9dHx8e30sST1rKHRoaXMuZGVmYXVsdHMsSSk7bGV0e3RyYW5zaXRpb25hbDplLHBhcmFtc1NlcmlhbGl6ZXI6ZyxoZWFkZXJzOnJ9PUk7ZSE9PXZvaWQgMCYmaEEuYXNzZXJ0T3B0aW9ucyhlLHtzaWxlbnRKU09OUGFyc2luZzpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pfSwhMSksZyE9bnVsbCYmKEMuaXNGdW5jdGlvbihnKT9JLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpnfTpoQS5hc3NlcnRPcHRpb25zKGcse2VuY29kZTpZLmZ1bmN0aW9uLHNlcmlhbGl6ZTpZLmZ1bmN0aW9ufSwhMCkpLEkubWV0aG9kPShJLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBvPXImJkMubWVyZ2Uoci5jb21tb24scltJLm1ldGhvZF0pO3ImJkMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIHJbRV19KSxJLmhlYWRlcnM9bS5jb25jYXQobyxyKTtsZXQgbj1bXSxhPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihjKXt0eXBlb2YgYy5ydW5XaGVuPT0iZnVuY3Rpb24iJiZjLnJ1bldoZW4oSSk9PT0hMXx8KGE9YSYmYy5zeW5jaHJvbm91cyxuLnVuc2hpZnQoYy5mdWxmaWxsZWQsYy5yZWplY3RlZCkpfSk7bGV0IFE9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihjKXtRLnB1c2goYy5mdWxmaWxsZWQsYy5yZWplY3RlZCl9KTtsZXQgQixpPTAsZjtpZighYSl7bGV0IEU9W0RBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsbiksRS5wdXNoLmFwcGx5KEUsUSksZj1FLmxlbmd0aCxCPVByb21pc2UucmVzb2x2ZShJKTtpPGY7KUI9Qi50aGVuKEVbaSsrXSxFW2krK10pO3JldHVybiBCfWY9bi5sZW5ndGg7bGV0IHM9STtmb3IoaT0wO2k8Zjspe2xldCBFPW5baSsrXSxjPW5baSsrXTt0cnl7cz1FKHMpfWNhdGNoKHUpe2MuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7Qj1EQS5jYWxsKHRoaXMscyl9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihpPTAsZj1RLmxlbmd0aDtpPGY7KUI9Qi50aGVuKFFbaSsrXSxRW2krK10pO3JldHVybiBCfWdldFVyaSh0KXt0PWsodGhpcy5kZWZhdWx0cyx0KTtsZXQgST0kKHQuYmFzZVVSTCx0LnVybCk7cmV0dXJuIFgoSSx0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpfX07Qy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbih0KXt4LnByb3RvdHlwZVt0XT1mdW5jdGlvbihJLGUpe3JldHVybiB0aGlzLnJlcXVlc3QoayhlfHx7fSx7bWV0aG9kOnQsdXJsOkksZGF0YTooZXx8e30pLmRhdGF9KSl9fSk7Qy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gSShlKXtyZXR1cm4gZnVuY3Rpb24ocixvLG4pe3JldHVybiB0aGlzLnJlcXVlc3QoayhufHx7fSx7bWV0aG9kOnQsaGVhZGVyczplP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpyLGRhdGE6b30pKX19eC5wcm90b3R5cGVbdF09SSgpLHgucHJvdG90eXBlW3QrIkZvcm0iXT1JKCEwKX0pO3ZhciBBQT14O3ZhciBqQT1jbGFzcyBBe2NvbnN0cnVjdG9yKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgSTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24ocil7ST1yfSk7bGV0IGU9dGhpczt0aGlzLnByb21pc2UudGhlbihnPT57aWYoIWUuX2xpc3RlbmVycylyZXR1cm47bGV0IHI9ZS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO3ItLSA+MDspZS5fbGlzdGVuZXJzW3JdKGcpO2UuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49Zz0+e2xldCByLG89bmV3IFByb21pc2Uobj0+e2Uuc3Vic2NyaWJlKG4pLHI9bn0pLnRoZW4oZyk7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7ZS51bnN1YnNjcmliZShyKX0sb30sdChmdW5jdGlvbihyLG8sbil7ZS5yZWFzb258fChlLnJlYXNvbj1uZXcgSChyLG8sbiksSShlLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZSh0KXtpZih0aGlzLnJlYXNvbil7dCh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaCh0KTp0aGlzLl9saXN0ZW5lcnM9W3RdfXVuc3Vic2NyaWJlKHQpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBJPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKHQpO0khPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShJLDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgdDtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24oZyl7dD1nfSksY2FuY2VsOnR9fX0sYnQ9akE7ZnVuY3Rpb24gV0EoQSl7cmV0dXJuIGZ1bmN0aW9uKEkpe3JldHVybiBBLmFwcGx5KG51bGwsSSl9fWZ1bmN0aW9uIFpBKEEpe3JldHVybiBDLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBWQT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoVkEpLmZvckVhY2goKFtBLHRdKT0+e1ZBW3RdPUF9KTt2YXIgTXQ9VkE7ZnVuY3Rpb24gcXQoQSl7bGV0IHQ9bmV3IEFBKEEpLEk9VyhBQS5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gQy5leHRlbmQoSSxBQS5wcm90b3R5cGUsdCx7YWxsT3duS2V5czohMH0pLEMuZXh0ZW5kKEksdCxudWxsLHthbGxPd25LZXlzOiEwfSksSS5jcmVhdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHF0KGsoQSxnKSl9LEl9dmFyIGg9cXQoVCk7aC5BeGlvcz1BQTtoLkNhbmNlbGVkRXJyb3I9SDtoLkNhbmNlbFRva2VuPWJ0O2guaXNDYW5jZWw9djtoLlZFUlNJT049dUE7aC50b0Zvcm1EYXRhPUo7aC5BeGlvc0Vycm9yPWw7aC5DYW5jZWw9aC5DYW5jZWxlZEVycm9yO2guYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLmFsbCh0KX07aC5zcHJlYWQ9V0E7aC5pc0F4aW9zRXJyb3I9WkE7aC5tZXJnZUNvbmZpZz1rO2guQXhpb3NIZWFkZXJzPW07aC5mb3JtVG9KU09OPUE9PmNBKEMuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7aC5nZXRBZGFwdGVyPWxBLmdldEFkYXB0ZXI7aC5IdHRwU3RhdHVzQ29kZT1NdDtoLmRlZmF1bHQ9aDt2YXIgZEE9aDt2YXJ7QXhpb3M6aW8sQXhpb3NFcnJvcjpDbyxDYW5jZWxlZEVycm9yOkJvLGlzQ2FuY2VsOm5vLENhbmNlbFRva2VuOnNvLFZFUlNJT046UW8sYWxsOkVvLENhbmNlbDphbyxpc0F4aW9zRXJyb3I6Y28sc3ByZWFkOmZvLHRvRm9ybURhdGE6bG8sQXhpb3NIZWFkZXJzOkRvLEh0dHBTdGF0dXNDb2RlOnVvLGZvcm1Ub0pTT046aG8sZ2V0QWRhcHRlcjp5byxtZXJnZUNvbmZpZzp3b309ZEE7dmFyIHRBLEwsekEsWEE9e2Vudjp7ZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aDpmdW5jdGlvbihBKXt6QT1uZXcgVWludDhBcnJheShMLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcil9fX0seUE9Y2xhc3N7aW5pdCgpe3JldHVybiB0QXx8KHR5cGVvZiBmZXRjaDwidSI/dEE9ZmV0Y2goImRhdGE6YXBwbGljYXRpb24vd2FzbTtiYXNlNjQsIitLdCkudGhlbih0PT50LmFycmF5QnVmZmVyKCkpLnRoZW4odD0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodCxYQSkpLnRoZW4odGhpcy5faW5pdCk6dEE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20oS3QsImJhc2U2NCIpLFhBKS50aGVuKHRoaXMuX2luaXQpLHRBKX1faW5pdCh0KXtMPXQuaW5zdGFuY2UsWEEuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKHQsST0wKXtpZighTCl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgZT10LmJ5dGVMZW5ndGgsZz1MLmV4cG9ydHMubWFsbG9jKGUpO3pBLnNldCh0LGcpLEk9SXx8TnVtYmVyKEwuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKGcsZSkpO2xldCByPUwuZXhwb3J0cy5tYWxsb2MoSSksbz1MLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKHIsSSxnLGUpLG49ekEuc2xpY2UocixyK28pO3JldHVybiBMLmV4cG9ydHMuZnJlZShnKSxMLmV4cG9ydHMuZnJlZShyKSxufX0sS3Q9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgT3Q9bmV3IHlBLFR0PSExO2FzeW5jIGZ1bmN0aW9uIGNlKEEsdCxJKXtsZXQgZT1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9lPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9lPUE6ZT1gJHt0fS8ke0F9YCxlLmVuZHNXaXRoKCIuanMiKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0zKSksZS5lbmRzV2l0aCgiLndhc20iKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC01KSk7bGV0IGc9YCR7ZX0ud2FzbWAscj1hd2FpdCBkQS5nZXQoYCR7Z30uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOkl9KTtUdHx8KGF3YWl0IE90LmluaXQoKSxUdD0hMCk7bGV0IG49T3QuZGVjb2RlKG5ldyBVaW50OEFycmF5KHIuZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke2V9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6bn0pfXZhciBQdD1jZTt2YXIgd0E9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBmZShBLHQsSSl7bGV0IGU9QSxnPUEscj1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihlPW5ldyBVUkwoQS5ocmVmKSxnPWUuaHJlZiksd0EuaGFzKGcpP3I9YXdhaXQgd0EuZ2V0KGcpOih3QS5zZXQoZyxQdChlLHQsSSkpLHI9YXdhaXQgd0EuZ2V0KGcpKSxyfXZhciB4dD1mZTt2YXIgbGU9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybToiVHJhbnNmb3JtIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxEPWxlO3ZhciBEZT17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LFM9RGU7dmFyIHVlPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSxqPXVlO2Z1bmN0aW9uIGhlKEEsdCl7bGV0IEk9bnVsbDtzd2l0Y2goQSl7Y2FzZSBTLlVJbnQ4OntJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQ4OntJPW5ldyBJbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQxNjp7ST1uZXcgVWludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDE2OntJPW5ldyBJbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50MzI6e0k9bmV3IFVpbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQzMjp7ST1uZXcgSW50MzJBcnJheSh0KTticmVha31jYXNlIFMuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj9JPW5ldyBCaWdVaW50NjRBcnJheSh0KTpJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj9JPW5ldyBCaWdJbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBqLkZsb2F0MzI6e0k9bmV3IEZsb2F0MzJBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQ2NDp7ST1uZXcgRmxvYXQ2NEFycmF5KHQpO2JyZWFrfWNhc2UibnVsbCI6e0k9bnVsbDticmVha31jYXNlIG51bGw6e0k9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiBJfXZhciBHPWhlO3ZhciBadD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixqdD1uZXcgVGV4dEVuY29kZXIsV3Q9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIGRlKEEsdCl7bGV0IEk9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sZT1BLmZzX29wZW4odCxJLmZsYWdzKSxyPUEuZnNfc3RhdCh0KS5zaXplLG89bnVsbDtadD9vPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTpvPW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgbj1uZXcgVWludDhBcnJheShvKTtyZXR1cm4gQS5mc19yZWFkKGUsbiwwLHIsMCksQS5mc19jbG9zZShlKSxufWZ1bmN0aW9uIFZ0KEEsdCxJKXtsZXQgZT1udWxsO1p0P2U9bmV3IFNoYXJlZEFycmF5QnVmZmVyKEkpOmU9bmV3IEFycmF5QnVmZmVyKEkpO2xldCBnPW5ldyBVaW50OEFycmF5KGUpLHI9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHQsSSk7cmV0dXJuIGcuc2V0KHIpLGd9ZnVuY3Rpb24gZChBLHQsSSxlKXtsZXQgZz0wO3JldHVybiB0IT09bnVsbCYmKGc9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSxlLHQuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLGcpKSxnfWZ1bmN0aW9uIE0oQSx0LEkpe2xldCBlPUpTT04uc3RyaW5naWZ5KHQpLGc9QS5sZW5ndGhCeXRlc1VURjgoZSkrMSxyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSxnXSk7QS5zdHJpbmdUb1VURjgoZSxyLGcpfWZ1bmN0aW9uIHAoQSx0LEksZSl7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxJXSkscj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxvPVZ0KEEsZyxyKTtyZXR1cm4gRyhlLG8uYnVmZmVyKX1mdW5jdGlvbiBtQShBLHQpe2xldCBJPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsdF0pLGU9QS5VVEY4VG9TdHJpbmcoSSk7cmV0dXJuIEpTT04ucGFyc2UoZSl9ZnVuY3Rpb24geWUoQSx0LEksZSl7ZSE9bnVsbCYmZS5sZW5ndGg+MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBpPWp0LmVuY29kZShRLmRhdGEuZGF0YSksZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBpPWp0LmVuY29kZShKU09OLnN0cmluZ2lmeShRLmRhdGEpKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBpPVEuZGF0YS5kYXRhLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBpPVEuZGF0YSxmPWQoQSxpLmRhdGEsQiwwKSxzPWQoQSxpLmRpcmVjdGlvbixCLDEpLEU9dHlwZW9mIGkubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oaS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTppLmltYWdlVHlwZSxuYW1lOmkubmFtZSxvcmlnaW46aS5vcmlnaW4sc3BhY2luZzppLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLHNpemU6aS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07TShBLGMsQik7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkuY2VsbHMsQiwxKSxFPWQoQSxpLnBvaW50RGF0YSxCLDIpLGM9ZChBLGkuY2VsbERhdGEsQiwzKSx1PXttZXNoVHlwZTppLm1lc2hUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6aS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLGNlbGxCdWZmZXJTaXplOmkuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07TShBLHUsQik7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnBvaW50RGF0YSxCLDEpLEU9e3BvaW50U2V0VHlwZTppLnBvaW50U2V0VHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWB9O00oQSxFLEIpO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS52ZXJ0aWNlcyxCLDEpLEU9ZChBLGkubGluZXMsQiwyKSxjPWQoQSxpLnBvbHlnb25zLEIsMyksdT1kKEEsaS50cmlhbmdsZVN0cmlwcyxCLDQpLHk9ZChBLGkucG9pbnREYXRhLEIsNSksUj1kKEEsaS5wb2ludERhdGEsQiw2KSxOPXtwb2x5RGF0YVR5cGU6aS5wb2x5RGF0YVR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOmkudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLGxpbmVzQnVmZmVyU2l6ZTppLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxwb2x5Z29uc0J1ZmZlclNpemU6aS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmkudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3l9YCxudW1iZXJPZkNlbGxQaXhlbHM6aS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtSfWB9O00oQSxOLEIpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBnPUEuc3RhY2tTYXZlKCkscj0wO3RyeXtyPUEuY2FsbE1haW4odC5zbGljZSgpKX1jYXRjaChRKXt0aHJvdyB0eXBlb2YgUT09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShRKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxRfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUoZyl9bGV0IG89QS5nZXRNb2R1bGVTdGRvdXQoKSxuPUEuZ2V0TW9kdWxlU3RkZXJyKCksYT1bXTtyZXR1cm4gSSE9bnVsbCYmSS5sZW5ndGg+MCYmcj09PTAmJkkuZm9yRWFjaChmdW5jdGlvbihRLEIpe2xldCBpPW51bGw7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPXtkYXRhOld0LmRlY29kZShjKX07YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHMsRSk7aT1KU09OLnBhcnNlKFd0LmRlY29kZShjKSk7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKTtpPXtkYXRhOlZ0KEEscyxFKX07YnJlYWt9Y2FzZSBELlRleHRGaWxlOntpPXtwYXRoOlEuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShRLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntpPXtwYXRoOlEuZGF0YS5wYXRoLGRhdGE6ZGUoQSxRLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IHM9bUEoQSxCKTtzLmRhdGE9cChBLEIsMCxzLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxzLmRpcmVjdGlvbj1wKEEsQiwxLGouRmxvYXQ2NCkscy5tZXRhZGF0YT1uZXcgTWFwKHMubWV0YWRhdGEpLGk9czticmVha31jYXNlIEQuTWVzaDp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxzLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxscz4wP3MuY2VsbHM9cChBLEIsMSxzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpzLmNlbGxzPUcocy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDIscy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxQaXhlbHM+MD9zLmNlbGxEYXRhPXAoQSxCLDMscy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2ludFNldDp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOnMucG9pbnRzPUcocy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMSxzLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAsai5GbG9hdDMyKTpzLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LHMudmVydGljZXNCdWZmZXJTaXplPjA/cy52ZXJ0aWNlcz1wKEEsQiwxLFMuVUludDMyKTpzLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxzLmxpbmVzQnVmZmVyU2l6ZT4wP3MubGluZXM9cChBLEIsMixTLlVJbnQzMik6cy5saW5lcz1uZXcgVWludDMyQXJyYXkscy5wb2x5Z29uc0J1ZmZlclNpemU+MD9zLnBvbHlnb25zPXAoQSxCLDMsUy5VSW50MzIpOnMucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LHMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/cy50cmlhbmdsZVN0cmlwcz1wKEEsQiw0LFMuVUludDMyKTpzLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiw1LHMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxQaXhlbHM+MD9zLmNlbGxEYXRhPXAoQSxCLDYscy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6cy5jZWxsRGF0YT1HKHMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpRLnR5cGUsZGF0YTppfTthLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6cixzdGRvdXQ6byxzdGRlcnI6bixvdXRwdXRzOmF9fXZhciBYdD15ZTt2YXIgd2U9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIG1lKEEsdCl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgST1bXTtmb3IobGV0IGU9MDtlPEEubGVuZ3RoO2UrKyl7bGV0IGc9cGUoQVtlXSx0KTtnIT09bnVsbCYmSS5wdXNoKGcpfXJldHVybiBJfWZ1bmN0aW9uIHBlKEEsdCl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgST1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD9JPUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKEk9QSksd2UmJkkgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOnQ/STpJLnNsaWNlKDApfXZhciB6dD1tZTtmdW5jdGlvbiBTZShBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgX3Q9U2U7ZnVuY3Rpb24gRmUoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIHZ0PUZlO2Z1bmN0aW9uIFJlKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciAkdD1SZTthc3luYyBmdW5jdGlvbiBOZShBLHQsSSxlKXtsZXQgZz1YdChBLHQsSSxlKSxyPVtdO3JldHVybiBnLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihvKXtpZihvLnR5cGU9PT1ELkJpbmFyeVN0cmVhbXx8by50eXBlPT09RC5CaW5hcnlGaWxlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKG4pfWVsc2UgaWYoby50eXBlPT09RC5JbWFnZSl7bGV0IG49by5kYXRhO3IucHVzaCguLi5fdChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELk1lc2gpe2xldCBuPW8uZGF0YTtyLnB1c2goLi4udnQobikpfWVsc2UgaWYoby50eXBlPT09RC5Qb2x5RGF0YSl7bGV0IG49by5kYXRhO3IucHVzaCguLi4kdChuKSl9fSksRkEoZyx6dChyLCEwKSl9dmFyIEFJPU5lO3ZhciBVZT17cnVuUGlwZWxpbmU6YXN5bmMgZnVuY3Rpb24oQSx0LEksZSxnLHIpe2xldCBvPWF3YWl0IHh0KEEsdCxyKTtyZXR1cm4gYXdhaXQgQUkobyxJLGUsZyl9fTtpQShVZSk7JTBBLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjolMEElMEFjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOiUwQSAgKCoqJTBBICAgKiBAbGljZW5zZSUwQSAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQyUwQSAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAlMEEgICAqKSUwQSovJTBBJztodChEdCk7ZXhwb3J0e0JpIGFzIGFwcGx5UHJlc2VudGF0aW9uU3RhdGVUb0ltYWdlLEYgYXMgZ2V0RGVmYXVsdFdlYldvcmtlcixoIGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLHcgYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCxjaSBhcyByZWFkRGljb21FbmNhcHN1bGF0ZWRQZGYsbWkgYXMgcmVhZERpY29tVGFncyx3aSBhcyByZWFkSW1hZ2VEaWNvbUZpbGVTZXJpZXMsbGUgYXMgcmVhZEltYWdlRGljb21GaWxlU2VyaWVzV29ya2VyRnVuY3Rpb24sRmkgYXMgcmVhZE92ZXJsYXBwaW5nU2VnbWVudGF0aW9uLFNpIGFzIHJlYWRTZWdtZW50YXRpb24sZUkgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixodCBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxfcyBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLGZpIGFzIHN0cnVjdHVyZWRSZXBvcnRUb0h0bWwscGkgYXMgc3RydWN0dXJlZFJlcG9ydFRvVGV4dCxSQSBhcyB2ZXJzaW9uLEdpIGFzIHdyaXRlTXVsdGlTZWdtZW50YXRpb24sTmkgYXMgd3JpdGVPdmVybGFwcGluZ1NlZ21lbnRhdGlvbixSaSBhcyB3cml0ZVNlZ21lbnRhdGlvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/_version.py b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/_version.py index 19840f56e..ec28a33e2 100644 --- a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/_version.py +++ b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/_version.py @@ -1 +1 @@ -__version__ = "7.2.2" +__version__ = "7.2.3" diff --git a/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py b/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py index 19840f56e..ec28a33e2 100644 --- a/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py +++ b/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py @@ -1 +1 @@ -__version__ = "7.2.2" +__version__ = "7.2.3" diff --git a/packages/dicom/typescript/package.json b/packages/dicom/typescript/package.json index 32a78ea8f..3d591f824 100644 --- a/packages/dicom/typescript/package.json +++ b/packages/dicom/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/dicom", - "version": "7.2.2", + "version": "7.2.3", "description": "Read files and images related to DICOM file format.", "type": "module", "module": "./dist/index.js", From eb454254c1be8818aa78203ab01763274aa63113 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Thu, 24 Oct 2024 13:43:03 -0400 Subject: [PATCH 25/39] build(downsample): add pixi configuration --- .github/workflows/python-wasm.yml | 4 - packages/downsample/.gitignore | 2 +- packages/downsample/.npmrc | 1 + packages/downsample/environment.yml | 11 - packages/downsample/package.json | 19 +- packages/downsample/pixi.lock | 6181 +++++++++++++++++ packages/downsample/pixi.toml | 142 + .../js_package.py | 2 +- pnpm-lock.yaml | 3 - 9 files changed, 6333 insertions(+), 32 deletions(-) create mode 100644 packages/downsample/.npmrc delete mode 100644 packages/downsample/environment.yml create mode 100644 packages/downsample/pixi.lock create mode 100644 packages/downsample/pixi.toml diff --git a/.github/workflows/python-wasm.yml b/.github/workflows/python-wasm.yml index febeeb431..232d89364 100644 --- a/.github/workflows/python-wasm.yml +++ b/.github/workflows/python-wasm.yml @@ -61,10 +61,6 @@ jobs: run: | pnpm run --aggregate-output --filter "@itk-wasm/${{ matrix.package }}-build" bindgen:python - - name: Build build:micromamba - run: | - pnpm run --aggregate-output --filter "@itk-wasm/${{ matrix.package }}-build" build:micromamba - - name: Build build:python:wasi if: ${{ matrix.os == 'ubuntu-22.04' || (matrix.package != 'mesh-io' && matrix.package != 'image-io' && matrix.package != 'downsample' ) }} run: | diff --git a/packages/downsample/.gitignore b/packages/downsample/.gitignore index 77c42e9f6..2ed5f0d71 100644 --- a/packages/downsample/.gitignore +++ b/packages/downsample/.gitignore @@ -1,4 +1,3 @@ -micromamba/ emscripten-build/ wasi-build/ python/itkwasm-downsample-wasi/itkwasm_downsample_wasi/wasm_modules/ @@ -14,3 +13,4 @@ test/data/python/ python/itkwasm-downsample-emscripten/dist/ python/itkwasm-downsample-wasi/dist/ python/itkwasm-downsample/dist/ +pyodide/ diff --git a/packages/downsample/.npmrc b/packages/downsample/.npmrc new file mode 100644 index 000000000..a4be22c92 --- /dev/null +++ b/packages/downsample/.npmrc @@ -0,0 +1 @@ +git-checks=false diff --git a/packages/downsample/environment.yml b/packages/downsample/environment.yml deleted file mode 100644 index b67d157e8..000000000 --- a/packages/downsample/environment.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: downsample -channels: - - conda-forge -dependencies: - - pytest - - python=3.11 - - pip - - pip: - - hatch - - itkwasm-compare-images - - itkwasm-image-io diff --git a/packages/downsample/package.json b/packages/downsample/package.json index d78d4fe5c..5d9a9ba2e 100644 --- a/packages/downsample/package.json +++ b/packages/downsample/package.json @@ -1,9 +1,8 @@ { "name": "@itk-wasm/downsample-build", - "version": "1.0.0", + "version": "1.4.3", "private": true, - "packageManager": "pnpm@9.6.0", - "description": "scripts to generate @itk-wasm/downsample itk-wasm artifacts.", + "description": "Pipelines for downsampling images.", "type": "module", "itk-wasm": { "emscripten-docker-image": "itkwasm/emscripten:latest", @@ -24,27 +23,23 @@ "build:emscripten:debug": "itk-wasm pnpm-script build:emscripten:debug", "build:wasi": "itk-wasm pnpm-script build:wasi", "build:wasi:debug": "itk-wasm pnpm-script build:wasi:debug", - "build:python:wasi": "itk-wasm pnpm-script build:python:wasi", + "build:python:wasi": "echo 'No build:python:wasi script required with pixi'", "bindgen:typescript": "itk-wasm pnpm-script bindgen:typescript", "bindgen:python": "itk-wasm pnpm-script bindgen:python", "build:gen:typescript": "itk-wasm pnpm-script build:gen:typescript", - "build:gen:python": "itk-wasm pnpm-script build:gen:python", - "build:micromamba": "itk-wasm pnpm-script build:micromamba", - "build:python:versionSync": "itk-wasm pnpm-script build:python:versionSync", - "publish:python": "itk-wasm pnpm-script publish:python", + "build:gen:python": "pnpm build:wasi && pnpm bindgen:python", "test": "pnpm test:data:download && pnpm build:gen:python && pnpm test:python", "test:data:download": "dam download test/data test/data.tar.gz bafkreic7utwwa32sc7ekhouzdlnla4kffytphcwc7qwam5ndhixwjulydq https://github.com/InsightSoftwareConsortium/ITK-Wasm/releases/download/itk-wasm-v1.0.0-b.163/itkwasm-downsample-test-data.tar.gz https://w3s.link/ipfs/bafybeifwebok64osjl2i3zc6rkn3izgon333wsjotqzqlxorkkvrbldjcy/data.tar.gz", "test:data:pack": "dam pack test/data test/data.tar.gz", - "test:python:wasi": "itk-wasm pnpm-script test:python:wasi", - "test:python:emscripten": "itk-wasm pnpm-script test:python:emscripten", - "test:python:dispatch": "itk-wasm pnpm-script test:python:emscripten", + "test:python:wasi": "pnpm test:data:download && pixi run test-wasi", + "test:python:emscripten": "pnpm test:data:download && pixi run test-emscripten", + "test:python:dispatch": "pnpm test:data:download && pixi run test-dispatch", "test:python": "itk-wasm pnpm-script test:python", "test:wasi": "itk-wasm pnpm-script test:wasi -- -V" }, "license": "Apache-2.0", "devDependencies": { "@itk-wasm/dam": "^1.1.0", - "@thewtex/setup-micromamba": "^1.9.7", "itk-wasm": "workspace:^" } } diff --git a/packages/downsample/pixi.lock b/packages/downsample/pixi.lock new file mode 100644 index 000000000..07ec39be4 --- /dev/null +++ b/packages/downsample/pixi.lock @@ -0,0 +1,6181 @@ +version: 5 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + python: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/08/48/c1ae6fa5fa77d735a6411a764e6e3937a023bd4c3b124ac6301ee174a194/itkwasm_compare_images-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ee/4a4bd7a8f381d391fa293dcfde3437d891c7e9dc7db8764e85506d6cc753/itkwasm_compare_images_wasi-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: python/itkwasm-downsample + - pypi: python/itkwasm-downsample-wasi + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.12.1-hf0a5ef3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.16-h922389a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.22-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.0.0-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.44-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-hec21d91_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.4.0-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.2-h0d9d63b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.0.0-py312h5ab5af3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.11-h86ecc28_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/08/48/c1ae6fa5fa77d735a6411a764e6e3937a023bd4c3b124ac6301ee174a194/itkwasm_compare_images-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ee/4a4bd7a8f381d391fa293dcfde3437d891c7e9dc7db8764e85506d6cc753/itkwasm_compare_images_wasi-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: python/itkwasm-downsample + - pypi: python/itkwasm-downsample-wasi + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-hfce79cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.2-h9f1df11_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.0.0-py312haf37ca6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/08/48/c1ae6fa5fa77d735a6411a764e6e3937a023bd4c3b124ac6301ee174a194/itkwasm_compare_images-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ee/4a4bd7a8f381d391fa293dcfde3437d891c7e9dc7db8764e85506d6cc753/itkwasm_compare_images_wasi-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: python/itkwasm-downsample + - pypi: python/itkwasm-downsample-wasi + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.22-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.0-hfc51747_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py312h381445a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/08/48/c1ae6fa5fa77d735a6411a764e6e3937a023bd4c3b124ac6301ee174a194/itkwasm_compare_images-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ee/4a4bd7a8f381d391fa293dcfde3437d891c7e9dc7db8764e85506d6cc753/itkwasm_compare_images_wasi-5.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + - pypi: python/itkwasm-downsample + - pypi: python/itkwasm-downsample-wasi +packages: +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23621 + timestamp: 1650670423406 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23712 + timestamp: 1650670790230 +- kind: conda + name: anyio + version: 4.6.2.post1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - uvloop >=0.21.0b1 + - trio >=0.26.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/anyio?source=compressed-mapping + size: 109864 + timestamp: 1728935803440 +- kind: pypi + name: attrs + version: 24.2.0 + url: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + sha256: 81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'benchmark' + - hypothesis ; extra == 'benchmark' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pympler ; extra == 'benchmark' + - pytest-codspeed ; extra == 'benchmark' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pytest-xdist[psutil] ; extra == 'benchmark' + - pytest>=4.3.0 ; extra == 'benchmark' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'cov' + - coverage[toml]>=5.3 ; extra == 'cov' + - hypothesis ; extra == 'cov' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'cov' + - pympler ; extra == 'cov' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'cov' + - pytest-xdist[psutil] ; extra == 'cov' + - pytest>=4.3.0 ; extra == 'cov' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'dev' + - hypothesis ; extra == 'dev' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'dev' + - pre-commit ; extra == 'dev' + - pympler ; extra == 'dev' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'dev' + - pytest-xdist[psutil] ; extra == 'dev' + - pytest>=4.3.0 ; extra == 'dev' + - cogapp ; extra == 'docs' + - furo ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-notfound-page ; extra == 'docs' + - sphinxcontrib-towncrier ; extra == 'docs' + - towncrier<24.7 ; extra == 'docs' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'tests' + - hypothesis ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests' + - pympler ; extra == 'tests' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests' + - pytest-xdist[psutil] ; extra == 'tests' + - pytest>=4.3.0 ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + requires_python: '>=3.7' +- kind: conda + name: backports + version: '1.0' + build: pyhd8ed1ab_4 + build_number: 4 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + sha256: 31b51537ce7d2ba8b5b3d0095f1813711884304ac1701bc55938ca75f6c82e19 + md5: 67bdebbc334513034826e9b63f769d4c + depends: + - python >=3 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6989 + timestamp: 1722295637981 +- kind: conda + name: backports.tarfile + version: 1.0.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + sha256: 7ba30f32daad2e7ca251508525185ba170eedc14123572611c2acf261c7956b3 + md5: c747b1d79f136013c3b7ebcba876afa6 + depends: + - backports + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/backports-tarfile?source=hash-mapping + size: 31951 + timestamp: 1712700751335 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h2466b09_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 54927 + timestamp: 1720974860185 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h68df207_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb + md5: 56398c28220513b9ea13d7b450acfb20 + depends: + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 189884 + timestamp: 1720974504976 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 122909 + timestamp: 1720974522888 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: h56e8100_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 + md5: 4c4fd67c18619be5aa65dc5b6c72e490 + license: ISC + purls: [] + size: 158773 + timestamp: 1725019107649 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 + license: ISC + purls: [] + size: 159003 + timestamp: 1725018903918 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hcefe29a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + sha256: 2a2d827bee3775a85f0f1b2f2089291475c4416336d1b3a8cbce2964db547af8 + md5: 70e57e8f59d2c98f86b49c69e5074be5 + license: ISC + purls: [] + size: 159106 + timestamp: 1725020043153 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + purls: [] + size: 158482 + timestamp: 1725019034582 +- kind: conda + name: certifi + version: 2024.8.30 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping + size: 163752 + timestamp: 1725278204397 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h06ac9bb_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 + md5: a861504bbea4161a9170b85d4d2be840 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 294403 + timestamp: 1725560714366 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 281206 + timestamp: 1725560813378 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h4389bb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + sha256: ac007bf5fd56d13e16d95eea036433012f2e079dc015505c8a79efebbad1fcbc + md5: 08310c1a22ef957d537e547f8d484f92 + depends: + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 288142 + timestamp: 1725560896359 +- kind: conda + name: cffi + version: 1.17.1 + build: py312hac81daf_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + sha256: 1162e3ca039e7ca7c0e78f0a020ed1bde968096841b663e3f393c966eb82f0f0 + md5: 1a256e5581b1099e9295cb84d53db3ea + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 312892 + timestamp: 1725561779888 +- kind: conda + name: click + version: 8.1.7 + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 84437 + timestamp: 1692311973840 +- kind: conda + name: click + version: 8.1.7 + build: win_pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 + md5: 3549ecbceb6cd77b91a105511b7d0786 + depends: + - __win + - colorama + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 85051 + timestamp: 1692312207348 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + sha256: ba9e5aced2e7dc0bbc48f60bf38f514839424a01975fb2aed30e9246c2f82c7c + md5: 2abada8c216dd6e32514535a3fa245d4 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1488388 + timestamp: 1729286882127 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312he723553_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + sha256: bd9cc8410bf31ac8b90d63dda92d5810af16c3841ca6dd09be9b7f9c5c7688ba + md5: bfacbf2e4560c7d6416d40f573961918 + depends: + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1480456 + timestamp: 1729287055014 +- kind: conda + name: dbus + version: 1.13.6 + build: h12b9eeb_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + sha256: 5fe76bdf27a142cfb9da0fb3197c562e528d2622b573765bee5c9904cf5e6b6b + md5: f3d63805602166bac09386741e00935e + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 672759 + timestamp: 1640113663539 +- kind: conda + name: dbus + version: 1.13.6 + build: h5008d03_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 + md5: ecfff944ba3960ecb334b9a2663d708d + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 618596 + timestamp: 1640112124844 +- kind: conda + name: distlib + version: 0.3.9 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb + md5: fe521c1608280cc2803ebd26dc252212 + depends: + - python 2.7|>=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/distlib?source=hash-mapping + size: 276214 + timestamp: 1728557312342 +- kind: conda + name: editables + version: '0.5' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + sha256: de160a7494e7bc72360eea6a29cbddf194d0a79f45ff417a4de20e6858cf79a9 + md5: 9873878e2a069bc358b69e9a29c1ecd5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/editables?source=hash-mapping + size: 10988 + timestamp: 1705857085102 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: expat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + sha256: c827521e080d0f3395655924f1c364d48a1eac1ff3e193a12d0441e9c3b51e91 + md5: 901a44b341632b0c233756ed5abcd78b + depends: + - libexpat 2.6.3 h5ad3122_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 130283 + timestamp: 1725568848182 +- kind: conda + name: filelock + version: 3.16.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + purls: + - pkg:pypi/filelock?source=hash-mapping + size: 17357 + timestamp: 1726613593584 +- kind: conda + name: freetype + version: 2.12.1 + build: h267a509_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 + md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 634972 + timestamp: 1694615932610 +- kind: conda + name: freetype + version: 2.12.1 + build: hadb7bae_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + sha256: 791673127e037a2dc0eebe122dc4f904cb3f6e635bb888f42cbe1a76b48748d9 + md5: e6085e516a3e304ce41a8ee08b9b89ad + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 596430 + timestamp: 1694616332835 +- kind: conda + name: freetype + version: 2.12.1 + build: hdaf720e_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda + sha256: 2c53ee8879e05e149a9e525481d36adfd660a6abda26fd731376fa64ff03e728 + md5: 3761b23693f768dc75a8fd0a73ca053f + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: GPL-2.0-only OR FTL + purls: [] + size: 510306 + timestamp: 1694616398888 +- kind: conda + name: freetype + version: 2.12.1 + build: hf0a5ef3_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.12.1-hf0a5ef3_2.conda + sha256: 7af93030f4407f076dce181062360efac2cd54dce863b5d7765287a6f5382537 + md5: a5ab74c5bd158c3d5532b66d8d83d907 + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 642092 + timestamp: 1694617858496 +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + sha256: 7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + sha256: 4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + sha256: 1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: conda + name: h11 + version: 0.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/h11?source=hash-mapping + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + size: 46754 + timestamp: 1634280590080 +- kind: conda + name: hatch + version: 1.13.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + sha256: 675b0304b129a4dbc39b8e6f337cea51adebef20508a656f43b6e6b43d9cf458 + md5: b8a6437f94d29aef00decdbe1174be27 + depends: + - click >=8.0.6 + - hatchling >=1.24.2 + - httpx >=0.22.0 + - hyperlink >=21.0.0 + - keyring >=23.5.0 + - packaging >=23.2 + - pexpect >=4.8,<5 + - platformdirs >=2.5.0 + - python >=3.8 + - rich >=11.2.0 + - shellingham >=1.4.0 + - tomli-w >=1.0 + - tomlkit >=0.11.1 + - userpath >=1.7,<2 + - uv >=0.1.35 + - virtualenv >=20.26.1 + - zstandard <1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatch?source=hash-mapping + size: 177173 + timestamp: 1728879212263 +- kind: conda + name: hatchling + version: 1.25.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + sha256: fb8a16a913f909d8f7d2ae95c18a1aeb7be3eebfb1b7a4246500c06d54498f89 + md5: 7571d6e5561b04aef679a11904dfcebf + depends: + - editables >=0.3 + - importlib-metadata + - packaging >=21.3 + - pathspec >=0.10.1 + - pluggy >=1.0.0 + - python >=3.7 + - tomli >=1.2.2 + - trove-classifiers + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatchling?source=hash-mapping + size: 64580 + timestamp: 1719090878694 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: httpcore + version: 1.0.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + sha256: 8952c3f1eb18bf4d7e813176c3b23e0af4e863e8b05087e73f74f371d73077ca + md5: b8e1901ef9a215fc41ecfb6bef7e0943 + depends: + - anyio >=3.0,<5.0 + - certifi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + size: 45711 + timestamp: 1727821031365 +- kind: conda + name: httpx + version: 0.27.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 14646 + timestamp: 1619110249723 +- kind: conda + name: hyperlink + version: 21.0.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + sha256: 026cb82ada41be9ee2836a2ace526e85c4603e77617887c41c6e62c9bde798b3 + md5: 1303beb57b40f8f4ff6fb1bb23bf0553 + depends: + - idna >=2.6 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperlink?source=hash-mapping + size: 72732 + timestamp: 1610092261086 +- kind: pypi + name: hypothesis + version: 6.115.5 + url: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + sha256: b7733459ae9a93020fac3b91b41473c9b85e975139a152a70d88f3a5caa3fa3f + requires_dist: + - attrs>=22.2.0 + - sortedcontainers<3.0.0,>=2.1.0 + - exceptiongroup>=1.0.0 ; python_full_version < '3.11' + - black>=19.10b0 ; extra == 'all' + - click>=7.0 ; extra == 'all' + - crosshair-tool>=0.0.74 ; extra == 'all' + - django>=4.2 ; extra == 'all' + - dpcontracts>=0.4 ; extra == 'all' + - hypothesis-crosshair>=0.0.16 ; extra == 'all' + - lark>=0.10.1 ; extra == 'all' + - libcst>=0.3.16 ; extra == 'all' + - numpy>=1.19.3 ; extra == 'all' + - pandas>=1.1 ; extra == 'all' + - pytest>=4.6 ; extra == 'all' + - python-dateutil>=1.4 ; extra == 'all' + - pytz>=2014.1 ; extra == 'all' + - redis>=3.0.0 ; extra == 'all' + - rich>=9.0.0 ; extra == 'all' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'all') or (sys_platform == 'win32' and extra == 'all') + - click>=7.0 ; extra == 'cli' + - black>=19.10b0 ; extra == 'cli' + - rich>=9.0.0 ; extra == 'cli' + - libcst>=0.3.16 ; extra == 'codemods' + - hypothesis-crosshair>=0.0.16 ; extra == 'crosshair' + - crosshair-tool>=0.0.74 ; extra == 'crosshair' + - python-dateutil>=1.4 ; extra == 'dateutil' + - django>=4.2 ; extra == 'django' + - dpcontracts>=0.4 ; extra == 'dpcontracts' + - black>=19.10b0 ; extra == 'ghostwriter' + - lark>=0.10.1 ; extra == 'lark' + - numpy>=1.19.3 ; extra == 'numpy' + - pandas>=1.1 ; extra == 'pandas' + - pytest>=4.6 ; extra == 'pytest' + - pytz>=2014.1 ; extra == 'pytz' + - redis>=3.0.0 ; extra == 'redis' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'zoneinfo') or (sys_platform == 'win32' and extra == 'zoneinfo') + requires_python: '>=3.9' +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12129203 + timestamp: 1720853576813 +- kind: conda + name: icu + version: '75.1' + build: hf9b3779_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 + md5: 268203e8b983fddb6412b36f2024e75c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12282786 + timestamp: 1720853454991 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 11857802 + timestamp: 1720853997952 +- kind: conda + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=hash-mapping + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: importlib_resources + version: 6.4.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping + size: 32725 + timestamp: 1725921462405 +- kind: conda + name: iniconfig + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 + md5: f800d2da156d08e289b14e87e43c1ae5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=hash-mapping + size: 11101 + timestamp: 1673103208955 +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: a1b4e5511c2274025bffe80d081ef79ee41de580df80311007af1ec05e2774db + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 0f0dcce9df862831e705eebf0ffa95de554b17027f69d67b31b30dcb8d838019 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 88344f4c7e8a74dfdeb98e20232d1a9565eb7c381d8242534588ecc4e745ffb3 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + sha256: e5ffacab2c8609979c78c2d2e02ee7e6abd611261aac0613289d98e7c277cd83 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 21c7b5c451f73c8073eb3b5dd85f7c654399cdc25dd51669bfbbafa611aa4649 + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: b6af0e82dae0efa95ad87f36ccd55a955383b34a6bd8a036894fb96a3933615a + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 8ca83de9c269e6b20648f2391aa2bf96903b8ed645c3d8cd40d90b939dda439e + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + sha256: 6affe6986927fd176c176f5464d9ea9e737b85d8745f5c4129da910fd16235cb + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + sha256: ad59e6066dba25d6b0803023e95c7633a80e7b9c1a9ff89a41c97eae5a60e06f + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 6e8600df87c59233968013d162c5a353ca4c8f843c76117b52347aec20ff1620 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 86026c853f1fd0b13e282f952cff7455df0ac131cc608df8669ce335633eef0a + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: e8d90842d703877c4ce777efece3db478c8ed5e3a18488e277a480f05d61ebb0 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 393d711f9edb248aed402e7fc9613045536dbd6b45fc8db638a28d0a409fe974 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8c0eacb3aa100e4b369a673bb0e65c3c48c411bc4b716069bce4cee8c3f9e1cc + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: d969a2ab2775b2ace36edee274ffe4839b21c7ccd634844082028f9f373dfedb + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 11a34ac45b960aa883e1758ead15c5394814964573c93d736fc04f021c18cd22 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 3c10f157bddbdf86b596ec2742f17bcc35cd6ce7bd64bba712a2a0c0858c2dc7 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 914cae65049842affc820471e149b2cdd55d305ff1a740c34a47e1b1af567361 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + sha256: b8b746f6d5597687d0b50dd81d650da0293f2c3c90f31212baefdf46edb727d6 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 84bd859eeb17aed3de39f0b3357525a4bfac0db17263a8d36cd641e5f8c49b46 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + sha256: 31f24c218c763b2c15953453cc366c5ba09e7a5c7d47d432a24c0b6b12249206 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 5cd8ab0781e08a4022e36094bb60652d0ee2b7cd1912f325e8f32d8bd5501fcf + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 583b665d6b8578ac93691afb796faf69e30b8db8a205754cdc746707f9589fcd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: e2dcda0a07ccb6b9b518d3cc4413387a44c30a313c22e15bf818af06c7da8bfd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 15eab6a72bebeccfb8a0fb291b65c305e46776a18a8f3cb91f199fc8ecd137a1 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8a2d3f2872375a9c2694bb34a2e061a4d2666f8c13390f03d94219ba8370649e + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 3f41cff2136f69ae5c2ce6166191dff86e4722097411aaaba07a74884d36ff73 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: dde112dbb9b695c1908692a0086f60da8d5a123f7e959ebc5aaec2825aaf9793 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: ff2ca7cdf42c8c32b20e1ecf7ee0a0be68e885ce673c565e72a4876b28d2e2f3 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: b3c154e7a92be2ad48e6bf8bd5a8a17610f890bb420abb54dd2bde15b1c9c52c + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + sha256: 45374d3c38884ed02e0dfebf73f363e265184a50f7c46d55d8c9217e690a571f + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 8dd071dbb1ba1c8fcf26a4011fc3b7069d444e10bc56279d7b26fd3193ac58aa + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + sha256: 0b787ee92418a1f965c52eea1fd41a7aef4424eb6e07a290b0e1ddebf50a09e1 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + sha256: ee3defc13dc65f56127e468c145e9249265c275b63ea3c530c1b88f1df4a7033 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 72f82fab54c4ee4c6c579cfd5c963cba9a84ecc9909e61f3641caa9fef94b40c + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: eff3cd27756e96ebd31500ef258d0cc4a56e48c2c25c4533300469246623d7aa + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itkwasm + version: 1.0b179 + url: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + sha256: 43558ccd082f3dc3c9b3b2379cdb197635b33620d41dbc6c1fa9186d03c22a7e + requires_dist: + - importlib-metadata ; python_full_version < '3.10' + - numpy + - platformdirs ; sys_platform != 'emscripten' + - typing-extensions + - wasmtime>=13.0.2 ; sys_platform != 'emscripten' + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-compare-images + version: 5.2.3 + url: https://files.pythonhosted.org/packages/08/48/c1ae6fa5fa77d735a6411a764e6e3937a023bd4c3b124ac6301ee174a194/itkwasm_compare_images-5.2.3-py3-none-any.whl + sha256: 60a5f25ca54caf0f9823750cef72adebc443157979b028f01bfab3d6c35f9cea + requires_dist: + - itkwasm-compare-images-emscripten>=1.0.1 ; sys_platform == 'emscripten' + - itkwasm-compare-images-wasi>=1.0.1 ; sys_platform != 'emscripten' + - itkwasm>=1.0b171 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-compare-images-wasi + version: 5.2.3 + url: https://files.pythonhosted.org/packages/7d/ee/4a4bd7a8f381d391fa293dcfde3437d891c7e9dc7db8764e85506d6cc753/itkwasm_compare_images_wasi-5.2.3-py3-none-any.whl + sha256: d363d00507ed7da55e57099ec659cf7d13314141d432f9750f83af94250a0bd6 + requires_dist: + - importlib-resources + - itkwasm>=1.0b171 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-downsample + version: 1.4.2 + path: python/itkwasm-downsample + sha256: 181969a8c8cf9a43160b9e5e334f0e148242a85f6c3b4b1bb11f0184e7f72be3 + requires_dist: + - itkwasm-downsample-emscripten ; sys_platform == 'emscripten' + - itkwasm-downsample-wasi ; sys_platform != 'emscripten' + - itkwasm>=1.0b145 + requires_python: '>=3.8' + editable: true +- kind: pypi + name: itkwasm-downsample-wasi + version: 1.4.2 + path: python/itkwasm-downsample-wasi + sha256: 18330eed06b715a5800ede3c6af06aac9d53d9eea199ccf26cfe54c31bb0bfad + requires_dist: + - importlib-resources + - itkwasm>=1.0b145 + requires_python: '>=3.8' + editable: true +- kind: pypi + name: itkwasm-image-io + version: 1.3.0 + url: https://files.pythonhosted.org/packages/fa/35/333a5edde2a84b6cb1e472c6086d794ee76bbec7ce09f06547e1788e782a/itkwasm_image_io-1.3.0-py3-none-any.whl + sha256: 121ef7e942f1f6c25ef428a0a39944a0a9eb9bce226d6ee7466df1e2d8fc9a56 + requires_dist: + - itkwasm-image-io-emscripten ; sys_platform == 'emscripten' + - itkwasm-image-io-wasi ; sys_platform != 'emscripten' + - itkwasm>=1.0b145 + requires_python: '>=3.8' +- kind: pypi + name: itkwasm-image-io-wasi + version: 1.3.0 + url: https://files.pythonhosted.org/packages/b8/2a/5f599b21625876da5a1afb88192375d095fa73805054a7dfa3a3db92849d/itkwasm_image_io_wasi-1.3.0-py3-none-any.whl + sha256: 13fe5cad7942dc9fc94ece5711d5b342b5cb90dc93f764558de195674a2b183b + requires_dist: + - importlib-resources + - itkwasm>=1.0b131 + requires_python: '>=3.8' +- kind: conda + name: jaraco.classes + version: 3.4.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + sha256: 538b1c6df537a36c63fd0ed83cb1c1c25b07d8d3b5e401991fdaff261a4b5b4d + md5: 7b756504d362cbad9b73a50a5455cafd + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-classes?source=hash-mapping + size: 12223 + timestamp: 1713939433204 +- kind: conda + name: jaraco.context + version: 5.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + sha256: 9e2aeacb1aed3ab4fc5883a357e8a874e12f687af300f8708ec12de2995e17d2 + md5: 72d7ad2dcd0f37eccb2ee35a1c8f6aaa + depends: + - backports.tarfile + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-context?source=hash-mapping + size: 12456 + timestamp: 1714372284922 +- kind: conda + name: jaraco.functools + version: 4.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + sha256: d2e866fd22a48eaa2f795b6a3b0bf16f066293322ce04dd65cca36267160ead6 + md5: 547670a612fd335eaa5ffbf0fa75cb64 + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-functools?source=hash-mapping + size: 15192 + timestamp: 1701695329516 +- kind: conda + name: jeepney + version: 0.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + sha256: 16639759b811866d63315fe1391f6fb45f5478b823972f4d3d9f0392b7dd80b8 + md5: 9800ad1699b42612478755a2d26c722d + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jeepney?source=hash-mapping + size: 36895 + timestamp: 1649085298891 +- kind: conda + name: jq + version: 1.7.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + sha256: 53437ca79e28003faac8058f6c025c83a819e122d3a0fb70624e6da0f77ab126 + md5: 397702b2c1e53f0f0312d2b170d2e699 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 334346 + timestamp: 1702502754422 +- kind: conda + name: jq + version: 1.7.1 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + sha256: e530cf5800e937bce7847a023a998db504e333a928b469c45a1752535593e762 + md5: dbf665694fb28d86d77cca18e5dd530c + depends: + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 317604 + timestamp: 1702501287237 +- kind: conda + name: jq + version: 1.7.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d + md5: 80814f94713e35df60aad6c4b235de87 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 318956 + timestamp: 1702500793203 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh534df25_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + sha256: 8d8fc7d67e9bd387403720447abb1b5539a6f6ca8e3aba8406e0987213bfa0ce + md5: 2099f34ea2f3534f7adc5c21cc199e1b + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37045 + timestamp: 1726971145252 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + sha256: 69626899dfac975090032f7af782c143b569f7706e808a4eca67a9a5aa134a15 + md5: 1c74a03431815d5e091585bb04e86f12 + depends: + - __win + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + - pywin32-ctypes >=0.2.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37407 + timestamp: 1726971355676 +- kind: conda + name: keyring + version: 25.4.1 + build: pyha804496_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + sha256: 6deeb4fa0f01447a5e8bd7261044c45d139e27d36df769e5a3a16ce55607da14 + md5: ef6f2de3c8eef0ee9fd31f2267c27bf2 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.8 + - secretstorage >=3.2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 36717 + timestamp: 1726971094601 +- kind: conda + name: lcms2 + version: '2.16' + build: h67d730c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda + sha256: f9fd9e80e46358a57d9bb97b1e37a03da4022143b019aa3c4476d8a7795de290 + md5: d3592435917b62a8becff3a60db674f6 + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 507632 + timestamp: 1701648249706 +- kind: conda + name: lcms2 + version: '2.16' + build: h922389a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.16-h922389a_0.conda + sha256: be4847b1014d3cbbc524a53bdbf66182f86125775020563e11d914c8468dd97d + md5: ffdd8267a04c515e7ce69c727b051414 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 296219 + timestamp: 1701647961116 +- kind: conda + name: lcms2 + version: '2.16' + build: ha0e7c42_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + sha256: 151e0c84feb7e0747fabcc85006b8973b22f5abbc3af76a9add0b0ef0320ebe4 + md5: 66f6c134e76fe13cce8a9ea5814b5dd5 + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 211959 + timestamp: 1701647962657 +- kind: conda + name: lcms2 + version: '2.16' + build: hb7c19ff_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 + md5: 51bb7010fc86f70eee639b4bb7a894f5 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 245247 + timestamp: 1701647787198 +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe + md5: 048b02e3962f066da18efe3a21b77672 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 669211 + timestamp: 1729655358674 +- kind: conda + name: ld_impl_linux-aarch64 + version: '2.43' + build: h80caac9_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + sha256: 80ec7e8f006196808fac5bd4b3773a652847f97bbf08044cd87731424ac64f8b + md5: fcbde5ea19d55468953bf588770c0501 + constrains: + - binutils_impl_linux-aarch64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 698245 + timestamp: 1729655345825 +- kind: conda + name: lerc + version: 4.0.0 + build: h27087fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 + md5: 76bbff344f0134279f225174e9064c8f + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 281798 + timestamp: 1657977462600 +- kind: conda + name: lerc + version: 4.0.0 + build: h4de3ea5_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 + sha256: 2d09ef9b7796d83364957e420b41c32d94e628c3f0520b61c332518a7b5cd586 + md5: 1a0ffc65e03ce81559dbcb0695ad1476 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 262096 + timestamp: 1657978241894 +- kind: conda + name: lerc + version: 4.0.0 + build: h63175ca_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 + sha256: f4f39d7f6a2f9b407f8fb567a6c25755270421731d70f0ff331f5de4fa367488 + md5: 1900cb3cab5055833cfddb0ba233b074 + depends: + - vc >=14.2,<15 + - vs2015_runtime >=14.29.30037 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 194365 + timestamp: 1657977692274 +- kind: conda + name: lerc + version: 4.0.0 + build: h9a09cb3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + sha256: 6f068bb53dfb6147d3147d981bb851bb5477e769407ad4e6a68edf482fdcb958 + md5: de462d5aacda3b30721b512c5da4e742 + depends: + - libcxx >=13.0.1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 215721 + timestamp: 1657977558796 +- kind: conda + name: libcxx + version: 19.1.2 + build: ha82da77_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 + md5: ba89ad7c5477e6a9d020020fcdadd37d + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 521199 + timestamp: 1729038190391 +- kind: conda + name: libdeflate + version: '1.22' + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.22-h2466b09_0.conda + sha256: 579c634b7de8869cb1d76eccd4c032dc275d5a017212128502ea4dc828a5b361 + md5: a3439ce12d4e3cd887270d9436f9a4c8 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 155506 + timestamp: 1728177485361 +- kind: conda + name: libdeflate + version: '1.22' + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.22-h86ecc28_0.conda + sha256: 986207f130703897300ddc3637c52e86a5b21c735fe384bf48554d9a6d91c56d + md5: ff6a44e8b1707d02be2fe9a36ea88d4a + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 69601 + timestamp: 1728177137503 +- kind: conda + name: libdeflate + version: '1.22' + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + sha256: 780f0530a3adfc1497ba49d626931c6afc978c540e1abfde6ccd57128ded6ad6 + md5: b422943d5d772b7cc858b36ad2a92db5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 72242 + timestamp: 1728177071251 +- kind: conda + name: libdeflate + version: '1.22' + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + sha256: 3552894ca62bebc33d05982937cda25a4fa19e56a82af2ff20944ff4c2532fda + md5: 2d3e3f3d8ab315748420ef58d5a3ae0f + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 54089 + timestamp: 1728177149927 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + sha256: 4bb47bb2cd09898737a5211e2992d63c555d63715a07ba56eae0aff31fb89c22 + md5: 59f4c43bb1b5ef1c71946ff2cbf59524 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 73616 + timestamp: 1725568742634 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + sha256: 02341c9c35128055fd404dfe675832b80f2bf9dbb99539457652c11c06e52757 + md5: 1d2b842bb76e268625e8ee8d0a9fe8c3 + depends: + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 72342 + timestamp: 1725568840022 +- kind: conda + name: libexpat + version: 2.6.3 + build: he0c23c2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + sha256: 9543965d155b8da96fc67dd81705fe5c2571c7c00becc8de5534c850393d4e3c + md5: 21415fbf4d0de6767a621160b43e5dea + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 138992 + timestamp: 1725569106114 +- kind: conda + name: libexpat + version: 2.6.3 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a + md5: 5f22f07c2ab2dea8c66fe9585a062c96 + depends: + - __osx >=11.0 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 63895 + timestamp: 1725568783033 +- kind: conda + name: libffi + version: 3.4.2 + build: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + purls: [] + size: 39020 + timestamp: 1636488587153 +- kind: conda + name: libffi + version: 3.4.2 + build: h3557bc0_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 59450 + timestamp: 1636488255090 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libffi + version: 3.4.2 + build: h8ffe710_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 + md5: 2c96d1b6915b408893f9472569dee135 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: MIT + license_family: MIT + purls: [] + size: 42063 + timestamp: 1636489106777 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 + md5: 511b511c5445e324066c3377481bcab8 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==14.2.0=*_1 + - libgomp 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 535243 + timestamp: 1729089435134 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: he9431aa_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 + md5: 0694c249c61469f2c0f7e2990782af21 + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54104 + timestamp: 1729089444587 +- kind: conda + name: libglib + version: 2.82.2 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 3931898 + timestamp: 1729191404130 +- kind: conda + name: libglib + version: 2.82.2 + build: hc486b8e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + sha256: 6797d24de7acd298f81a86078c64e4f3fea6d551a3e8892205c9e72a37a7cc3c + md5: 47f6d85fe47b865e56c539f2ba5f4dad + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 4020802 + timestamp: 1729191545578 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libgomp + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf + md5: 376f0e73abbda6d23c0cb749adc195ef + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 463521 + timestamp: 1729089357313 +- kind: conda + name: libiconv + version: '1.17' + build: h31becfc_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705787 + timestamp: 1702684557134 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705775 + timestamp: 1702682170569 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.0.0-h31becfc_1.conda + sha256: 675bc1f2a8581cd34a86c412663ec29c5f90c1d9f8d11866aa1ade5cdbdf8429 + md5: ed24e702928be089d9ba3f05618515c6 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 647126 + timestamp: 1694475003570 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hb547adb_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + sha256: a42054eaa38e84fc1e5ab443facac4bbc9d1b6b6f23f54b7bf4f1eb687e1d993 + md5: 3ff1e053dc3a2b8e36b9bfa4256a58d1 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 547541 + timestamp: 1694475104253 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hcfcfb64_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda + sha256: 4e7808e3098b4b4ed7e287f63bb24f9045cc4d95bfd39f0db870fc2837d74dff + md5: 3f1b948619c45b1ca714d60c7389092c + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 822966 + timestamp: 1694475223854 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f + md5: ea25936bb4080d843790b586850f82b8 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 618575 + timestamp: 1694474974816 +- kind: conda + name: libnsl + version: 2.0.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 34501 + timestamp: 1697358973269 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libpng + version: 1.6.44 + build: h3ca93ac_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda + sha256: 0d3d6ff9225f6918ac225e3839c0d91e5af1da08a4ebf59cac1bfd86018db945 + md5: 639ac6b55a40aa5de7b8c1b4d78f9e81 + depends: + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: zlib-acknowledgement + purls: [] + size: 348933 + timestamp: 1726235196095 +- kind: conda + name: libpng + version: 1.6.44 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + sha256: e5b14f7a01c2db4362d8591f42f82f336ed48d5e4079e4d1f65d0c2a3637ea78 + md5: f4cc49d7aa68316213e4b12be35308d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 290661 + timestamp: 1726234747153 +- kind: conda + name: libpng + version: 1.6.44 + build: hc14010f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + sha256: 38f8759a3eb8060deabd4db41f0f023514d853e46ddcbd0ba21768fc4e563bb1 + md5: fb36e93f0ea6a6f5d2b99984f34b049e + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 263385 + timestamp: 1726234714421 +- kind: conda + name: libpng + version: 1.6.44 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.44-hc4a20ef_0.conda + sha256: 23b5ce15cf9c6017641a8396bab00ae807dd9f662718cfa7f61de114d0c97647 + md5: 5d25802b25fcc7419fa13e21affaeb3a + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 294907 + timestamp: 1726236639270 +- kind: conda + name: libsqlite + version: 3.47.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + sha256: 4f3cd0477c831eab48fb7fa3ed91d918aeb644fad9b4014726d445339750cdcc + md5: 964bef59135d876c596ae67b3315e812 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Unlicense + purls: [] + size: 884970 + timestamp: 1729592254351 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + sha256: 76ffc7a5823b51735c11d535f3666b3c9c7d1519f9fbb6fa9cdff79db01960b9 + md5: 540296f0ce9d3352188c15a89b30b9ac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 874704 + timestamp: 1729591931557 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hbaaea75_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + sha256: 76aa4bbbaa2334689b16048f04ac4c7406e9bfb1f225ac7107fd2a73f85329cf + md5: 5bbe4802d5460b80620411fe1da8fec3 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 837789 + timestamp: 1729592072314 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + sha256: 469ed05e9a1622b0204a2b6cf620c9054bf6904e2ed818a1f91ee96a7bc64517 + md5: ccbe261fb8c1f1cd1a3122592247d3c4 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 1042108 + timestamp: 1729592001716 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: h3f4de04_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 + md5: 37f489acd39e22b623d2d1e5ac6d195c + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3816794 + timestamp: 1729089463404 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54105 + timestamp: 1729027780628 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: hf1166c9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd + md5: 0e75771b8a03afae5a2c6ce71bc733f5 + depends: + - libstdcxx 14.2.0 h3f4de04_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54133 + timestamp: 1729089498541 +- kind: conda + name: libtiff + version: 4.7.0 + build: he137b08_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + sha256: 9890121db85f6ef463fe12eb04ef1471176e3ef3b5e2d62e8d6dac713df00df4 + md5: 63872517c98aa305da58a757c443698e + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 428156 + timestamp: 1728232228989 +- kind: conda + name: libtiff + version: 4.7.0 + build: hec21d91_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-hec21d91_1.conda + sha256: 14ecb9e129b1b5ffd6d4bee48de95cd2cd0973c712e1b965d3ef977cca23936d + md5: 1f80061f5ba6956fcdc381f34618cd8d + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 464938 + timestamp: 1728232266969 +- kind: conda + name: libtiff + version: 4.7.0 + build: hfc51747_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.0-hfc51747_1.conda + sha256: 902cb9f7f54d17dcfd54ce050b1ce2bc944b9bbd1748913342c2ea1e1140f8bb + md5: eac317ed1cc6b9c0af0c27297e364665 + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 978865 + timestamp: 1728232594877 +- kind: conda + name: libtiff + version: 4.7.0 + build: hfce79cd_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-hfce79cd_1.conda + sha256: 97ba24c74750b6e731b3fe0d2a751cda6148b4937d2cc3f72d43bf7b3885c39d + md5: b9abf45f7c64caf3303725f1aa0e9a4d + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=17 + - libdeflate >=1.22,<1.23.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 366323 + timestamp: 1728232400072 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libuuid + version: 2.38.1 + build: hb4cce97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 35720 + timestamp: 1680113474501 +- kind: conda + name: libuv + version: 1.49.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 + md5: 4bc348e3a1a74d20a3f9beb866d75e0a + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 410500 + timestamp: 1729322654121 +- kind: conda + name: libuv + version: 1.49.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 + md5: 1899e1ec2be63386c41c4db31d3056af + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 627484 + timestamp: 1729322575379 +- kind: conda + name: libuv + version: 1.49.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 + md5: 070e3c9ddab77e38799d5c30b109c633 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 884647 + timestamp: 1729322566955 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.4.0-h31becfc_0.conda + sha256: 10dded60f274e29c573cfacf6e96f5d0fc374ee431250374a44cbd773916ab9d + md5: 5fd7ab3e5f382c70607fbac6335e6e19 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 363577 + timestamp: 1713201785160 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda + sha256: 0d4bad713a512d79bfeb4d61821f447afab8b0792aca823f505ce6b195e9fde5 + md5: c0af0edfebe780b19940e94871f1a765 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 287750 + timestamp: 1713200194013 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hcfcfb64_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda + sha256: d0ca51cb1de9192be9a3238e71fbcca5a535619c499c4f4c9b2ed41c14d36770 + md5: abd61d0ab127ec5cd68f62c2969e6f34 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 274359 + timestamp: 1713200524021 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f + md5: b26e8aa824079e1be0294e7152ca4559 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 438953 + timestamp: 1713199854503 +- kind: conda + name: libxcb + version: '1.16' + build: h013a479_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda + sha256: abae56e12a4c62730b899fdfb82628a9ac171c4ce144fc9f34ae024957a82a0e + md5: f0b599acdc82d5bc7e3b105833e7c5c8 + depends: + - m2w64-gcc-libs + - m2w64-gcc-libs-core + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 989459 + timestamp: 1724419883091 +- kind: conda + name: libxcb + version: 1.17.0 + build: h262b8f6_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + sha256: 461cab3d5650ac6db73a367de5c8eca50363966e862dcf60181d693236b1ae7b + md5: cd14ee5cca2464a425b1dbfc24d90db2 + depends: + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 397493 + timestamp: 1727280745441 +- kind: conda + name: libxcb + version: 1.17.0 + build: h8a09558_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 395888 + timestamp: 1727278577118 +- kind: conda + name: libxcb + version: 1.17.0 + build: hdb1d25a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + sha256: bd3816218924b1e43b275863e21a3e13a5db4a6da74cca8e60bc3c213eb62f71 + md5: af523aae2eca6dfa1c8eec693f5b9a79 + depends: + - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 323658 + timestamp: 1727278733917 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 114269 + timestamp: 1702724369203 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libzlib + version: 1.3.1 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + md5: 41fbfac52c601159df6c01f875de31b9 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 55476 + timestamp: 1727963768015 +- kind: conda + name: libzlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: libzlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 66657 + timestamp: 1727963199518 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 +- kind: conda + name: m2w64-gcc-libgfortran + version: 5.3.0 + build: '6' + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 + md5: 066552ac6b907ec6d72c0ddab29050dc + depends: + - m2w64-gcc-libs-core + - msys2-conda-epoch ==20160418 + license: GPL, LGPL, FDL, custom + purls: [] + size: 350687 + timestamp: 1608163451316 +- kind: conda + name: m2w64-gcc-libs + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa + md5: fe759119b8b3bfa720b8762c6fdc35de + depends: + - m2w64-gcc-libgfortran + - m2w64-gcc-libs-core + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 532390 + timestamp: 1608163512830 +- kind: conda + name: m2w64-gcc-libs-core + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 + md5: 4289d80fb4d272f1f3b56cfe87ac90bd + depends: + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 219240 + timestamp: 1608163481341 +- kind: conda + name: m2w64-gmp + version: 6.1.0 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 + md5: 53a1c73e1e3d185516d7e3af177596d9 + depends: + - msys2-conda-epoch ==20160418 + license: LGPL3 + purls: [] + size: 743501 + timestamp: 1608163782057 +- kind: conda + name: m2w64-jq + version: '1.6' + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + sha256: d722a8c06f44dfb5f357608e6e1d40d1f1c926316bbee5d1e71d93823554646b + md5: 209cbf1b222dc774cb29ce57796500b3 + depends: + - m2w64-gcc-libs + - m2w64-oniguruma + license: MIT + license_family: MIT + purls: [] + size: 424702 + timestamp: 1591860215369 +- kind: conda + name: m2w64-libwinpthread-git + version: 5.0.0.4634.697f757 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 + md5: 774130a326dee16f1ceb05cc687ee4f0 + depends: + - msys2-conda-epoch ==20160418 + license: MIT, BSD + purls: [] + size: 31928 + timestamp: 1608166099896 +- kind: conda + name: m2w64-oniguruma + version: 6.9.5 + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + sha256: 523edeac9788aa61243bd2ceb7b8bdb1a86b68c9f7f1aeb933085893d2886cc3 + md5: 61c9b808f92724106a63dd7b50979d6b + depends: + - m2w64-gcc-libs + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 426599 + timestamp: 1591828659130 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + size: 64356 + timestamp: 1686175179621 +- kind: conda + name: mdurl + version: 0.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping + size: 14680 + timestamp: 1704317789138 +- kind: conda + name: more-itertools + version: 10.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + sha256: 2315b7dba237e16b0e1b601725a8e03e062421e0be28d8a25dc35dd9bd93a342 + md5: 3364591bebd600979606791e1dff7cb6 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/more-itertools?source=hash-mapping + size: 57345 + timestamp: 1725630183289 +- kind: conda + name: msys2-conda-epoch + version: '20160418' + build: '1' + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 + md5: b0309b72560df66f71a9d5e34a5efdfa + purls: [] + size: 3227 + timestamp: 1608166968312 +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 802321 + timestamp: 1724658775723 +- kind: conda + name: ncurses + version: '6.5' + build: hcccb83c_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 + md5: 91d49c85cacd92caa40cf375ef72a25d + depends: + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 924472 + timestamp: 1724658573518 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: nodejs + version: 22.9.0 + build: h08fde81_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + sha256: 736a4738aba32a03401aa25c8f740e4afe4aea02bc06651b59b06f0fdc024fdf + md5: 3771a3a6abe5a8db8910d5ebf144811b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=17 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 14859715 + timestamp: 1726671037225 +- kind: conda + name: nodejs + version: 22.9.0 + build: h57928b3_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + sha256: 6d74f0dbb91eb2049199ba801a3db67965f990aef44084f9ae51a1f70c2996f6 + md5: 6aa54ed90a643a11a005491ff316b1c4 + license: MIT + license_family: MIT + purls: [] + size: 25378221 + timestamp: 1726657153171 +- kind: conda + name: nodejs + version: 22.9.0 + build: h8374285_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + sha256: ff2186a51d389c18423109af3abf6377d4ef5b1370a81ee5f8fb2e036d79cf4f + md5: 6a9739c1ce3f9714b705a655872b5a4d + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21653106 + timestamp: 1726665120657 +- kind: conda + name: nodejs + version: 22.9.0 + build: hf235a45_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 + md5: 40255c9ffb722d614b02ca7aaee6abcb + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21198038 + timestamp: 1726661026112 +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + sha256: 456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0 + requires_python: '>=3.10' +- kind: conda + name: oniguruma + version: 6.9.9 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + sha256: e21b1822736959ba434ebce452ee86844a11d918c8b1c48c71f15e9a932fd571 + md5: 475018b8e0b8720c985a185427f5bf13 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 250005 + timestamp: 1697487236819 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + sha256: 66632aeef5b74e15746161db8fa8b5150a191ab05823d7d2f1587bdf96674c7b + md5: 770c654e0d5bfa3aa1e6ac5440815cda + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 223231 + timestamp: 1697485732214 +- kind: conda + name: oniguruma + version: 6.9.9 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed + md5: 77dab674d16c1525ebe65e67de30de0d + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 246869 + timestamp: 1697485543293 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h0d9d63b_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.2-h0d9d63b_0.conda + sha256: d83375856601bc67c11295b537548a937a6896ede9d0a51d78bf5e921ab07c6f + md5: fd2898519e839d5ceb778343f39a3176 + depends: + - libgcc-ng >=12 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 374964 + timestamp: 1709159226478 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h3d672ee_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda + sha256: dda71cbe094234ab208f3552dec1f4ca6f2e614175d010808d6cb66ecf0bc753 + md5: 7e7099ad94ac3b599808950cec30ad4e + depends: + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 237974 + timestamp: 1709159764160 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h488ebb8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + sha256: 5600a0b82df042bd27d01e4e687187411561dfc11cc05143a08ce29b64bf2af2 + md5: 7f2e286780f072ed750df46dc2631138 + depends: + - libgcc-ng >=12 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 341592 + timestamp: 1709159244431 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h9f1df11_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.2-h9f1df11_0.conda + sha256: 472d6eaffc1996e6af35ec8e91c967f472a536a470079bfa56383cc0dbf4d463 + md5: 5029846003f0bc14414b9128a1f7c84b + depends: + - libcxx >=16 + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 316603 + timestamp: 1709159627299 +- kind: conda + name: openssl + version: 3.3.2 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + sha256: a45c42f3577294e22ac39ddb6ef5a64fd5322e8a6725afefbf4f2b4109340bf9 + md5: 1dc86753693df5e3326bb8a85b74c589 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 8396053 + timestamp: 1725412961673 +- kind: conda + name: openssl + version: 3.3.2 + build: h8359307_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 + md5: 1773ebccdc13ec603356e8ff1db9e958 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2882450 + timestamp: 1725410638874 +- kind: conda + name: openssl + version: 3.3.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + sha256: 4669d26dbf81e4d72093d8260f55d19d57204d82b1d9440be83d11d313b5990c + md5: 9e1e477b3f8ee3789297883faffa708b + depends: + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3428083 + timestamp: 1725412266679 +- kind: conda + name: openssl + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + sha256: cee91036686419f6dd6086902acf7142b4916e1c4ba042e9ca23e151da012b6d + md5: 4d638782050ab6faa27275bed57e9b4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2891789 + timestamp: 1725410790053 +- kind: pypi + name: outcome + version: 1.3.0.post0 + url: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + sha256: e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b + requires_dist: + - attrs>=19.2.0 + requires_python: '>=3.7' +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 50290 + timestamp: 1718189540074 +- kind: conda + name: pathspec + version: 0.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d + md5: 17064acba08d3686f1135b5ec1b32b12 + depends: + - python >=3.7 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/pathspec?source=hash-mapping + size: 41173 + timestamp: 1702250135032 +- kind: conda + name: pcre2 + version: '10.44' + build: h070dd5b_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + sha256: e9f4b912e48514771d477f2ee955f59d4ff4ef799c3d4d16e4d0f335ce91df67 + md5: 94022de9682cb1a0bb18a99cbc3541b3 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 884590 + timestamp: 1723488793100 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 952308 + timestamp: 1723488734144 +- kind: conda + name: pexpect + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pillow + version: 10.4.0 + build: py312h381445a_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py312h381445a_1.conda + sha256: 0b52e708ac4b72e6e1608de517cd4c8e6517dd525e23163a69bf73c7261399fc + md5: c57e54ae4acca720fb3a44bee93cb5b9 + depends: + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.16,<2.0.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 42468305 + timestamp: 1726075694989 +- kind: conda + name: pillow + version: 11.0.0 + build: py312h5ab5af3_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.0.0-py312h5ab5af3_0.conda + sha256: 3cf43a5eb1f67f3a5f3ef1ec3a685f8767019cce24dbe46c4b76fee8a54fbacf + md5: 1c4bdfe659cfdedd372685ce2494e97b + depends: + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41756471 + timestamp: 1729068045876 +- kind: conda + name: pillow + version: 11.0.0 + build: py312h7b63e92_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + sha256: 13a464bea02c0df0199c20ef6bad24a6bc336aaf55bf8d6a133d0fe664463224 + md5: 385f46a4df6f97892503a841121a9acf + depends: + - __glibc >=2.17,<3.0.a0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41948418 + timestamp: 1729065846594 +- kind: conda + name: pillow + version: 11.0.0 + build: py312haf37ca6_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.0.0-py312haf37ca6_0.conda + sha256: 727b4c3faecdb6f6809cf20c5f32d2df4af34e0d5b9146b7588383bcba7990e8 + md5: dc9b51fbd2b6f7fea9b5123458864dbb + depends: + - __osx >=11.0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41737424 + timestamp: 1729065920347 +- kind: conda + name: pip + version: '24.2' + build: pyh8b19718_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + sha256: d820e5358bcb117fa6286e55d4550c60b0332443df62121df839eab2d11c890b + md5: 6c78fbb8ddfd64bcb55b5cbafd2d2c43 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=hash-mapping + size: 1237976 + timestamp: 1724954490262 +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 20625 + timestamp: 1726613611845 +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 8ff8303409ebed76bed4c3d655340320b768817d900ba208b394fdd7d7939a5c + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + sha256: e0e87b0c4dc8fce83c725dd851aec37bc4e882bb225ec8a96bd83cf32d4f1623 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + sha256: 7da2eb51a19c7f3b523e9faa9d98e7af92e52eb983a099979ea79c9668e3cbf7 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + sha256: 8dabb80e62f667fe2640a8b694e26a7b884c0b4803f7514a3954fc849126227b + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 23815 + timestamp: 1713667175451 +- kind: conda + name: pnpm + version: 9.12.2 + build: h6417eb3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + sha256: 0caf7ddacb1d8adb16144a93cfaf7a70bff2f83e22cbaae4d3d91b71f28f9caf + md5: 711bc7fb6b870f4b5b180c181786d710 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3466596 + timestamp: 1729713864150 +- kind: conda + name: pnpm + version: 9.12.2 + build: haa868a1_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + sha256: ce0c2e4268cd81308b8c069564b9f7885d9c21ddd8b83120f0fabc66d9ab58d3 + md5: c70ffc202c1f5d9223a13a12310c874d + depends: + - nodejs >=22.9.0,<23.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 3319869 + timestamp: 1729714702980 +- kind: conda + name: pnpm + version: 9.12.2 + build: hbf5023e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + sha256: aa25e9d0085be78115c5104ff905f9930d8585901a7a8d7278083f87ff4f6d25 + md5: 15d1e168a06119b34c9bd39187ce2af3 + depends: + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3516854 + timestamp: 1729713906302 +- kind: conda + name: pnpm + version: 9.12.2 + build: hef028c3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + sha256: 6fd70df2e5e5a25aede2dfadd17530b2e7ecc0c41da43af89efd09dbbda8ca38 + md5: 8a157c984a8e384507438d62275868d5 + depends: + - __osx >=11.0 + - libcxx >=17 + - nodejs >=22.9.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3473615 + timestamp: 1729714099186 +- kind: conda + name: pthread-stubs + version: '0.4' + build: h86ecc28_1002 + build_number: 1002 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + sha256: 977dfb0cb3935d748521dd80262fe7169ab82920afd38ed14b7fee2ea5ec01ba + md5: bb5a90c93e3bac3d5690acf76b4a6386 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8342 + timestamp: 1726803319942 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hb9d3cd8_1002 + build_number: 1002 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8252 + timestamp: 1726802366959 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hcd874cb_1001 + build_number: 1001 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 + sha256: bb5a6ddf1a609a63addd6d7b488b0f58d05092ea84e9203283409bff539e202a + md5: a1f820480193ea83582b13249a7e7bd9 + depends: + - m2w64-gcc-libs + license: MIT + license_family: MIT + purls: [] + size: 6417 + timestamp: 1606147814351 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hd74edd7_1002 + build_number: 1002 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 + md5: 415816daf82e0b23a736a069a75e9da7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 8381 + timestamp: 1726802424786 +- kind: conda + name: ptyprocess + version: 0.7.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 16546 + timestamp: 1609419417991 +- kind: conda + name: pycparser + version: '2.22' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=hash-mapping + size: 105098 + timestamp: 1711811634025 +- kind: pypi + name: pyee + version: 12.0.0 + url: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + sha256: 7b14b74320600049ccc7d0e0b1becd3b4bd0a03c745758225e31a59f4095c990 + requires_dist: + - typing-extensions + - build ; extra == 'dev' + - flake8 ; extra == 'dev' + - flake8-black ; extra == 'dev' + - pytest ; extra == 'dev' + - black ; extra == 'dev' + - isort ; extra == 'dev' + - jupyter-console ; extra == 'dev' + - mkdocs ; extra == 'dev' + - mkdocs-include-markdown-plugin ; extra == 'dev' + - mkdocstrings[python] ; extra == 'dev' + - sphinx ; extra == 'dev' + - toml ; extra == 'dev' + - tox ; extra == 'dev' + - trio ; extra == 'dev' + - twine ; extra == 'dev' + - twisted ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - trio ; python_full_version >= '3.7' and extra == 'dev' + - trio-typing ; python_full_version >= '3.7' and extra == 'dev' + - pytest-asyncio ; python_full_version >= '3.4' and extra == 'dev' + - pytest-trio ; python_full_version >= '3.7' and extra == 'dev' + requires_python: '>=3.8' +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 879295 + timestamp: 1714846885370 +- kind: pypi + name: pyodide-py + version: 0.26.3 + url: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + sha256: b63b6847c8906aa8f3c17df362135d0407aabf1d4b023557aed721d822e347a8 + requires_python: '>=3.12' +- kind: pypi + name: pysocks + version: 1.7.1 + url: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + sha256: 2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: conda + name: pytest + version: 8.3.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + sha256: e99376d0068455712109d233f5790458ff861aeceb458bfda74e353338e4d815 + md5: c03d61f31f38fdb9facf70c29958bf7a + depends: + - colorama + - exceptiongroup >=1.0.0rc8 + - iniconfig + - packaging + - pluggy <2,>=1.5 + - python >=3.8 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 258293 + timestamp: 1725977334143 +- kind: pypi + name: pytest-asyncio + version: 0.24.0 + url: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + sha256: a811296ed596b69bf0b6f3dc40f83bcaf341b155a269052d82efa2b25ac7037b + requires_dist: + - pytest<9,>=8.2 + - sphinx>=5.3 ; extra == 'docs' + - sphinx-rtd-theme>=1.0 ; extra == 'docs' + - coverage>=6.2 ; extra == 'testing' + - hypothesis>=5.7.1 ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: pytest-pyodide + version: 0.58.3 + url: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + sha256: 6425d8ac868090da70337bdef33bd8a082a353a4ecdb89f5371bcf58ac7390e7 + requires_dist: + - hypothesis + - pexpect + - playwright + - pytest + - pytest-asyncio + - selenium + - tblib>=3 + - build ; extra == 'test' + - pytest-cov ; extra == 'test' + - requests ; extra == 'test' + requires_python: '>=3.10' +- kind: conda + name: python + version: 3.12.7 + build: h5d932e8_0_cpython + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + sha256: 25570873d92d4d9490c6db780cc85e6c28bd3ff61dc1ece79f602cf82bc73bc1 + md5: e6cab21bb5787270388939cf41cc5f43 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 13762126 + timestamp: 1728057461028 +- kind: conda + name: python + version: 3.12.7 + build: h739c21a_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef + md5: e0d82e57ebb456077565e6d82cd4a323 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 12975439 + timestamp: 1728057819519 +- kind: conda + name: python + version: 3.12.7 + build: hc5c86c4_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d + md5: 0515111a9cdf69f83278f7c197db9807 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31574780 + timestamp: 1728059777603 +- kind: conda + name: python + version: 3.12.7 + build: hce54a09_0_cpython + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 + md5: 21f1f7c6ccf6b747c5086d2422c230e1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 15987537 + timestamp: 1728057382072 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + sha256: 5ccdad9981753cc4a2d126e356673a21c0cd5b34e209cb8d476a3947d4ad9b39 + md5: 62b20f305498284a07dc6c45fd0e5c87 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6329 + timestamp: 1723823366253 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6278 + timestamp: 1723823099686 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + sha256: 9486662af81a219e96d343449eff242f38d7c5128ced5ce5acf85857265058d6 + md5: e8681f534453af7afab4cd2bc1423eec + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6730 + timestamp: 1723823139725 +- kind: conda + name: pywin32-ctypes + version: 0.2.3 + build: py312h2e8e312_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + sha256: 3e3b97740b4ec2f54debf7bfdbaa9a81a7aabd4549051b926de91d05304c4948 + md5: c5f1cb65c56ec74687801960f8a31eb5 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pywin32-ctypes?source=hash-mapping + size: 57449 + timestamp: 1727282288065 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: readline + version: '8.2' + build: h8fc344f_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 294092 + timestamp: 1679532238805 +- kind: conda + name: readline + version: '8.2' + build: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 250351 + timestamp: 1679532511311 +- kind: conda + name: rich + version: 13.9.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + sha256: ec2a69babe41085a5bcec4ef80b2d5bade2ca399d971f57894dfb96cf59a18d1 + md5: 50dd5529812447e2b4e2a5dd6a6f1655 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rich?source=hash-mapping + size: 185320 + timestamp: 1729623039134 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h7900ff3_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + sha256: c6d5d0bc7fb6cbfa3b8be8f2399a3c1308b3392a4e20bd1a0f29a828fda5ab20 + md5: 4840da9db2808db946a0d979603c6de4 + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31601 + timestamp: 1725915741329 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h8025657_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + sha256: fd6bc45ba0c6bb097ad98037ad8d2ddf2449f28c2eedf57dfff54eeceefe90c6 + md5: 4ae02e3717828f5e92dfae068845afdd + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31394 + timestamp: 1725917363210 +- kind: pypi + name: selenium + version: 4.25.0 + url: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + sha256: 3798d2d12b4a570bc5790163ba57fef10b2afee958bf1d80f2a3cf07c4141f33 + requires_dist: + - urllib3[socks]>=1.26,<3 + - trio~=0.17 + - trio-websocket~=0.9 + - certifi>=2021.10.8 + - typing-extensions~=4.9 + - websocket-client~=1.8 + requires_python: '>=3.8' +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 777462 + timestamp: 1727249510532 +- kind: conda + name: shellingham + version: 1.5.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/shellingham?source=hash-mapping + size: 14568 + timestamp: 1698144516278 +- kind: conda + name: sniffio + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping + size: 15064 + timestamp: 1708953086199 +- kind: pypi + name: sortedcontainers + version: 2.4.0 + url: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- kind: pypi + name: tblib + version: 3.0.0 + url: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + sha256: 80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129 + requires_python: '>=3.8' +- kind: conda + name: tk + version: 8.6.13 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3351802 + timestamp: 1695506242997 +- kind: conda + name: tk + version: 8.6.13 + build: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3145523 + timestamp: 1699202432999 +- kind: conda + name: tk + version: 8.6.13 + build: h5226925_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: fc048363eb8f03cd1737600a5d08aafe + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: TCL + license_family: BSD + purls: [] + size: 3503410 + timestamp: 1699202577803 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tomli + version: 2.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 18203 + timestamp: 1727974767524 +- kind: conda + name: tomli-w + version: 1.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + sha256: 25b88bb2c4e79be642d8e5b5738781404055cd596403a20511e6fa30f0c71585 + md5: 2c5eb5b3a0fd2c4787d8162f57da2a20 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli-w?source=hash-mapping + size: 12323 + timestamp: 1728405537678 +- kind: conda + name: tomlkit + version: 0.13.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + sha256: 2ccfe8dafdc1f1af944bca6bdf28fa97b5fa6125d84b8895a4e918a020853c12 + md5: 0062a5f3347733f67b0f33ca48cc21dd + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomlkit?source=hash-mapping + size: 37279 + timestamp: 1723631592742 +- kind: pypi + name: trio + version: 0.27.0 + url: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + sha256: 68eabbcf8f457d925df62da780eff15ff5dc68fd6b367e2dde59f7aaf2a0b884 + requires_dist: + - attrs>=23.2.0 + - sortedcontainers + - idna + - outcome + - sniffio>=1.3.0 + - cffi>=1.14 ; implementation_name != 'pypy' and os_name == 'nt' + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.8' +- kind: pypi + name: trio-websocket + version: 0.11.1 + url: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + sha256: 520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638 + requires_dist: + - trio>=0.11 + - wsproto>=0.14 + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.7' +- kind: conda + name: trove-classifiers + version: 2024.10.21.16 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + sha256: 591e4ffdc95660b9e596c15b65cad35a70b36235f02dbd089ccc198dd5af0e71 + md5: 501f6d3288160a31d99a2f1321e77393 + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/trove-classifiers?source=hash-mapping + size: 18429 + timestamp: 1729552033760 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + purls: [] + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: ucrt + version: 10.0.22621.0 + build: h57928b3_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 + constrains: + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + purls: [] + size: 559710 + timestamp: 1728377334097 +- kind: pypi + name: urllib3 + version: 2.2.3 + url: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + sha256: ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2<5,>=4 ; extra == 'h2' + - pysocks!=1.5.7,<2.0,>=1.5.6 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- kind: conda + name: userpath + version: 1.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + sha256: c8cbddd625340e1b00b53bafabc764526ee85f7ddb91018424bab0eea057796d + md5: 5bf074c9253a3bf914becfc50757406f + depends: + - click + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/userpath?source=hash-mapping + size: 17423 + timestamp: 1632758637093 +- kind: conda + name: uv + version: 0.4.26 + build: h0f3a69f_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + sha256: 4f05a61c3c3127ce7e487001215d20f49da0563fa4335462b2f6cc0028bb265b + md5: c4316a4c2b47ae154259fa5caffd53f1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 9446110 + timestamp: 1729774270770 +- kind: conda + name: uv + version: 0.4.26 + build: h2016286_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + sha256: f63f7ab9e410899daf66e7ff343020b4bb8cf5f52413acca0dcb95ae9b04f854 + md5: f3f6ad5ca3aca4e0e5fd0f7f5f156093 + depends: + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 8929757 + timestamp: 1729774724816 +- kind: conda + name: uv + version: 0.4.26 + build: h41fe3af_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + sha256: f9530088e0a7319946c0dbc51c2e82bfa964fa3cb548e986053c7d8b6698056d + md5: 8beaeac747a7887e458e7de7e3d9fd6d + depends: + - __osx >=11.0 + - libcxx >=17 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR MIT + purls: [] + size: 8421278 + timestamp: 1729775629422 +- kind: conda + name: uv + version: 0.4.26 + build: ha08ef0e_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + sha256: 57691a29d941ffbbae312c6dedccc303b6303e58487803e84db20a3304c0d269 + md5: a09f8193bdf8d1512340e8ec2432e82d + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 OR MIT + purls: [] + size: 10344775 + timestamp: 1729775595022 +- kind: conda + name: vc + version: '14.3' + build: ha32ba9b_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 + depends: + - vc14_runtime >=14.38.33135 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17447 + timestamp: 1728400826998 +- kind: conda + name: vc14_runtime + version: 14.40.33810 + build: hcc2c482_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + purls: [] + size: 750719 + timestamp: 1728401055788 +- kind: conda + name: virtualenv + version: 20.27.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + sha256: 18bae5ff9f02793ca56d295f0a5f1d4443623ee3be09a6805eb7d4b18245968c + md5: a6ed1227ba6ec37cfc2b25e6512f729f + depends: + - distlib <1,>=0.3.7 + - filelock <4,>=3.12.2 + - platformdirs <5,>=3.9.1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/virtualenv?source=hash-mapping + size: 2952166 + timestamp: 1729243861344 +- kind: conda + name: vs2015_runtime + version: 14.40.33810 + build: h3bf8584_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 + depends: + - vc14_runtime >=14.40.33810 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17453 + timestamp: 1728400827536 +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + sha256: f8a2a213b9179965db2d2eedececd69a37e287e902330509afae51c71a3a6842 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + sha256: b4364e14d44e3b7afe6a40bf608e9d0d2c40b09dece441d20f4f6e31906b729c + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + sha256: a07445073cf36a6e5d1dc28246a897dcbdaa537ba8be8805be65422ecca297eb + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + sha256: 5bdf1214ee3ee78a4a8a92da339f4c4c8c109e65af881b37f4adfc05d02af426 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: websocket-client + version: 1.8.0 + url: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + sha256: 17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526 + requires_dist: + - sphinx>=6.0 ; extra == 'docs' + - sphinx-rtd-theme>=1.1.0 ; extra == 'docs' + - myst-parser>=2.0.0 ; extra == 'docs' + - python-socks ; extra == 'optional' + - wsaccel ; extra == 'optional' + - websockets ; extra == 'test' + requires_python: '>=3.8' +- kind: conda + name: wheel + version: 0.44.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping + size: 58585 + timestamp: 1722797131787 +- kind: pypi + name: wsproto + version: 1.2.0 + url: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + sha256: b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736 + requires_dist: + - h11<1,>=0.9.0 + requires_python: '>=3.7.0' +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: h86ecc28_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.11-h86ecc28_1.conda + sha256: a00c4c6054209c84fb460c5e4ae7193c335a9ee1851645c9ad59312438e853f7 + md5: c5f72a733c461aa7785518d29b997cc8 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 15690 + timestamp: 1727036097294 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + sha256: 532a046fee0b3a402db867b6ec55c84ba4cdedb91d817147c8feeae9766be3d6 + md5: 77cbc488235ebbaab2b6e912d3934bae + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 14679 + timestamp: 1727034741045 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hcd874cb_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda + sha256: 8c5b976e3b36001bdefdb41fb70415f9c07eff631f1f0155f3225a7649320e77 + md5: c46ba8712093cb0114404ae8a7582e1a + depends: + - m2w64-gcc-libs + - m2w64-gcc-libs-core + license: MIT + license_family: MIT + purls: [] + size: 51297 + timestamp: 1684638355740 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hd74edd7_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + sha256: 7113618021cf6c80831a429b2ebb9d639f3c43cf7fe2257d235dc6ae0ab43289 + md5: 7e0125f8fb619620a0011dc9297e2493 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 13515 + timestamp: 1727034783560 +- kind: conda + name: xorg-libxdmcp + version: 1.1.3 + build: hcd874cb_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 + sha256: f51205d33c07d744ec177243e5d9b874002910c731954f2c8da82459be462b93 + md5: 46878ebb6b9cbd8afcf8088d7ef00ece + depends: + - m2w64-gcc-libs + license: MIT + license_family: MIT + purls: [] + size: 67908 + timestamp: 1610072296570 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: h57736b2_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda + sha256: efcc150da5926cf244f757b8376d96a4db78bc15b8d90ca9f56ac6e75755971f + md5: 25a5a7b797fe6e084e04ffe2db02fc62 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 20615 + timestamp: 1727796660574 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee + md5: 8035c64cb77ed555e3f150b7b3972480 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 19901 + timestamp: 1727794976192 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + sha256: 9939a166d780700d81023546759102b33fdc2c5f11ef09f5f66c77210fd334c8 + md5: 77c447f48cab5d3a15ac224edb86a968 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 18487 + timestamp: 1727795205022 +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: xz + version: 5.2.6 + build: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 235693 + timestamp: 1660346961024 +- kind: conda + name: xz + version: 5.2.6 + build: h8d14728_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 + md5: 515d77642eaa3639413c6b1bc3f94219 + depends: + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 217804 + timestamp: 1660346976440 +- kind: conda + name: xz + version: 5.2.6 + build: h9cdd2b7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 + md5: 83baad393a31d59c20b63ba4da6592df + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 440555 + timestamp: 1660348056328 +- kind: conda + name: zipp + version: 3.20.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 21409 + timestamp: 1726248679175 +- kind: conda + name: zlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + purls: [] + size: 77606 + timestamp: 1727963209370 +- kind: conda + name: zlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + sha256: b4f649aa3ecdae384d5dad7074e198bff120edd3dfb816588e31738fc6d627b1 + md5: bc230abb5d21b63ff4799b0e75204783 + depends: + - libgcc >=13 + - libzlib 1.3.1 h86ecc28_2 + license: Zlib + license_family: Other + purls: [] + size: 95582 + timestamp: 1727963203597 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + purls: [] + size: 92286 + timestamp: 1727963153079 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 330788 + timestamp: 1725305806565 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h7606c53_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + sha256: 3e0c718aa18dcac7f080844dbe0aea41a9cea75083019ce02e8a784926239826 + md5: a92cc3435b2fd6f51463f5a4db5c50b1 + depends: + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 320624 + timestamp: 1725305934189 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hb698573_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + sha256: 2681c2a249752bdc7978e59ee2f34fcdfcbfda80029b84b8e5fec8dbc9e3af25 + md5: ffcb8e97e62af42075e0e5f46bb9856e + depends: + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 392496 + timestamp: 1725305808244 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hef9b889_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b + md5: 8b7069e9792ee4e5b4919a7a306d2e67 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 419552 + timestamp: 1725305670210 +- kind: conda + name: zstd + version: 1.5.6 + build: h02f22dd_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + sha256: 484f9d0722c77685ae379fbff3ccd662af9ead7e59eb39cd6d0c677cdf25ff6c + md5: be8d5f8cf21aed237b8b182ea86b3dd6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 539937 + timestamp: 1714723130243 +- kind: conda + name: zstd + version: 1.5.6 + build: h0ea2cb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + md5: 9a17230f95733c04dc40a2b1e5491d74 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 349143 + timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 554846 + timestamp: 1714722996770 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 405089 + timestamp: 1714723101397 diff --git a/packages/downsample/pixi.toml b/packages/downsample/pixi.toml new file mode 100644 index 000000000..58c9c1e5a --- /dev/null +++ b/packages/downsample/pixi.toml @@ -0,0 +1,142 @@ +[project] +authors = ["Matt McCormick "] +channels = ["conda-forge"] +description = "Pipelines for downsampling images." +name = "downsample" +platforms = ["win-64", "linux-64", "linux-aarch64", "osx-arm64"] +version = "0.1.0" + +[tasks] + +[dependencies] +python = "3.12.*" +pnpm = ">=9.12.1,<10" +hatch = ">=1.13.0,<2" +pip = ">=24.2,<25" + +[target.win-64.dependencies] +m2w64-jq = ">=1.6.0,<2" + +[target.unix.dependencies] +jq = ">=1.7.1,<2" + +[tasks.version-sync-typescript] +cmd = '''version=$(cat package.json | jq .version) && + jq ".version = $version" typescript/package.json > typescript/package.json.tmp && + mv typescript/package.json.tmp typescript/package.json''' + +[tasks.version-sync-python-wasi] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + echo "version is $version" && + hatch version $version''' +cwd = "python/itkwasm-downsample-wasi" + +[tasks.version-sync-python-emscripten] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-downsample-emscripten" + +[tasks.version-sync-python-dispatch] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-downsample" + +[tasks.version-sync] +depends-on = ["version-sync-typescript", "version-sync-python-wasi", "version-sync-python-emscripten", "version-sync-python-dispatch"] +description = "Synchronize package versions" + +[tasks.publish-typescript] +cmd = "pnpm publish --filter \"{typescript}\"" + +[tasks.publish-python-user-check] +cmd = "if [ -n \"$HATCH_INDEX_USER\"]; then echo \"HATCH_INDEX_USER is set\"; else echo \"HATCH_INDEX_USER is not set\"; exit 1; fi" + +[tasks.publish-python-wasi] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-downsample-wasi" + +[tasks.publish-python-emscripten] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-downsample-emscripten" + +[tasks.publish-python-dispatch] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-downsample" + +[tasks.publish] +depends-on = ["publish-typescript", "publish-python-wasi", "publish-python-emscripten", "publish-python-dispatch"] +description = "Synchronize package versions" + +[feature.python.dependencies] +pytest = ">=8.3.3,<9" +pillow = ">=10.4.0,<12" + +[feature.python.pypi-dependencies] +itkwasm-downsample-wasi = { path = "python/itkwasm-downsample-wasi", editable = true } +itkwasm-downsample = { path = "python/itkwasm-downsample", editable = true } +pyodide-py = ">=0.26.3, <0.27" +pytest-pyodide = ">=0.58.3, <0.59" +itk-webassemblyinterface = ">=1.0b175, <2" +itkwasm-image-io = ">=1.3.0, <2" +itkwasm-compare-images = ">=5.2.3, <6" + +[feature.python.tasks.test-wasi] +cmd = "pytest" +cwd = "python/itkwasm-downsample-wasi" +description = "Run tests for itkwasm-downsample-wasi" + +[feature.python.tasks.download-pyodide] +cmd = '''curl -L https://github.com/pyodide/pyodide/releases/download/0.26.3/pyodide-0.26.3.tar.bz2 -o pyodide.tar.bz2 && + tar xjf pyodide.tar.bz2 && + rm pyodide.tar.bz2''' +outputs = ["pyodide"] +description = "Download Pyodide" + +[feature.python.tasks.test-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-downsample-emscripten" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-downsample-emscripten" + +[feature.python.tasks.serve-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-downsample-emscripten" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-downsample-emscripten for development" + +[feature.python.tasks.test-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + cp ../itkwasm-downsample-emscripten/dist/pyodide/itkwasm_downsample_emscripten*.whl ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-downsample" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-downsample" + +[feature.python.tasks.serve-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-downsample" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-downsample for development" + +[feature.python.tasks.test-python] +depends-on = ["test-wasi", "test-emscripten", "test-dispatch"] +description = "Run tests for all Python packages" + +[environments] +python = ["python"] diff --git a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py index b21fdf8cd..72366bcfb 100644 --- a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py +++ b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIGN0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgUXQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSljdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHV0PSIxLjQuMiIsYkE9dXQ7dmFyIGZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1mdDt2YXIgcHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFk9cHQ7ZnVuY3Rpb24gZHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIFMuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIFMuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIFkuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgWS5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIE49ZHQ7dmFyIG10PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sdT1tdDt2YXIgaWU9U3ltYm9sKCJDb21saW5rLnByb3h5IiksaHQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksTkE9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLEZBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxzQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksYWU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIseXQ9e2NhbkhhbmRsZTpBPT5hZShBKSYmQVtpZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gSWUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLEdBKEEpfX0sd3Q9e2NhbkhhbmRsZTpBPT5hZShBKSYmc0EgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LHNlPW5ldyBNYXAoW1sicHJveHkiLHl0XSxbInRocm93Iix3dF1dKTtmdW5jdGlvbiBEdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gSWUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG4pe2lmKCFufHwhbi5kYXRhKXJldHVybjtpZighRHQodCxuLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7bi5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6byx0eXBlOmkscGF0aDpnfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxuLmRhdGEpLGw9KG4uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoSCksQzt0cnl7bGV0IEk9Zy5zbGljZSgwLC0xKS5yZWR1Y2UoKGMsQik9PmNbQl0sQSksYT1nLnJlZHVjZSgoYyxCKT0+Y1tCXSxBKTtzd2l0Y2goaSl7Y2FzZSJHRVQiOkM9YTticmVhaztjYXNlIlNFVCI6SVtnLnNsaWNlKC0xKVswXV09SChuLmRhdGEudmFsdWUpLEM9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6Qz1hLmFwcGx5KEksbCk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgYz1uZXcgYSguLi5sKTtDPUZ0KGMpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Yyxwb3J0MjpCfT1uZXcgTWVzc2FnZUNoYW5uZWw7SWUoQSxCKSxDPUxBKGMsW2NdKX1icmVhaztjYXNlIlJFTEVBU0UiOkM9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChJKXtDPXt2YWx1ZTpJLFtzQV06MH19UHJvbWlzZS5yZXNvbHZlKEMpLmNhdGNoKEk9Pih7dmFsdWU6SSxbc0FdOjB9KSkudGhlbihJPT57bGV0W2EsY109QkEoSSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOm99KSxjKSxpPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxnZShlKSxGQSBpbiBBJiZ0eXBlb2YgQVtGQV09PSJmdW5jdGlvbiImJkFbRkFdKCkpfSkuY2F0Y2goST0+e2xldFthLGNdPUJBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbc0FdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6b30pLGMpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gU3QoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gZ2UoQSl7U3QoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBHQShBLGUpe3JldHVybiBVQShBLFtdLGUpfWZ1bmN0aW9uIGFBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBCZShBKXtyZXR1cm4gcShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntnZShBKX0pfXZhciBJQT1uZXcgV2Vha01hcCxnQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oSUEuZ2V0KEEpfHwwKS0xO0lBLnNldChBLGUpLGU9PT0wJiZCZShBKX0pO2Z1bmN0aW9uIGt0KEEsZSl7bGV0IHQ9KElBLmdldChlKXx8MCkrMTtJQS5zZXQoZSx0KSxnQSYmZ0EucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIFJ0KEEpe2dBJiZnQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIFVBKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbj1uZXcgUHJveHkodCx7Z2V0KG8saSl7aWYoYUEociksaT09PU5BKXJldHVybigpPT57UnQobiksQmUoQSkscj0hMH07aWYoaT09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5ufTtsZXQgZz1xKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChsPT5sLnRvU3RyaW5nKCkpfSkudGhlbihIKTtyZXR1cm4gZy50aGVuLmJpbmQoZyl9cmV0dXJuIFVBKEEsWy4uLmUsaV0pfSxzZXQobyxpLGcpe2FBKHIpO2xldFtsLENdPUJBKGcpO3JldHVybiBxKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxpXS5tYXAoST0+SS50b1N0cmluZygpKSx2YWx1ZTpsfSxDKS50aGVuKEgpfSxhcHBseShvLGksZyl7YUEocik7bGV0IGw9ZVtlLmxlbmd0aC0xXTtpZihsPT09aHQpcmV0dXJuIHEoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihIKTtpZihsPT09ImJpbmQiKXJldHVybiBVQShBLGUuc2xpY2UoMCwtMSkpO2xldFtDLEldPW9lKGcpO3JldHVybiBxKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkN9LEkpLnRoZW4oSCl9LGNvbnN0cnVjdChvLGkpe2FBKHIpO2xldFtnLGxdPW9lKGkpO3JldHVybiBxKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChDPT5DLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpnfSxsKS50aGVuKEgpfX0pO3JldHVybiBrdChuLEEpLG59ZnVuY3Rpb24gYnQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gb2UoQSl7bGV0IGU9QS5tYXAoQkEpO3JldHVybltlLm1hcCh0PT50WzBdKSxidChlLm1hcCh0PT50WzFdKSldfXZhciBDZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBMQShBLGUpe3JldHVybiBDZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIEZ0KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tpZV06ITB9KX1mdW5jdGlvbiBCQShBKXtmb3IobGV0W2UsdF1vZiBzZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isbl09dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sbl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LENlLmdldChBKXx8W11dfWZ1bmN0aW9uIEgoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gc2UuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBxKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBuPVV0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBvKGkpeyFpLmRhdGF8fCFpLmRhdGEuaWR8fGkuZGF0YS5pZCE9PW58fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHIoaS5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpufSxlKSx0KX0pfWZ1bmN0aW9uIFV0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBaKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6TnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOlRBfT1PYmplY3QsbEE9KEE9PmU9PntsZXQgdD1OdC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksRz1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+bEEoZSk9PT1BKSxFQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6S309QXJyYXksWD1FQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gR3QoQSl7cmV0dXJuIEEhPT1udWxsJiYhWChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFYKEEuY29uc3RydWN0b3IpJiZrKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBRZT1HKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIEx0KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmUWUoQS5idWZmZXIpLGV9dmFyIE90PUVBKCJzdHJpbmciKSxrPUVBKCJmdW5jdGlvbiIpLHVlPUVBKCJudW1iZXIiKSxjQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLFB0PUE9PkE9PT0hMHx8QT09PSExLENBPUE9PntpZihsQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPVRBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LFR0PUcoIkRhdGUiKSx4dD1HKCJGaWxlIiksSnQ9RygiQmxvYiIpLEh0PUcoIkZpbGVMaXN0IiksTXQ9QT0+Y0EoQSkmJmsoQS5waXBlKSxZdD1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8ayhBLmFwcGVuZCkmJigoZT1sQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJmsoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0scXQ9RygiVVJMU2VhcmNoUGFyYW1zIiksS3Q9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uICQoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixuO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxLKEEpKWZvcihyPTAsbj1BLmxlbmd0aDtyPG47cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBvPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksaT1vLmxlbmd0aCxnO2ZvcihyPTA7cjxpO3IrKylnPW9bcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBmZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsbjtmb3IoO3ItLSA+MDspaWYobj10W3JdLGU9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG47cmV0dXJuIG51bGx9dmFyIHBlPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsZGU9QT0+IVgoQSkmJkEhPT1wZTtmdW5jdGlvbiBQQSgpe2xldHtjYXNlbGVzczpBfT1kZSh0aGlzKSYmdGhpc3x8e30sZT17fSx0PShyLG4pPT57bGV0IG89QSYmZmUoZSxuKXx8bjtDQShlW29dKSYmQ0Eocik/ZVtvXT1QQShlW29dLHIpOkNBKHIpP2Vbb109UEEoe30scik6SyhyKT9lW29dPXIuc2xpY2UoKTplW29dPXJ9O2ZvcihsZXQgcj0wLG49YXJndW1lbnRzLmxlbmd0aDtyPG47cisrKWFyZ3VtZW50c1tyXSYmJChhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIFd0PShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PigkKGUsKG4sbyk9Pnt0JiZrKG4pP0Fbb109WihuLHQpOkFbb109bn0se2FsbE93bktleXM6cn0pLEEpLGp0PUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksdnQ9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sX3Q9KEEsZSx0LHIpPT57bGV0IG4sbyxpLGc9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLG89bi5sZW5ndGg7by0tID4wOylpPW5bb10sKCFyfHxyKGksQSxlKSkmJiFnW2ldJiYoZVtpXT1BW2ldLGdbaV09ITApO0E9dCE9PSExJiZUQShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0senQ9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxWdD1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoSyhBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighdWUoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LFp0PShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZUQShVaW50OEFycmF5KSksWHQ9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG47Zm9yKDsobj1yLm5leHQoKSkmJiFuLmRvbmU7KXtsZXQgbz1uLnZhbHVlO2UuY2FsbChBLG9bMF0sb1sxXSl9fSwkdD0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxBcj1HKCJIVE1MRm9ybUVsZW1lbnQiKSxlcj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbil7cmV0dXJuIHIudG9VcHBlckNhc2UoKStufSksRWU9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLHRyPUcoIlJlZ0V4cCIpLG1lPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTskKHQsKG4sbyk9PntsZXQgaTsoaT1lKG4sbyxBKSkhPT0hMSYmKHJbb109aXx8bil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxycj1BPT57bWUoQSwoZSx0KT0+e2lmKGsoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoayhyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxucj0oQSxlKT0+e2xldCB0PXt9LHI9bj0+e24uZm9yRWFjaChvPT57dFtvXT0hMH0pfTtyZXR1cm4gSyhBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxvcj0oKT0+e30saXI9KEEsZSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOmUpLE9BPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsY2U9IjAxMjM0NTY3ODkiLGhlPXtESUdJVDpjZSxBTFBIQTpPQSxBTFBIQV9ESUdJVDpPQStPQS50b1VwcGVyQ2FzZSgpK2NlfSxhcj0oQT0xNixlPWhlLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6cn09ZTtmb3IoO0EtLTspdCs9ZVtNYXRoLnJhbmRvbSgpKnJ8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIHNyKEEpe3JldHVybiEhKEEmJmsoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBJcj1BPT57bGV0IGU9bmV3IEFycmF5KDEwKSx0PShyLG4pPT57aWYoY0Eocikpe2lmKGUuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXtlW25dPXI7bGV0IG89SyhyKT9bXTp7fTtyZXR1cm4gJChyLChpLGcpPT57bGV0IGw9dChpLG4rMSk7IVgobCkmJihvW2ddPWwpfSksZVtuXT12b2lkIDAsb319cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LGdyPUcoIkFzeW5jRnVuY3Rpb24iKSxCcj1BPT5BJiYoY0EoQSl8fGsoQSkpJiZrKEEudGhlbikmJmsoQS5jYXRjaCkscz17aXNBcnJheTpLLGlzQXJyYXlCdWZmZXI6UWUsaXNCdWZmZXI6R3QsaXNGb3JtRGF0YTpZdCxpc0FycmF5QnVmZmVyVmlldzpMdCxpc1N0cmluZzpPdCxpc051bWJlcjp1ZSxpc0Jvb2xlYW46UHQsaXNPYmplY3Q6Y0EsaXNQbGFpbk9iamVjdDpDQSxpc1VuZGVmaW5lZDpYLGlzRGF0ZTpUdCxpc0ZpbGU6eHQsaXNCbG9iOkp0LGlzUmVnRXhwOnRyLGlzRnVuY3Rpb246ayxpc1N0cmVhbTpNdCxpc1VSTFNlYXJjaFBhcmFtczpxdCxpc1R5cGVkQXJyYXk6WnQsaXNGaWxlTGlzdDpIdCxmb3JFYWNoOiQsbWVyZ2U6UEEsZXh0ZW5kOld0LHRyaW06S3Qsc3RyaXBCT006anQsaW5oZXJpdHM6dnQsdG9GbGF0T2JqZWN0Ol90LGtpbmRPZjpsQSxraW5kT2ZUZXN0OkcsZW5kc1dpdGg6enQsdG9BcnJheTpWdCxmb3JFYWNoRW50cnk6WHQsbWF0Y2hBbGw6JHQsaXNIVE1MRm9ybTpBcixoYXNPd25Qcm9wZXJ0eTpFZSxoYXNPd25Qcm9wOkVlLHJlZHVjZURlc2NyaXB0b3JzOm1lLGZyZWV6ZU1ldGhvZHM6cnIsdG9PYmplY3RTZXQ6bnIsdG9DYW1lbENhc2U6ZXIsbm9vcDpvcix0b0Zpbml0ZU51bWJlcjppcixmaW5kS2V5OmZlLGdsb2JhbDpwZSxpc0NvbnRleHREZWZpbmVkOmRlLEFMUEhBQkVUOmhlLGdlbmVyYXRlU3RyaW5nOmFyLGlzU3BlY0NvbXBsaWFudEZvcm06c3IsdG9KU09OT2JqZWN0OklyLGlzQXN5bmNGbjpncixpc1RoZW5hYmxlOkJyfTtmdW5jdGlvbiBXKEEsZSx0LHIsbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG4mJih0aGlzLnJlc3BvbnNlPW4pfXMuaW5oZXJpdHMoVyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIHllPVcucHJvdG90eXBlLHdlPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e3dlW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFcsd2UpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5ZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtXLmZyb209KEEsZSx0LHIsbixvKT0+e2xldCBpPU9iamVjdC5jcmVhdGUoeWUpO3JldHVybiBzLnRvRmxhdE9iamVjdChBLGksZnVuY3Rpb24obCl7cmV0dXJuIGwhPT1FcnJvci5wcm90b3R5cGV9LGc9PmchPT0iaXNBeGlvc0Vycm9yIiksVy5jYWxsKGksQS5tZXNzYWdlLGUsdCxyLG4pLGkuY2F1c2U9QSxpLm5hbWU9QS5uYW1lLG8mJk9iamVjdC5hc3NpZ24oaSxvKSxpfTt2YXIgcD1XO3ZhciBRQT1udWxsO2Z1bmN0aW9uIHhBKEEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQSl8fHMuaXNBcnJheShBKX1mdW5jdGlvbiBTZShBKXtyZXR1cm4gcy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBEZShBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG4sbyl7cmV0dXJuIG49U2UobiksIXQmJm8/IlsiK24rIl0iOm59KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIENyKEEpe3JldHVybiBzLmlzQXJyYXkoQSkmJiFBLnNvbWUoeEEpfXZhciBscj1zLnRvRmxhdE9iamVjdChzLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gRXIoQSxlLHQpe2lmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KFFBfHxGb3JtRGF0YSksdD1zLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oUSxmKXtyZXR1cm4hcy5pc1VuZGVmaW5lZChmW1FdKX0pO2xldCByPXQubWV0YVRva2VucyxuPXQudmlzaXRvcnx8SSxvPXQuZG90cyxpPXQuaW5kZXhlcyxsPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJnMuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighcy5pc0Z1bmN0aW9uKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gQyhFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihzLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFsJiZzLmlzQmxvYihFKSl0aHJvdyBuZXcgcCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gcy5pc0FycmF5QnVmZmVyKEUpfHxzLmlzVHlwZWRBcnJheShFKT9sJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gSShFLFEsZil7bGV0IGQ9RTtpZihFJiYhZiYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihzLmVuZHNXaXRoKFEsInt9IikpUT1yP1E6US5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYocy5pc0FycmF5KEUpJiZDcihFKXx8KHMuaXNGaWxlTGlzdChFKXx8cy5lbmRzV2l0aChRLCJbXSIpKSYmKGQ9cy50b0FycmF5KEUpKSlyZXR1cm4gUT1TZShRKSxkLmZvckVhY2goZnVuY3Rpb24oVSxFdCl7IShzLmlzVW5kZWZpbmVkKFUpfHxVPT09bnVsbCkmJmUuYXBwZW5kKGk9PT0hMD9EZShbUV0sRXQsbyk6aT09PW51bGw/UTpRKyJbXSIsQyhVKSl9KSwhMX1yZXR1cm4geEEoRSk/ITA6KGUuYXBwZW5kKERlKGYsUSxvKSxDKEUpKSwhMSl9bGV0IGE9W10sYz1PYmplY3QuYXNzaWduKGxyLHtkZWZhdWx0VmlzaXRvcjpJLGNvbnZlcnRWYWx1ZTpDLGlzVmlzaXRhYmxlOnhBfSk7ZnVuY3Rpb24gQihFLFEpe2lmKCFzLmlzVW5kZWZpbmVkKEUpKXtpZihhLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrUS5qb2luKCIuIikpO2EucHVzaChFKSxzLmZvckVhY2goRSxmdW5jdGlvbihkLEYpeyghKHMuaXNVbmRlZmluZWQoZCl8fGQ9PT1udWxsKSYmbi5jYWxsKGUsZCxzLmlzU3RyaW5nKEYpP0YudHJpbSgpOkYsUSxjKSk9PT0hMCYmQihkLFE/US5jb25jYXQoRik6W0ZdKX0pLGEucG9wKCl9fWlmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gQihBKSxlfXZhciBUPUVyO2Z1bmN0aW9uIGtlKEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gUmUoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZUKEEsdGhpcyxlKX12YXIgYmU9UmUucHJvdG90eXBlO2JlLmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtiZS50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLGtlKX06a2U7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChuWzBdKSsiPSIrdChuWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHVBPVJlO2Z1bmN0aW9uIGNyKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIEFBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8Y3Isbj10JiZ0LnNlcmlhbGl6ZSxvO2lmKG4/bz1uKGUsdCk6bz1zLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgdUEoZSx0KS50b1N0cmluZyhyKSxvKXtsZXQgaT1BLmluZGV4T2YoIiMiKTtpIT09LTEmJihBPUEuc2xpY2UoMCxpKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gQX12YXIgSkE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe3MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxIQT1KQTt2YXIgZkE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBGZT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6dUE7dmFyIFVlPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgTmU9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgR2U9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6RmUsRm9ybURhdGE6VWUsQmxvYjpOZX0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBNQT17fTtRdChNQSx7aGFzQnJvd3NlckVudjooKT0+TGUsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5RcixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PnVyfSk7dmFyIExlPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLFFyPShBPT5MZSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLHVyPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgeT17Li4uTUEsLi4uR2V9O2Z1bmN0aW9uIFlBKEEsZSl7cmV0dXJuIFQoQSxuZXcgeS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixuLG8pe3JldHVybiB5LmlzTm9kZSYmcy5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOm8uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZSkpfWZ1bmN0aW9uIGZyKEEpe3JldHVybiBzLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxBKS5tYXAoZT0+ZVswXT09PSJbXSI/IiI6ZVsxXXx8ZVswXSl9ZnVuY3Rpb24gcHIoQSl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhBKSxyLG49dC5sZW5ndGgsbztmb3Iocj0wO3I8bjtyKyspbz10W3JdLGVbb109QVtvXTtyZXR1cm4gZX1mdW5jdGlvbiBkcihBKXtmdW5jdGlvbiBlKHQscixuLG8pe2xldCBpPXRbbysrXTtpZihpPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IGc9TnVtYmVyLmlzRmluaXRlKCtpKSxsPW8+PXQubGVuZ3RoO3JldHVybiBpPSFpJiZzLmlzQXJyYXkobik/bi5sZW5ndGg6aSxsPyhzLmhhc093blByb3AobixpKT9uW2ldPVtuW2ldLHJdOm5baV09ciwhZyk6KCghbltpXXx8IXMuaXNPYmplY3QobltpXSkpJiYobltpXT1bXSksZSh0LHIsbltpXSxvKSYmcy5pc0FycmF5KG5baV0pJiYobltpXT1wcihuW2ldKSksIWcpfWlmKHMuaXNGb3JtRGF0YShBKSYmcy5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBzLmZvckVhY2hFbnRyeShBLChyLG4pPT57ZShmcihyKSxuLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBwQT1kcjtmdW5jdGlvbiBtcihBLGUsdCl7aWYocy5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKEEpLHMudHJpbShBKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgcUE9e3RyYW5zaXRpb25hbDpmQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixuPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG89cy5pc09iamVjdChlKTtpZihvJiZzLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSkscy5pc0Zvcm1EYXRhKGUpKXJldHVybiBuP0pTT04uc3RyaW5naWZ5KHBBKGUpKTplO2lmKHMuaXNBcnJheUJ1ZmZlcihlKXx8cy5pc0J1ZmZlcihlKXx8cy5pc1N0cmVhbShlKXx8cy5pc0ZpbGUoZSl8fHMuaXNCbG9iKGUpKXJldHVybiBlO2lmKHMuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKHMuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKG8pe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIFlBKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1zLmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGw9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBUKGc/eyJmaWxlc1tdIjplfTplLGwmJm5ldyBsLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8bj8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLG1yKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxxQS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG49dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoZSYmcy5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bikpe2xldCBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm47dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKGkpdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9wLmZyb20oZyxwLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp5LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp5LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e3FBLmhlYWRlcnNbQV09e319KTt2YXIgaj1xQTt2YXIgaHI9cy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxPZT1BPT57bGV0IGU9e30sdCxyLG47cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe249aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLG4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9aS5zdWJzdHJpbmcobisxKS50cmltKCksISghdHx8ZVt0XSYmaHJbdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgUGU9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGRBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAoZEEpOlN0cmluZyhBKX1mdW5jdGlvbiB5cihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgd3I9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gS0EoQSxlLHQscixuKXtpZihzLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYobiYmKGU9dCksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIERyKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIFNyKEEsZSl7bGV0IHQ9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxuLG8saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIHY9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgbj10aGlzO2Z1bmN0aW9uIG8oZyxsLEMpe2xldCBJPWVBKGwpO2lmKCFJKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgYT1zLmZpbmRLZXkobixJKTsoIWF8fG5bYV09PT12b2lkIDB8fEM9PT0hMHx8Qz09PXZvaWQgMCYmblthXSE9PSExKSYmKG5bYXx8bF09ZEEoZykpfWxldCBpPShnLGwpPT5zLmZvckVhY2goZywoQyxJKT0+byhDLEksbCkpO3JldHVybiBzLmlzUGxhaW5PYmplY3QoZSl8fGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2koZSx0KTpzLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiF3cihlKT9pKE9lKGUpLHQpOmUhPW51bGwmJm8odCxlLHIpLHRoaXN9Z2V0KGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgbj10aGlzW3JdO2lmKCF0KXJldHVybiBuO2lmKHQ9PT0hMClyZXR1cm4geXIobik7aWYocy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxuLHIpO2lmKHMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhuKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fEtBKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxuPSExO2Z1bmN0aW9uIG8oaSl7aWYoaT1lQShpKSxpKXtsZXQgZz1zLmZpbmRLZXkocixpKTtnJiYoIXR8fEtBKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLG49ITApfX1yZXR1cm4gcy5pc0FycmF5KGUpP2UuZm9yRWFjaChvKTpvKGUpLG59Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxuPSExO2Zvcig7ci0tOyl7bGV0IG89dFtyXTsoIWV8fEtBKHRoaXMsdGhpc1tvXSxvLGUsITApKSYmKGRlbGV0ZSB0aGlzW29dLG49ITApfXJldHVybiBufW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIHMuZm9yRWFjaCh0aGlzLChuLG8pPT57bGV0IGk9cy5maW5kS2V5KHIsbyk7aWYoaSl7dFtpXT1kQShuKSxkZWxldGUgdFtvXTtyZXR1cm59bGV0IGc9ZT9EcihvKTpTdHJpbmcobykudHJpbSgpO2chPT1vJiZkZWxldGUgdFtvXSx0W2ddPWRBKG4pLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKHIsbik9PntyIT1udWxsJiZyIT09ITEmJih0W25dPWUmJnMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG49PnIuc2V0KG4pKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1tQZV09dGhpc1tQZV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxuPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG8oaSl7bGV0IGc9ZUEoaSk7cltnXXx8KFNyKG4saSkscltnXT0hMCl9cmV0dXJuIHMuaXNBcnJheShlKT9lLmZvckVhY2gobyk6byhlKSx0aGlzfX07di5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7cy5yZWR1Y2VEZXNjcmlwdG9ycyh2LnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTtzLmZyZWV6ZU1ldGhvZHModik7dmFyIHc9djtmdW5jdGlvbiB0QShBLGUpe2xldCB0PXRoaXN8fGoscj1lfHx0LG49dy5mcm9tKHIuaGVhZGVycyksbz1yLmRhdGE7cmV0dXJuIHMuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe289Zy5jYWxsKHQsbyxuLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG4ubm9ybWFsaXplKCksb31mdW5jdGlvbiByQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFRlKEEsZSx0KXtwLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLHAuRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1zLmluaGVyaXRzKFRlLHAse19fQ0FOQ0VMX186ITB9KTt2YXIgeD1UZTtmdW5jdGlvbiBXQShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBwKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW3AuRVJSX0JBRF9SRVFVRVNULHAuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIHhlPXkuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLG4sbyl7bGV0IGk9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07cy5pc051bWJlcih0KSYmaS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSkscy5pc1N0cmluZyhyKSYmaS5wdXNoKCJwYXRoPSIrcikscy5pc1N0cmluZyhuKSYmaS5wdXNoKCJkb21haW49IituKSxvPT09ITAmJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIGpBKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gdkEoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIG5BKEEsZSl7cmV0dXJuIEEmJiFqQShlKT92QShBLGUpOmV9dmFyIEplPXkuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG4obyl7bGV0IGk9bztyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSxpPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihpKXtsZXQgZz1zLmlzU3RyaW5nKGkpP24oaSk6aTtyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gX0EoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIGtyKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksbj0wLG89MCxpO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24obCl7bGV0IEM9RGF0ZS5ub3coKSxJPXJbb107aXx8KGk9QyksdFtuXT1sLHJbbl09QztsZXQgYT1vLGM9MDtmb3IoO2EhPT1uOyljKz10W2ErK10sYT1hJUE7aWYobj0obisxKSVBLG49PT1vJiYobz0obysxKSVBKSxDLWk8ZSlyZXR1cm47bGV0IEI9SSYmQy1JO3JldHVybiBCP01hdGgucm91bmQoYyoxZTMvQik6dm9pZCAwfX12YXIgSGU9a3I7ZnVuY3Rpb24gTWUoQSxlKXtsZXQgdD0wLHI9SGUoNTAsMjUwKTtyZXR1cm4gbj0+e2xldCBvPW4ubG9hZGVkLGk9bi5sZW5ndGhDb21wdXRhYmxlP24udG90YWw6dm9pZCAwLGc9by10LGw9cihnKSxDPW88PWk7dD1vO2xldCBJPXtsb2FkZWQ6byx0b3RhbDppLHByb2dyZXNzOmk/by9pOnZvaWQgMCxieXRlczpnLHJhdGU6bHx8dm9pZCAwLGVzdGltYXRlZDpsJiZpJiZDPyhpLW8pL2w6dm9pZCAwLGV2ZW50Om59O0lbZT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKEkpfX12YXIgUnI9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixZZT1SciYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG49QS5kYXRhLG89dy5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTppLHdpdGhYU1JGVG9rZW46Z309QSxsO2Z1bmN0aW9uIEMoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbCl9bGV0IEk7aWYocy5pc0Zvcm1EYXRhKG4pKXtpZih5Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8eS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpby5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoST1vLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtRLC4uLmZdPUk/SS5zcGxpdCgiOyIpLm1hcChkPT5kLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO28uc2V0Q29udGVudFR5cGUoW1F8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5mXS5qb2luKCI7ICIpKX19bGV0IGE9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IFE9QS5hdXRoLnVzZXJuYW1lfHwiIixmPUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7by5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoUSsiOiIrZikpfWxldCBjPW5BKEEuYmFzZVVSTCxBLnVybCk7YS5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksQUEoYyxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxhLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIEIoKXtpZighYSlyZXR1cm47bGV0IFE9dy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYSYmYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksZD17ZGF0YTohaXx8aT09PSJ0ZXh0Inx8aT09PSJqc29uIj9hLnJlc3BvbnNlVGV4dDphLnJlc3BvbnNlLHN0YXR1czphLnN0YXR1cyxzdGF0dXNUZXh0OmEuc3RhdHVzVGV4dCxoZWFkZXJzOlEsY29uZmlnOkEscmVxdWVzdDphfTtXQShmdW5jdGlvbihVKXt0KFUpLEMoKX0sZnVuY3Rpb24oVSl7cihVKSxDKCl9LGQpLGE9bnVsbH1pZigib25sb2FkZW5kImluIGE/YS5vbmxvYWRlbmQ9QjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFhfHxhLnJlYWR5U3RhdGUhPT00fHxhLnN0YXR1cz09PTAmJiEoYS5yZXNwb25zZVVSTCYmYS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoQil9LGEub25hYm9ydD1mdW5jdGlvbigpe2EmJihyKG5ldyBwKCJSZXF1ZXN0IGFib3J0ZWQiLHAuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbCl9LGEub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IHAoIk5ldHdvcmsgRXJyb3IiLHAuRVJSX05FVFdPUkssQSxhKSksYT1udWxsfSxhLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBmPUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixkPUEudHJhbnNpdGlvbmFsfHxmQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihmPUEudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgcChmLGQuY2xhcmlmeVRpbWVvdXRFcnJvcj9wLkVUSU1FRE9VVDpwLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGx9LHkuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoZyYmcy5pc0Z1bmN0aW9uKGcpJiYoZz1nKEEpKSxnfHxnIT09ITEmJkplKGMpKSl7bGV0IFE9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmeGUucmVhZChBLnhzcmZDb29raWVOYW1lKTtRJiZvLnNldChBLnhzcmZIZWFkZXJOYW1lLFEpfW49PT12b2lkIDAmJm8uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYSYmcy5mb3JFYWNoKG8udG9KU09OKCksZnVuY3Rpb24oZixkKXthLnNldFJlcXVlc3RIZWFkZXIoZCxmKX0pLHMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoYS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksaSYmaSE9PSJqc29uIiYmKGEucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLE1lKEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS51cGxvYWQmJmEudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixNZShBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYobD1RPT57YSYmKHIoIVF8fFEudHlwZT9uZXcgeChudWxsLEEsYSk6USksYS5hYm9ydCgpLGE9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9sKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpKSk7bGV0IEU9X0EoYyk7aWYoRSYmeS5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtyKG5ldyBwKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLHAuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59YS5zZW5kKG58fG51bGwpfSl9O3ZhciB6QT17aHR0cDpRQSx4aHI6WWV9O3MuZm9yRWFjaCh6QSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBxZT1BPT5gLSAke0F9YCxicj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbUE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsbj17fTtmb3IobGV0IG89MDtvPGU7bysrKXt0PUFbb107bGV0IGk7aWYocj10LCFicih0KSYmKHI9ekFbKGk9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgcChgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHIpYnJlYWs7bltpfHwiIyIrb109cn1pZighcil7bGV0IG89T2JqZWN0LmVudHJpZXMobikubWFwKChbZyxsXSk9PmBhZGFwdGVyICR7Z30gYCsobD09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9vLmxlbmd0aD4xP2BzaW5jZSA6CmArby5tYXAocWUpLmpvaW4oYApgKToiICIrcWUob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgcCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczp6QX07ZnVuY3Rpb24gVkEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHgobnVsbCxBKX1mdW5jdGlvbiBoQShBKXtyZXR1cm4gVkEoQSksQS5oZWFkZXJzPXcuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fGouYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gVkEoQSksci5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz13LmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gckEocil8fChWQShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz13LmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIEtlPUE9PkEgaW5zdGFuY2VvZiB3P3suLi5BfTpBO2Z1bmN0aW9uIFAoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoQyxJLGEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQykmJnMuaXNQbGFpbk9iamVjdChJKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOmF9LEMsSSk6cy5pc1BsYWluT2JqZWN0KEkpP3MubWVyZ2Uoe30sSSk6cy5pc0FycmF5KEkpP0kuc2xpY2UoKTpJfWZ1bmN0aW9uIG4oQyxJLGEpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDLGEpfWVsc2UgcmV0dXJuIHIoQyxJLGEpfWZ1bmN0aW9uIG8oQyxJKXtpZighcy5pc1VuZGVmaW5lZChJKSlyZXR1cm4gcih2b2lkIDAsSSl9ZnVuY3Rpb24gaShDLEkpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDKX1lbHNlIHJldHVybiByKHZvaWQgMCxJKX1mdW5jdGlvbiBnKEMsSSxhKXtpZihhIGluIGUpcmV0dXJuIHIoQyxJKTtpZihhIGluIEEpcmV0dXJuIHIodm9pZCAwLEMpfWxldCBsPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooQyxJKT0+bihLZShDKSxLZShJKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihJKXtsZXQgYT1sW0ldfHxuLGM9YShBW0ldLGVbSV0sSSk7cy5pc1VuZGVmaW5lZChjKSYmYSE9PWd8fCh0W0ldPWMpfSksdH12YXIgeUE9IjEuNi44Ijt2YXIgWkE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57WkFbQV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIFdlPXt9O1pBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihvLGkpe3JldHVybiJbQXhpb3MgdiIreUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitpKyhyPyIuICIrcjoiIil9cmV0dXJuKG8saSxnKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgcChuKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLHAuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhV2VbaV0mJihXZVtpXT0hMCxjb25zb2xlLndhcm4obihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLGksZyk6ITB9fTtmdW5jdGlvbiBGcihBLGUsdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBwKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixwLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhBKSxuPXIubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IG89cltuXSxpPWVbb107aWYoaSl7bGV0IGc9QVtvXSxsPWc9PT12b2lkIDB8fGkoZyxvLEEpO2lmKGwhPT0hMCl0aHJvdyBuZXcgcCgib3B0aW9uICIrbysiIG11c3QgYmUgIitsLHAuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgcCgiVW5rbm93biBvcHRpb24gIitvLHAuRVJSX0JBRF9PUFRJT04pfX12YXIgd0E9e2Fzc2VydE9wdGlvbnM6RnIsdmFsaWRhdG9yczpaQX07dmFyIEo9d0EudmFsaWRhdG9ycyxfPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgSEEscmVzcG9uc2U6bmV3IEhBfX1hc3luYyByZXF1ZXN0KGUsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgbz1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP28mJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmArbyk6ci5zdGFjaz1vfXRocm93IHJ9fV9yZXF1ZXN0KGUsdCl7dHlwZW9mIGU9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPWUpOnQ9ZXx8e30sdD1QKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOm99PXQ7ciE9PXZvaWQgMCYmd0EuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkoudHJhbnNpdGlvbmFsKEouYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKHMuaXNGdW5jdGlvbihuKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTp3QS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpKLmZ1bmN0aW9uLHNlcmlhbGl6ZTpKLmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPW8mJnMubWVyZ2Uoby5jb21tb24sb1t0Lm1ldGhvZF0pO28mJnMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIG9bRV19KSx0LmhlYWRlcnM9dy5jb25jYXQoaSxvKTtsZXQgZz1bXSxsPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihRKXt0eXBlb2YgUS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZRLnJ1bldoZW4odCk9PT0hMXx8KGw9bCYmUS5zeW5jaHJvbm91cyxnLnVuc2hpZnQoUS5mdWxmaWxsZWQsUS5yZWplY3RlZCkpfSk7bGV0IEM9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihRKXtDLnB1c2goUS5mdWxmaWxsZWQsUS5yZWplY3RlZCl9KTtsZXQgSSxhPTAsYztpZighbCl7bGV0IEU9W2hBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsZyksRS5wdXNoLmFwcGx5KEUsQyksYz1FLmxlbmd0aCxJPVByb21pc2UucmVzb2x2ZSh0KTthPGM7KUk9SS50aGVuKEVbYSsrXSxFW2ErK10pO3JldHVybiBJfWM9Zy5sZW5ndGg7bGV0IEI9dDtmb3IoYT0wO2E8Yzspe2xldCBFPWdbYSsrXSxRPWdbYSsrXTt0cnl7Qj1FKEIpfWNhdGNoKGYpe1EuY2FsbCh0aGlzLGYpO2JyZWFrfX10cnl7ST1oQS5jYWxsKHRoaXMsQil9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihhPTAsYz1DLmxlbmd0aDthPGM7KUk9SS50aGVuKENbYSsrXSxDW2ErK10pO3JldHVybiBJfWdldFVyaShlKXtlPVAodGhpcy5kZWZhdWx0cyxlKTtsZXQgdD1uQShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBBQSh0LGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe18ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChQKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtzLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihvLGksZyl7cmV0dXJuIHRoaXMucmVxdWVzdChQKGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm8sZGF0YTppfSkpfX1fLnByb3RvdHlwZVtlXT10KCksXy5wcm90b3R5cGVbZSsiRm9ybSJdPXQoITApfSk7dmFyIG9BPV87dmFyIFhBPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihvKXt0PW99KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG49PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgbz1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7by0tID4wOylyLl9saXN0ZW5lcnNbb10obik7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1uPT57bGV0IG8saT1uZXcgUHJvbWlzZShnPT57ci5zdWJzY3JpYmUoZyksbz1nfSkudGhlbihuKTtyZXR1cm4gaS5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKG8pfSxpfSxlKGZ1bmN0aW9uKG8saSxnKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyB4KG8saSxnKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihuKXtlPW59KSxjYW5jZWw6ZX19fSxqZT1YQTtmdW5jdGlvbiAkQShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gQWUoQSl7cmV0dXJuIHMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIGVlPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhlZSkuZm9yRWFjaCgoW0EsZV0pPT57ZWVbZV09QX0pO3ZhciB2ZT1lZTtmdW5jdGlvbiBfZShBKXtsZXQgZT1uZXcgb0EoQSksdD1aKG9BLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiBzLmV4dGVuZCh0LG9BLnByb3RvdHlwZSxlLHthbGxPd25LZXlzOiEwfSkscy5leHRlbmQodCxlLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gX2UoUChBLG4pKX0sdH12YXIgbT1fZShqKTttLkF4aW9zPW9BO20uQ2FuY2VsZWRFcnJvcj14O20uQ2FuY2VsVG9rZW49amU7bS5pc0NhbmNlbD1yQTttLlZFUlNJT049eUE7bS50b0Zvcm1EYXRhPVQ7bS5BeGlvc0Vycm9yPXA7bS5DYW5jZWw9bS5DYW5jZWxlZEVycm9yO20uYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX07bS5zcHJlYWQ9JEE7bS5pc0F4aW9zRXJyb3I9QWU7bS5tZXJnZUNvbmZpZz1QO20uQXhpb3NIZWFkZXJzPXc7bS5mb3JtVG9KU09OPUE9PnBBKHMuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7bS5nZXRBZGFwdGVyPW1BLmdldEFkYXB0ZXI7bS5IdHRwU3RhdHVzQ29kZT12ZTttLmRlZmF1bHQ9bTt2YXIgej1tO3ZhcntBeGlvczpaaSxBeGlvc0Vycm9yOlhpLENhbmNlbGVkRXJyb3I6JGksaXNDYW5jZWw6QWEsQ2FuY2VsVG9rZW46ZWEsVkVSU0lPTjp0YSxhbGw6cmEsQ2FuY2VsOm5hLGlzQXhpb3NFcnJvcjpvYSxzcHJlYWQ6aWEsdG9Gb3JtRGF0YTphYSxBeGlvc0hlYWRlcnM6c2EsSHR0cFN0YXR1c0NvZGU6SWEsZm9ybVRvSlNPTjpnYSxnZXRBZGFwdGVyOkJhLG1lcmdlQ29uZmlnOkNhfT16O2FzeW5jIGZ1bmN0aW9uIFVyKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgbj1hd2FpdCB6LmdldCh0LHtyZXNwb25zZVR5cGU6ImJsb2IiLHBhcmFtczplfSksbz1VUkwuY3JlYXRlT2JqZWN0VVJMKG4uZGF0YSk7cj1uZXcgV29ya2VyKG8se3R5cGU6Im1vZHVsZSJ9KX1lbHNlIHI9bmV3IFdvcmtlcih0LHt0eXBlOiJtb2R1bGUifSk7cmV0dXJuIHJ9dmFyIGlBPVVyO2Z1bmN0aW9uIHplKEEpe2xldCBlPUdBKEEpLHQ9QTtyZXR1cm4gdC50ZXJtaW5hdGVkPSExLHQud29ya2VyUHJveHk9ZSx0Lm9yaWdpbmFsVGVybWluYXRlPXQudGVybWluYXRlLHQudGVybWluYXRlPSgpPT57dC50ZXJtaW5hdGVkPSEwLHQud29ya2VyUHJveHlbTkFdKCksdC5vcmlnaW5hbFRlcm1pbmF0ZSgpfSx7d29ya2VyUHJveHk6ZSx3b3JrZXI6dH19YXN5bmMgZnVuY3Rpb24gTnIoQSxlLHQpe2xldCByO2lmKEEhPW51bGwpe2xldCBvPUE7cmV0dXJuIG8ud29ya2VyUHJveHkhPT12b2lkIDA/KHI9by53b3JrZXJQcm94eSx7d29ya2VyUHJveHk6cix3b3JrZXI6b30pOnplKEEpfWxldCBuPWF3YWl0IGlBKGUsdCk7cmV0dXJuIHplKG4pfXZhciBWZT1Ocjthc3luYyBmdW5jdGlvbiBHcihBLGUsdCl7bGV0IHI9InVua25vd24iO3R5cGVvZiBBIT0ic3RyaW5nIj9yPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9yPUE6cj10eXBlb2YgZTwidSI/YCR7ZX0vJHtBfWA6QSxyLmVuZHNXaXRoKCIuanMiKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC0zKSksci5lbmRzV2l0aCgiLndhc20iKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC01KSk7bGV0IG49YCR7cn0ud2FzbWAsaT0oYXdhaXQgei5nZXQobix7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KSkuZGF0YTtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke3J9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6aX0pfXZhciBaZT1Hcjt2YXIgWGU9YXN5bmMoKT0+V2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNSwxLDk2LDAsMSwxMjMsMywyLDEsMCwxMCwxMCwxLDgsMCw2NSwwLDI1MywxNSwyNTMsOTgsMTFdKSk7dmFyIGV0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLCRlPW5ldyBUZXh0RW5jb2RlcixBdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gTHIoQSxlKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxyPUEuZnNfb3BlbihlLHQuZmxhZ3MpLG89QS5mc19zdGF0KGUpLnNpemUsaT1udWxsO2V0P2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKG8pOmk9bmV3IEFycmF5QnVmZmVyKG8pO2xldCBnPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBBLmZzX3JlYWQocixnLDAsbywwKSxBLmZzX2Nsb3NlKHIpLGd9ZnVuY3Rpb24gdHQoQSxlLHQpe2xldCByPW51bGw7ZXQ/cj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6cj1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IG49bmV3IFVpbnQ4QXJyYXkociksbz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZSx0KTtyZXR1cm4gbi5zZXQobyksbn1mdW5jdGlvbiBoKEEsZSx0LHIpe2xldCBuPTA7cmV0dXJuIGUhPT1udWxsJiYobj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LHIsZS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShlLmJ1ZmZlciksbikpLG59ZnVuY3Rpb24gTShBLGUsdCl7bGV0IHI9SlNPTi5zdHJpbmdpZnkoZSksbj1BLmxlbmd0aEJ5dGVzVVRGOChyKSsxLG89QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LG5dKTtBLnN0cmluZ1RvVVRGOChyLG8sbil9ZnVuY3Rpb24gRChBLGUsdCxyKXtsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxvPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLGk9dHQoQSxuLG8pO3JldHVybiBOKHIsaS5idWZmZXIpfWZ1bmN0aW9uIERBKEEsZSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxlXSkscj1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShyKX1mdW5jdGlvbiBPcihBLGUsdCxyKXtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oQyxJKXtzd2l0Y2goQy50eXBlKXtjYXNlIHUuVGV4dFN0cmVhbTp7bGV0IGE9JGUuZW5jb2RlKEMuZGF0YS5kYXRhKSxjPWgoQSxhLEksMCksQj17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O00oQSxCLEkpO2JyZWFrfWNhc2UgdS5Kc29uQ29tcGF0aWJsZTp7bGV0IGE9JGUuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEMuZGF0YSkpLGM9aChBLGEsSSwwKSxCPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07TShBLEIsSSk7YnJlYWt9Y2FzZSB1LkJpbmFyeVN0cmVhbTp7bGV0IGE9Qy5kYXRhLmRhdGEsYz1oKEEsYSxJLDApLEI9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsQixJKTticmVha31jYXNlIHUuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKEMuZGF0YS5wYXRoLEMuZGF0YS5kYXRhKTticmVha31jYXNlIHUuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoQy5kYXRhLnBhdGgsQy5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgdS5JbWFnZTp7bGV0IGE9Qy5kYXRhLGM9aChBLGEuZGF0YSxJLDApLEI9aChBLGEuZGlyZWN0aW9uLEksMSksRT10eXBlb2YgYS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShhLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sUT17aW1hZ2VUeXBlOmEuaW1hZ2VUeXBlLG5hbWU6YS5uYW1lLG9yaWdpbjphLm9yaWdpbixzcGFjaW5nOmEuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsc2l6ZTphLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxtZXRhZGF0YTpFfTtNKEEsUSxJKTticmVha31jYXNlIHUuTWVzaDp7bGV0IGE9Qy5kYXRhLGM9aChBLGEucG9pbnRzLEksMCksQj1oKEEsYS5jZWxscyxJLDEpLEU9aChBLGEucG9pbnREYXRhLEksMiksUT1oKEEsYS5jZWxsRGF0YSxJLDMpLGY9e21lc2hUeXBlOmEubWVzaFR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsbnVtYmVyT2ZDZWxsczphLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsY2VsbEJ1ZmZlclNpemU6YS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTtNKEEsZixJKTticmVha31jYXNlIHUuUG9pbnRTZXQ6e2xldCBhPUMuZGF0YSxjPWgoQSxhLnBvaW50cyxJLDApLEI9aChBLGEucG9pbnREYXRhLEksMSksRT17cG9pbnRTZXRUeXBlOmEucG9pbnRTZXRUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07TShBLEUsSSk7YnJlYWt9Y2FzZSB1LlBvbHlEYXRhOntsZXQgYT1DLmRhdGEsYz1oKEEsYS5wb2ludHMsSSwwKSxCPWgoQSxhLnZlcnRpY2VzLEksMSksRT1oKEEsYS5saW5lcyxJLDIpLFE9aChBLGEucG9seWdvbnMsSSwzKSxmPWgoQSxhLnRyaWFuZ2xlU3RyaXBzLEksNCksZD1oKEEsYS5wb2ludERhdGEsSSw1KSxGPWgoQSxhLnBvaW50RGF0YSxJLDYpLFU9e3BvbHlEYXRhVHlwZTphLnBvbHlEYXRhVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6YS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbGluZXNCdWZmZXJTaXplOmEubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTphLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6YS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0Z9YH07TShBLFUsSSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG49QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKEMpe3Rocm93IHR5cGVvZiBDPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKEMpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLEN9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShuKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLGc9QS5nZXRNb2R1bGVTdGRlcnIoKSxsPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZvPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKEMsSSl7bGV0IGE9bnVsbDtzd2l0Y2goQy50eXBlKXtjYXNlIHUuVGV4dFN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxRPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO2E9e2RhdGE6QXQuZGVjb2RlKFEpfTticmVha31jYXNlIHUuSnNvbkNvbXBhdGlibGU6e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksUT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTthPUpTT04ucGFyc2UoQXQuZGVjb2RlKFEpKTticmVha31jYXNlIHUuQmluYXJ5U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pO2E9e2RhdGE6dHQoQSxCLEUpfTticmVha31jYXNlIHUuVGV4dEZpbGU6e2E9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKEMuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSB1LkJpbmFyeUZpbGU6e2E9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpMcihBLEMuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSB1LkltYWdlOntsZXQgQj1EQShBLEkpO0IuZGF0YT1EKEEsSSwwLEIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEIuZGlyZWN0aW9uPUQoQSxJLDEsWS5GbG9hdDY0KSxCLm1ldGFkYXRhPW5ldyBNYXAoQi5tZXRhZGF0YSksYT1CO2JyZWFrfWNhc2UgdS5NZXNoOntsZXQgQj1EQShBLEkpO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1EKEEsSSwwLEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1OKEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxzPjA/Qi5jZWxscz1EKEEsSSwxLEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkIuY2VsbHM9TihCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RChBLEksMixCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1OKEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RChBLEksMyxCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9TihCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPUI7YnJlYWt9Y2FzZSB1LlBvaW50U2V0OntsZXQgQj1EQShBLEkpO2NvbnNvbGUubG9nKEIpLEIubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1EKEEsSSwwLEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9TihCLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1EKEEsSSwxLEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1OKEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1CO2JyZWFrfWNhc2UgdS5Qb2x5RGF0YTp7bGV0IEI9REEoQSxJKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RChBLEksMCxZLkZsb2F0MzIpOkIucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9CLnZlcnRpY2VzPUQoQSxJLDEsUy5VSW50MzIpOkIudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEIubGluZXNCdWZmZXJTaXplPjA/Qi5saW5lcz1EKEEsSSwyLFMuVUludDMyKTpCLmxpbmVzPW5ldyBVaW50MzJBcnJheSxCLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0IucG9seWdvbnM9RChBLEksMyxTLlVJbnQzMik6Qi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9CLnRyaWFuZ2xlU3RyaXBzPUQoQSxJLDQsUy5VSW50MzIpOkIudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUQoQSxJLDUsQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPU4oQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RChBLEksNixCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPU4oQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9QjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBjPXt0eXBlOkMudHlwZSxkYXRhOmF9O2wucHVzaChjKX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDppLHN0ZGVycjpnLG91dHB1dHM6bH19dmFyIHJ0PU9yO3ZhciBQcj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gVHIoQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8QS5sZW5ndGg7cisrKXtsZXQgbj14cihBW3JdLGUpO24hPT1udWxsJiZ0LnB1c2gobil9cmV0dXJuIHR9ZnVuY3Rpb24geHIoQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSxQciYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT90OnQuc2xpY2UoMCl9dmFyIG50PVRyO2Z1bmN0aW9uIEpyKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBvdD1KcjtmdW5jdGlvbiBIcihBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgaXQ9SHI7ZnVuY3Rpb24gTXIoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIGF0PU1yO3ZhciBZcjtmdW5jdGlvbiBTQSgpe3JldHVybiBZcn12YXIgcXI7ZnVuY3Rpb24gc3QoKXtyZXR1cm4gcXJ9dmFyIEtyO2Z1bmN0aW9uIGtBKCl7cmV0dXJuIEtyfXZhciB0ZT1uZXcgTWFwO2Z1bmN0aW9uIFdyKCl7bGV0IEE9a0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIEl0KCl7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gUkEoKXtsZXQgQT1zdCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIGpyKEEsZSx0KXtsZXQgcj1BLG49QTtpZih0eXBlb2YgQSE9InN0cmluZyImJihyPW5ldyBVUkwoQS5ocmVmKSxuPXIuaHJlZiksdGUuaGFzKG4pKXJldHVybiB0ZS5nZXQobik7e2xldCBvPWF3YWl0IFplKEEsZT8udG9TdHJpbmcoKT8/SXQoKSx0Pz9SQSgpKTtyZXR1cm4gdGUuc2V0KG4sbyksb319YXN5bmMgZnVuY3Rpb24gdnIoQSxlLHQscixuKXtpZighYXdhaXQgWGUoKSl7bGV0IGY9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KGYpLG5ldyBFcnJvcihmKX1sZXQgbz1uPy53ZWJXb3JrZXI/P251bGw7aWYobz09PSExKXtsZXQgZj1hd2FpdCBqcihBLnRvU3RyaW5nKCksbj8ucGlwZWxpbmVCYXNlVXJsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1JBKCkpO3JldHVybiBydChmLGUsdCxyKX1sZXQgaT1vLGc9bj8ucGlwZWxpbmVXb3JrZXJVcmw/P1dyKCksbD10eXBlb2YgZyE9InN0cmluZyImJnR5cGVvZiBnPy5ocmVmPCJ1Ij9nLmhyZWY6Zyx7d29ya2VyUHJveHk6Qyx3b3JrZXI6SX09YXdhaXQgVmUoaSxsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1JBKCkpO2k9STtsZXQgYT1bXTtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oZil7aWYoZi50eXBlPT09dS5CaW5hcnlTdHJlYW0pe2xldCBkPWYuZGF0YS5kYXRhO2EucHVzaChkKX1lbHNlIGlmKGYudHlwZT09PXUuQmluYXJ5RmlsZSl7bGV0IGQ9Zi5kYXRhLmRhdGE7YS5wdXNoKGQpfWVsc2UgaWYoZi50eXBlPT09dS5JbWFnZSl7bGV0IGQ9Zi5kYXRhO2QuZGF0YSE9PW51bGwmJmEucHVzaCguLi5vdChkKSl9ZWxzZSBpZihmLnR5cGU9PT11Lk1lc2gpe2xldCBkPWYuZGF0YTthLnB1c2goLi4uaXQoZCkpfWVsc2UgaWYoZi50eXBlPT09dS5Qb2x5RGF0YSl7bGV0IGQ9Zi5kYXRhO2EucHVzaCguLi5hdChkKSl9fSk7bGV0IGM9bj8ucGlwZWxpbmVCYXNlVXJsPz9JdCgpLEI9dHlwZW9mIGMhPSJzdHJpbmciJiZ0eXBlb2YgYz8uaHJlZjwidSI/Yy5ocmVmOmMsRT1yIT1udWxsP0xBKHIsbnQoYSxuPy5ub0NvcHkpKTpudWxsLFE9YXdhaXQgQy5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCksQixlLHQsRSxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9SQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6US5yZXR1cm5WYWx1ZSxzdGRvdXQ6US5zdGRvdXQsc3RkZXJyOlEuc3RkZXJyLG91dHB1dHM6US5vdXRwdXRzLHdlYldvcmtlcjppfX12YXIgYj12cjt2YXIgX3I9bnVsbDtmdW5jdGlvbiBndCgpe3JldHVybiBfcn12YXIgcmUsenI9YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGl0ay13YXNtL2Rvd25zYW1wbGVAJHtiQX0vZGlzdC9waXBlbGluZXNgO2Z1bmN0aW9uIHRzKEEpe3JlPUF9ZnVuY3Rpb24gTCgpe2lmKHR5cGVvZiByZTwidSIpcmV0dXJuIHJlO2xldCBBPVNBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOnpyfXZhciBuZSxWcj1udWxsO2Z1bmN0aW9uIEJ0KEEpe25lPUF9ZnVuY3Rpb24gUigpe2lmKHR5cGVvZiBuZTwidSIpcmV0dXJuIG5lO2xldCBBPWtBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOlZyfXZhciBWPW51bGw7YXN5bmMgZnVuY3Rpb24gQ3QoKXtsZXQgQT1SKCksZT10eXBlb2YgQSE9InN0cmluZyImJnR5cGVvZiBBPy5ocmVmPCJ1Ij9BLmhyZWY6QTtWPWF3YWl0IGlBKGUpfWZ1bmN0aW9uIElzKEEpe1Y9QX1hc3luYyBmdW5jdGlvbiBPKCl7aWYoViE9PW51bGwpcmV0dXJuIFYudGVybWluYXRlZCYmYXdhaXQgQ3QoKSxWO2xldCBBPWd0KCk7cmV0dXJuIEEhPT1udWxsP0E6KGF3YWl0IEN0KCksVil9YXN5bmMgZnVuY3Rpb24gWnIoQSxlPXtzaHJpbmtGYWN0b3JzOlsyLDJdfSl7bGV0IHQ9W3t0eXBlOnUuSW1hZ2V9XSxyPVt7dHlwZTp1LkltYWdlLGRhdGE6QX1dLG49W107aWYobi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUuc2hyaW5rRmFjdG9ycyl7aWYoZS5zaHJpbmtGYWN0b3JzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignInNocmluay1mYWN0b3JzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1zaHJpbmstZmFjdG9ycyIpLGF3YWl0IFByb21pc2UuYWxsKGUuc2hyaW5rRmFjdG9ycy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmbi5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgZz0iZG93bnNhbXBsZS1iaW4tc2hyaW5rIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBPKCkpO2xldHt3ZWJXb3JrZXI6QyxyZXR1cm5WYWx1ZTpJLHN0ZGVycjphLG91dHB1dHM6Y309YXdhaXQgYihnLG4sdCxyLHtwaXBlbGluZUJhc2VVcmw6TCgpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoSSE9PTAmJmEhPT0iIil0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpDLGRvd25zYW1wbGVkOmNbMF0/LmRhdGF9fXZhciBYcj1acjthc3luYyBmdW5jdGlvbiAkcihBLGU9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgdD1be3R5cGU6dS5JbWFnZX1dLHI9W3t0eXBlOnUuSW1hZ2UsZGF0YTpBfV0sbj1bXTtpZihuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5zaHJpbmtGYWN0b3JzKXtpZihlLnNocmlua0ZhY3RvcnMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCcic2hyaW5rLWZhY3RvcnMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLXNocmluay1mYWN0b3JzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5zaHJpbmtGYWN0b3JzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9aWYoZS5jcm9wUmFkaXVzKXtpZihlLmNyb3BSYWRpdXMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCciY3JvcC1yYWRpdXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLWNyb3AtcmFkaXVzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5jcm9wUmFkaXVzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9bGV0IGc9ImRvd25zYW1wbGUtbGFiZWwtaW1hZ2UiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IE8oKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOkksc3RkZXJyOmEsb3V0cHV0czpjfT1hd2FpdCBiKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpMKCkscGlwZWxpbmVXb3JrZXJVcmw6UigpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihJIT09MCYmYSE9PSIiKXRocm93IG5ldyBFcnJvcihhKTtyZXR1cm57d2ViV29ya2VyOkMsZG93bnNhbXBsZWQ6Y1swXT8uZGF0YX19dmFyIEFuPSRyO2FzeW5jIGZ1bmN0aW9uIGVuKEE9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgZT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX1dLHQ9W10scj1bXTtpZihyLnB1c2goIjAiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdHlwZW9mIEEuc2hyaW5rRmFjdG9yczwidSIpe2lmKEEuc2hyaW5rRmFjdG9ycy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzaHJpbmstZmFjdG9ycyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtyLnB1c2goIi0tc2hyaW5rLWZhY3RvcnMiKSxhd2FpdCBQcm9taXNlLmFsbChBLnNocmlua0ZhY3RvcnMubWFwKGFzeW5jIGM9PntyLnB1c2goYy50b1N0cmluZygpKX0pKX1sZXQgbz0iZG93bnNhbXBsZS1zaWdtYSIsaT1BPy53ZWJXb3JrZXI7aT09PXZvaWQgMCYmKGk9YXdhaXQgTygpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6bCxzdGRlcnI6QyxvdXRwdXRzOkl9PWF3YWl0IGIobyxyLGUsdCx7cGlwZWxpbmVCYXNlVXJsOkwoKSxwaXBlbGluZVdvcmtlclVybDpSKCksd2ViV29ya2VyOmksbm9Db3B5OkE/Lm5vQ29weX0pO2lmKGwhPT0wJiZDIT09IiIpdGhyb3cgbmV3IEVycm9yKEMpO3JldHVybnt3ZWJXb3JrZXI6ZyxzaWdtYTpJWzBdPy5kYXRhfX12YXIgdG49ZW47YXN5bmMgZnVuY3Rpb24gcm4oQSxlPXtzaHJpbmtGYWN0b3JzOlsyLDJdfSl7bGV0IHQ9W3t0eXBlOnUuSW1hZ2V9XSxyPVt7dHlwZTp1LkltYWdlLGRhdGE6QX1dLG49W107aWYobi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUuc2hyaW5rRmFjdG9ycyl7aWYoZS5zaHJpbmtGYWN0b3JzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignInNocmluay1mYWN0b3JzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1zaHJpbmstZmFjdG9ycyIpLGF3YWl0IFByb21pc2UuYWxsKGUuc2hyaW5rRmFjdG9ycy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWlmKGUuY3JvcFJhZGl1cyl7aWYoZS5jcm9wUmFkaXVzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignImNyb3AtcmFkaXVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1jcm9wLXJhZGl1cyIpLGF3YWl0IFByb21pc2UuYWxsKGUuY3JvcFJhZGl1cy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWxldCBnPSJkb3duc2FtcGxlIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBPKCkpO2xldHt3ZWJXb3JrZXI6QyxyZXR1cm5WYWx1ZTpJLHN0ZGVycjphLG91dHB1dHM6Y309YXdhaXQgYihnLG4sdCxyLHtwaXBlbGluZUJhc2VVcmw6TCgpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoSSE9PTAmJmEhPT0iIil0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpDLGRvd25zYW1wbGVkOmNbMF0/LmRhdGF9fXZhciBubj1ybjthc3luYyBmdW5jdGlvbiBvbihBPXtzaXplOlsxLDFdLHNpZ21hOlsxLDFdfSl7bGV0IGU9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9XSx0PVtdLHI9W107aWYoci5wdXNoKCIwIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLHR5cGVvZiBBLnNpemU8InUiKXtpZihBLnNpemUubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcic2l6ZSIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtyLnB1c2goIi0tc2l6ZSIpLGF3YWl0IFByb21pc2UuYWxsKEEuc2l6ZS5tYXAoYXN5bmMgYz0+e3IucHVzaChjLnRvU3RyaW5nKCkpfSkpfWlmKHR5cGVvZiBBLnNpZ21hPCJ1Iil7aWYoQS5zaWdtYS5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzaWdtYSIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtyLnB1c2goIi0tc2lnbWEiKSxhd2FpdCBQcm9taXNlLmFsbChBLnNpZ21hLm1hcChhc3luYyBjPT57ci5wdXNoKGMudG9TdHJpbmcoKSl9KSl9dHlwZW9mIEEubWF4S2VybmVsV2lkdGg8InUiJiZyLnB1c2goIi0tbWF4LWtlcm5lbC13aWR0aCIsQS5tYXhLZXJuZWxXaWR0aC50b1N0cmluZygpKSx0eXBlb2YgQS5tYXhLZXJuZWxFcnJvcjwidSImJnIucHVzaCgiLS1tYXgta2VybmVsLWVycm9yIixBLm1heEtlcm5lbEVycm9yLnRvU3RyaW5nKCkpO2xldCBvPSJnYXVzc2lhbi1rZXJuZWwtcmFkaXVzIixpPUE/LndlYldvcmtlcjtpPT09dm9pZCAwJiYoaT1hd2FpdCBPKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTpsLHN0ZGVycjpDLG91dHB1dHM6SX09YXdhaXQgYihvLHIsZSx0LHtwaXBlbGluZUJhc2VVcmw6TCgpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6aSxub0NvcHk6QT8ubm9Db3B5fSk7aWYobCE9PTAmJkMhPT0iIil0aHJvdyBuZXcgRXJyb3IoQyk7cmV0dXJue3dlYldvcmtlcjpnLHJhZGl1czpJWzBdPy5kYXRhfX12YXIgYW49b247dmFyIGx0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciBJST1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGVJPShBLHQpPT57Zm9yKHZhciBJIGluIHQpSUkoQSxJLHtnZXQ6dFtJXSxlbnVtZXJhYmxlOiEwfSl9O3ZhciB2QT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxnST1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxyST1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IikscEE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGVBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSwkQT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixvST17Y2FuSGFuZGxlOkE9PiRBKEEpJiZBW3ZBXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOnQscG9ydDI6SX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBpQShBLHQpLFtJLFtJXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksbkkoQSl9fSxpST17Y2FuSGFuZGxlOkE9PiRBKEEpJiZlQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCB0O3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/dD17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OnQ9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW3QsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sQXQ9bmV3IE1hcChbWyJwcm94eSIsb0ldLFsidGhyb3ciLGlJXV0pO2Z1bmN0aW9uIENJKEEsdCl7Zm9yKGxldCBJIG9mIEEpaWYodD09PUl8fEk9PT0iKiJ8fEkgaW5zdGFuY2VvZiBSZWdFeHAmJkkudGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpQShBLHQ9Z2xvYmFsVGhpcyxJPVsiKiJdKXt0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGUoZyl7aWYoIWd8fCFnLmRhdGEpcmV0dXJuO2lmKCFDSShJLGcub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7Zy5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOnIsdHlwZTpvLHBhdGg6bn09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sZy5kYXRhKSxhPShnLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKGIpLFE7dHJ5e2xldCBCPW4uc2xpY2UoMCwtMSkucmVkdWNlKChmLHMpPT5mW3NdLEEpLGk9bi5yZWR1Y2UoKGYscyk9PmZbc10sQSk7c3dpdGNoKG8pe2Nhc2UiR0VUIjpRPWk7YnJlYWs7Y2FzZSJTRVQiOkJbbi5zbGljZSgtMSlbMF1dPWIoZy5kYXRhLnZhbHVlKSxRPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOlE9aS5hcHBseShCLGEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IGkoLi4uYSk7UT1hSShmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6c309bmV3IE1lc3NhZ2VDaGFubmVsO2lBKEEscyksUT1GQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpRPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goQil7UT17dmFsdWU6QixbZUFdOjB9fVByb21pc2UucmVzb2x2ZShRKS5jYXRjaChCPT4oe3ZhbHVlOkIsW2VBXTowfSkpLnRoZW4oQj0+e2xldFtpLGZdPW9BKEIpO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZiksbz09PSJSRUxFQVNFIiYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZSksdHQodCkscEEgaW4gQSYmdHlwZW9mIEFbcEFdPT0iZnVuY3Rpb24iJiZBW3BBXSgpKX0pLmNhdGNoKEI9PntsZXRbaSxmXT1vQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2VBXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse2lkOnJ9KSxmKX0pfSksdC5zdGFydCYmdC5zdGFydCgpfWZ1bmN0aW9uIEJJKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIHR0KEEpe0JJKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gbkkoQSx0KXtyZXR1cm4gU0EoQSxbXSx0KX1mdW5jdGlvbiBJQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gSXQoQSl7cmV0dXJuIHEoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57dHQoQSl9KX12YXIgZ0E9bmV3IFdlYWtNYXAsckE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IHQ9KGdBLmdldChBKXx8MCktMTtnQS5zZXQoQSx0KSx0PT09MCYmSXQoQSl9KTtmdW5jdGlvbiBzSShBLHQpe2xldCBJPShnQS5nZXQodCl8fDApKzE7Z0Euc2V0KHQsSSksckEmJnJBLnJlZ2lzdGVyKEEsdCxBKX1mdW5jdGlvbiBRSShBKXtyQSYmckEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBTQShBLHQ9W10sST1mdW5jdGlvbigpe30pe2xldCBlPSExLGc9bmV3IFByb3h5KEkse2dldChyLG8pe2lmKElBKGUpLG89PT1ySSlyZXR1cm4oKT0+e1FJKGcpLEl0KEEpLGU9ITB9O2lmKG89PT0idGhlbiIpe2lmKHQubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+Z307bGV0IG49cShBLHt0eXBlOiJHRVQiLHBhdGg6dC5tYXAoYT0+YS50b1N0cmluZygpKX0pLnRoZW4oYik7cmV0dXJuIG4udGhlbi5iaW5kKG4pfXJldHVybiBTQShBLFsuLi50LG9dKX0sc2V0KHIsbyxuKXtJQShlKTtsZXRbYSxRXT1vQShuKTtyZXR1cm4gcShBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnQsb10ubWFwKEI9PkIudG9TdHJpbmcoKSksdmFsdWU6YX0sUSkudGhlbihiKX0sYXBwbHkocixvLG4pe0lBKGUpO2xldCBhPXRbdC5sZW5ndGgtMV07aWYoYT09PWdJKXJldHVybiBxKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oYik7aWYoYT09PSJiaW5kIilyZXR1cm4gU0EoQSx0LnNsaWNlKDAsLTEpKTtsZXRbUSxCXT1fQShuKTtyZXR1cm4gcShBLHt0eXBlOiJBUFBMWSIscGF0aDp0Lm1hcChpPT5pLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpRfSxCKS50aGVuKGIpfSxjb25zdHJ1Y3QocixvKXtJQShlKTtsZXRbbixhXT1fQShvKTtyZXR1cm4gcShBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6dC5tYXAoUT0+US50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6bn0sYSkudGhlbihiKX19KTtyZXR1cm4gc0koZyxBKSxnfWZ1bmN0aW9uIEVJKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIF9BKEEpe2xldCB0PUEubWFwKG9BKTtyZXR1cm5bdC5tYXAoST0+SVswXSksRUkodC5tYXAoST0+SVsxXSkpXX12YXIgZXQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRkEoQSx0KXtyZXR1cm4gZXQuc2V0KEEsdCksQX1mdW5jdGlvbiBhSShBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbdkFdOiEwfSl9ZnVuY3Rpb24gb0EoQSl7Zm9yKGxldFt0LEldb2YgQXQpaWYoSS5jYW5IYW5kbGUoQSkpe2xldFtlLGddPUkuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTp0LHZhbHVlOmV9LGddfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxldC5nZXQoQSl8fFtdXX1mdW5jdGlvbiBiKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEF0LmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gcShBLHQsSSl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntsZXQgZz1jSSgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihvKXshby5kYXRhfHwhby5kYXRhLmlkfHxvLmRhdGEuaWQhPT1nfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxlKG8uZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6Z30sdCksSSl9KX1mdW5jdGlvbiBjSSgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gVyhBLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOmZJfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpVQX09T2JqZWN0LEJBPShBPT50PT57bGV0IEk9ZkkuY2FsbCh0KTtyZXR1cm4gQVtJXXx8KEFbSV09SS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLFU9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLHQ9PkJBKHQpPT09QSksbkE9QT0+dD0+dHlwZW9mIHQ9PT1BLHtpc0FycmF5Okt9PUFycmF5LFo9bkEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGxJKEEpe3JldHVybiBBIT09bnVsbCYmIVooQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWihBLmNvbnN0cnVjdG9yKSYmRihBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgaXQ9VSgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBESShBKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOnQ9QSYmQS5idWZmZXImJml0KEEuYnVmZmVyKSx0fXZhciB1ST1uQSgic3RyaW5nIiksRj1uQSgiZnVuY3Rpb24iKSxDdD1uQSgibnVtYmVyIiksc0E9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixoST1BPT5BPT09ITB8fEE9PT0hMSxDQT1BPT57aWYoQkEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1VQShBKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxkST1VKCJEYXRlIikseUk9VSgiRmlsZSIpLHdJPVUoIkJsb2IiKSxtST1VKCJGaWxlTGlzdCIpLHBJPUE9PnNBKEEpJiZGKEEucGlwZSksU0k9QT0+e2xldCB0O3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fEYoQS5hcHBlbmQpJiYoKHQ9QkEoQSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZGKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LEZJPVUoIlVSTFNlYXJjaFBhcmFtcyIpLFJJPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBWKEEsdCx7YWxsT3duS2V5czpJPSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IGUsZztpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSksSyhBKSlmb3IoZT0wLGc9QS5sZW5ndGg7ZTxnO2UrKyl0LmNhbGwobnVsbCxBW2VdLGUsQSk7ZWxzZXtsZXQgcj1JP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG89ci5sZW5ndGgsbjtmb3IoZT0wO2U8bztlKyspbj1yW2VdLHQuY2FsbChudWxsLEFbbl0sbixBKX19ZnVuY3Rpb24gQnQoQSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgST1PYmplY3Qua2V5cyhBKSxlPUkubGVuZ3RoLGc7Zm9yKDtlLS0gPjA7KWlmKGc9SVtlXSx0PT09Zy50b0xvd2VyQ2FzZSgpKXJldHVybiBnO3JldHVybiBudWxsfXZhciBudD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLHN0PUE9PiFaKEEpJiZBIT09bnQ7ZnVuY3Rpb24gTkEoKXtsZXR7Y2FzZWxlc3M6QX09c3QodGhpcykmJnRoaXN8fHt9LHQ9e30sST0oZSxnKT0+e2xldCByPUEmJkJ0KHQsZyl8fGc7Q0EodFtyXSkmJkNBKGUpP3Rbcl09TkEodFtyXSxlKTpDQShlKT90W3JdPU5BKHt9LGUpOksoZSk/dFtyXT1lLnNsaWNlKCk6dFtyXT1lfTtmb3IobGV0IGU9MCxnPWFyZ3VtZW50cy5sZW5ndGg7ZTxnO2UrKylhcmd1bWVudHNbZV0mJlYoYXJndW1lbnRzW2VdLEkpO3JldHVybiB0fXZhciBOST0oQSx0LEkse2FsbE93bktleXM6ZX09e30pPT4oVih0LChnLHIpPT57SSYmRihnKT9BW3JdPVcoZyxJKTpBW3JdPWd9LHthbGxPd25LZXlzOmV9KSxBKSxVST1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLEdJPShBLHQsSSxlKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsZSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTp0LnByb3RvdHlwZX0pLEkmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsSSl9LGtJPShBLHQsSSxlKT0+e2xldCBnLHIsbyxuPXt9O2lmKHQ9dHx8e30sQT09bnVsbClyZXR1cm4gdDtkb3tmb3IoZz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxyPWcubGVuZ3RoO3ItLSA+MDspbz1nW3JdLCghZXx8ZShvLEEsdCkpJiYhbltvXSYmKHRbb109QVtvXSxuW29dPSEwKTtBPUkhPT0hMSYmVUEoQSl9d2hpbGUoQSYmKCFJfHxJKEEsdCkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LExJPShBLHQsSSk9PntBPVN0cmluZyhBKSwoST09PXZvaWQgMHx8ST5BLmxlbmd0aCkmJihJPUEubGVuZ3RoKSxJLT10Lmxlbmd0aDtsZXQgZT1BLmluZGV4T2YodCxJKTtyZXR1cm4gZSE9PS0xJiZlPT09SX0sSkk9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKEsoQSkpcmV0dXJuIEE7bGV0IHQ9QS5sZW5ndGg7aWYoIUN0KHQpKXJldHVybiBudWxsO2xldCBJPW5ldyBBcnJheSh0KTtmb3IoO3QtLSA+MDspSVt0XT1BW3RdO3JldHVybiBJfSxIST0oQT0+dD0+QSYmdCBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmVUEoVWludDhBcnJheSkpLFlJPShBLHQpPT57bGV0IGU9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxnO2Zvcig7KGc9ZS5uZXh0KCkpJiYhZy5kb25lOyl7bGV0IHI9Zy52YWx1ZTt0LmNhbGwoQSxyWzBdLHJbMV0pfX0sYkk9KEEsdCk9PntsZXQgSSxlPVtdO2Zvcig7KEk9QS5leGVjKHQpKSE9PW51bGw7KWUucHVzaChJKTtyZXR1cm4gZX0sTUk9VSgiSFRNTEZvcm1FbGVtZW50IikscUk9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24oSSxlLGcpe3JldHVybiBlLnRvVXBwZXJDYXNlKCkrZ30pLHJ0PSgoe2hhc093blByb3BlcnR5OkF9KT0+KHQsSSk9PkEuY2FsbCh0LEkpKShPYmplY3QucHJvdG90eXBlKSxLST1VKCJSZWdFeHAiKSxRdD0oQSx0KT0+e2xldCBJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLGU9e307VihJLChnLHIpPT57bGV0IG87KG89dChnLHIsQSkpIT09ITEmJihlW3JdPW98fGcpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxlKX0sT0k9QT0+e1F0KEEsKHQsSSk9PntpZihGKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoSSkhPT0tMSlyZXR1cm4hMTtsZXQgZT1BW0ldO2lmKEYoZSkpe2lmKHQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdCl7dC53cml0YWJsZT0hMTtyZXR1cm59dC5zZXR8fCh0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrSSsiXCciKX0pfX0pfSxUST0oQSx0KT0+e2xldCBJPXt9LGU9Zz0+e2cuZm9yRWFjaChyPT57SVtyXT0hMH0pfTtyZXR1cm4gSyhBKT9lKEEpOmUoU3RyaW5nKEEpLnNwbGl0KHQpKSxJfSxQST0oKT0+e30seEk9KEEsdCk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOnQpLFJBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsb3Q9IjAxMjM0NTY3ODkiLEV0PXtESUdJVDpvdCxBTFBIQTpSQSxBTFBIQV9ESUdJVDpSQStSQS50b1VwcGVyQ2FzZSgpK290fSxqST0oQT0xNix0PUV0LkFMUEhBX0RJR0lUKT0+e2xldCBJPSIiLHtsZW5ndGg6ZX09dDtmb3IoO0EtLTspSSs9dFtNYXRoLnJhbmRvbSgpKmV8MF07cmV0dXJuIEl9O2Z1bmN0aW9uIFdJKEEpe3JldHVybiEhKEEmJkYoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBaST1BPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxJPShlLGcpPT57aWYoc0EoZSkpe2lmKHQuaW5kZXhPZihlKT49MClyZXR1cm47aWYoISgidG9KU09OImluIGUpKXt0W2ddPWU7bGV0IHI9SyhlKT9bXTp7fTtyZXR1cm4gVihlLChvLG4pPT57bGV0IGE9SShvLGcrMSk7IVooYSkmJihyW25dPWEpfSksdFtnXT12b2lkIDAscn19cmV0dXJuIGV9O3JldHVybiBJKEEsMCl9LFZJPVUoIkFzeW5jRnVuY3Rpb24iKSxYST1BPT5BJiYoc0EoQSl8fEYoQSkpJiZGKEEudGhlbikmJkYoQS5jYXRjaCksQz17aXNBcnJheTpLLGlzQXJyYXlCdWZmZXI6aXQsaXNCdWZmZXI6bEksaXNGb3JtRGF0YTpTSSxpc0FycmF5QnVmZmVyVmlldzpESSxpc1N0cmluZzp1SSxpc051bWJlcjpDdCxpc0Jvb2xlYW46aEksaXNPYmplY3Q6c0EsaXNQbGFpbk9iamVjdDpDQSxpc1VuZGVmaW5lZDpaLGlzRGF0ZTpkSSxpc0ZpbGU6eUksaXNCbG9iOndJLGlzUmVnRXhwOktJLGlzRnVuY3Rpb246Rixpc1N0cmVhbTpwSSxpc1VSTFNlYXJjaFBhcmFtczpGSSxpc1R5cGVkQXJyYXk6SEksaXNGaWxlTGlzdDptSSxmb3JFYWNoOlYsbWVyZ2U6TkEsZXh0ZW5kOk5JLHRyaW06Ukksc3RyaXBCT006VUksaW5oZXJpdHM6R0ksdG9GbGF0T2JqZWN0OmtJLGtpbmRPZjpCQSxraW5kT2ZUZXN0OlUsZW5kc1dpdGg6TEksdG9BcnJheTpKSSxmb3JFYWNoRW50cnk6WUksbWF0Y2hBbGw6YkksaXNIVE1MRm9ybTpNSSxoYXNPd25Qcm9wZXJ0eTpydCxoYXNPd25Qcm9wOnJ0LHJlZHVjZURlc2NyaXB0b3JzOlF0LGZyZWV6ZU1ldGhvZHM6T0ksdG9PYmplY3RTZXQ6VEksdG9DYW1lbENhc2U6cUksbm9vcDpQSSx0b0Zpbml0ZU51bWJlcjp4SSxmaW5kS2V5OkJ0LGdsb2JhbDpudCxpc0NvbnRleHREZWZpbmVkOnN0LEFMUEhBQkVUOkV0LGdlbmVyYXRlU3RyaW5nOmpJLGlzU3BlY0NvbXBsaWFudEZvcm06V0ksdG9KU09OT2JqZWN0OlpJLGlzQXN5bmNGbjpWSSxpc1RoZW5hYmxlOlhJfTtmdW5jdGlvbiBPKEEsdCxJLGUsZyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIix0JiYodGhpcy5jb2RlPXQpLEkmJih0aGlzLmNvbmZpZz1JKSxlJiYodGhpcy5yZXF1ZXN0PWUpLGcmJih0aGlzLnJlc3BvbnNlPWcpfUMuaW5oZXJpdHMoTyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGF0PU8ucHJvdG90eXBlLGN0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e2N0W0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sY3QpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtPLmZyb209KEEsdCxJLGUsZyxyKT0+e2xldCBvPU9iamVjdC5jcmVhdGUoYXQpO3JldHVybiBDLnRvRmxhdE9iamVjdChBLG8sZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1FcnJvci5wcm90b3R5cGV9LG49Pm4hPT0iaXNBeGlvc0Vycm9yIiksTy5jYWxsKG8sQS5tZXNzYWdlLHQsSSxlLGcpLG8uY2F1c2U9QSxvLm5hbWU9QS5uYW1lLHImJk9iamVjdC5hc3NpZ24obyxyKSxvfTt2YXIgbD1PO3ZhciBRQT1udWxsO2Z1bmN0aW9uIEdBKEEpe3JldHVybiBDLmlzUGxhaW5PYmplY3QoQSl8fEMuaXNBcnJheShBKX1mdW5jdGlvbiBsdChBKXtyZXR1cm4gQy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBmdChBLHQsSSl7cmV0dXJuIEE/QS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKGcscil7cmV0dXJuIGc9bHQoZyksIUkmJnI/IlsiK2crIl0iOmd9KS5qb2luKEk/Ii4iOiIiKTp0fWZ1bmN0aW9uIHpJKEEpe3JldHVybiBDLmlzQXJyYXkoQSkmJiFBLnNvbWUoR0EpfXZhciBfST1DLnRvRmxhdE9iamVjdChDLHt9LG51bGwsZnVuY3Rpb24odCl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KHQpfSk7ZnVuY3Rpb24gdkkoQSx0LEkpe2lmKCFDLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9dHx8bmV3KFFBfHxGb3JtRGF0YSksST1DLnRvRmxhdE9iamVjdChJLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyx1KXtyZXR1cm4hQy5pc1VuZGVmaW5lZCh1W2NdKX0pO2xldCBlPUkubWV0YVRva2VucyxnPUkudmlzaXRvcnx8QixyPUkuZG90cyxvPUkuaW5kZXhlcyxhPShJLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkMuaXNTcGVjQ29tcGxpYW50Rm9ybSh0KTtpZighQy5pc0Z1bmN0aW9uKGcpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gUShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihDLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFhJiZDLmlzQmxvYihFKSl0aHJvdyBuZXcgbCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gQy5pc0FycmF5QnVmZmVyKEUpfHxDLmlzVHlwZWRBcnJheShFKT9hJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gQihFLGMsdSl7bGV0IHk9RTtpZihFJiYhdSYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihDLmVuZHNXaXRoKGMsInt9IikpYz1lP2M6Yy5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoQy5pc0FycmF5KEUpJiZ6SShFKXx8KEMuaXNGaWxlTGlzdChFKXx8Qy5lbmRzV2l0aChjLCJbXSIpKSYmKHk9Qy50b0FycmF5KEUpKSlyZXR1cm4gYz1sdChjKSx5LmZvckVhY2goZnVuY3Rpb24oTix0SSl7IShDLmlzVW5kZWZpbmVkKE4pfHxOPT09bnVsbCkmJnQuYXBwZW5kKG89PT0hMD9mdChbY10sdEkscik6bz09PW51bGw/YzpjKyJbXSIsUShOKSl9KSwhMX1yZXR1cm4gR0EoRSk/ITA6KHQuYXBwZW5kKGZ0KHUsYyxyKSxRKEUpKSwhMSl9bGV0IGk9W10sZj1PYmplY3QuYXNzaWduKF9JLHtkZWZhdWx0VmlzaXRvcjpCLGNvbnZlcnRWYWx1ZTpRLGlzVmlzaXRhYmxlOkdBfSk7ZnVuY3Rpb24gcyhFLGMpe2lmKCFDLmlzVW5kZWZpbmVkKEUpKXtpZihpLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO2kucHVzaChFKSxDLmZvckVhY2goRSxmdW5jdGlvbih5LFIpeyghKEMuaXNVbmRlZmluZWQoeSl8fHk9PT1udWxsKSYmZy5jYWxsKHQseSxDLmlzU3RyaW5nKFIpP1IudHJpbSgpOlIsYyxmKSk9PT0hMCYmcyh5LGM/Yy5jb25jYXQoUik6W1JdKX0pLGkucG9wKCl9fWlmKCFDLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gcyhBKSx0fXZhciBKPXZJO2Z1bmN0aW9uIER0KEEpe2xldCB0PXsiISI6IiUyNTIxIiwiXCciOiIlMjUyNyIsIigiOiIlMjUyOCIsIikiOiIlMjUyOSIsIn4iOiIlMjU3RSIsIiUyNTIwIjoiKyIsIiUyNTAwIjoiXFwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIVwnKCl+XXwlMjUyMHwlMjUwMC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gdXQoQSx0KXt0aGlzLl9wYWlycz1bXSxBJiZKKEEsdGhpcyx0KX12YXIgaHQ9dXQucHJvdG90eXBlO2h0LmFwcGVuZD1mdW5jdGlvbih0LEkpe3RoaXMuX3BhaXJzLnB1c2goW3QsSV0pfTtodC50b1N0cmluZz1mdW5jdGlvbih0KXtsZXQgST10P2Z1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcyxlLER0KX06RHQ7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihnKXtyZXR1cm4gSShnWzBdKSsiPSIrSShnWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIEVBPXV0O2Z1bmN0aW9uICRJKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTI1M0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjUyNC9nLCIkIikucmVwbGFjZSgvJTI1MkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjUyMC9nLCIrIikucmVwbGFjZSgvJTI1NUIvZ2ksIlsiKS5yZXBsYWNlKC8lMjU1RC9naSwiXSIpfWZ1bmN0aW9uIFgoQSx0LEkpe2lmKCF0KXJldHVybiBBO2xldCBlPUkmJkkuZW5jb2RlfHwkSSxnPUkmJkkuc2VyaWFsaXplLHI7aWYoZz9yPWcodCxJKTpyPUMuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyBFQSh0LEkpLnRvU3RyaW5nKGUpLHIpe2xldCBvPUEuaW5kZXhPZigiJTIzIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK3J9cmV0dXJuIEF9dmFyIGtBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UodCxJLGUpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDp0LHJlamVjdGVkOkksc3luY2hyb25vdXM6ZT9lLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ZT9lLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QodCl7dGhpcy5oYW5kbGVyc1t0XSYmKHRoaXMuaGFuZGxlcnNbdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh0KXtDLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihlKXtlIT09bnVsbCYmdChlKX0pfX0sTEE9a0E7dmFyIGFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgZHQ9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOkVBO3ZhciB5dD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIHd0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIG10PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOmR0LEZvcm1EYXRhOnl0LEJsb2I6d3R9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgSkE9e307ZUkoSkEse2hhc0Jyb3dzZXJFbnY6KCk9PnB0LGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+QWUsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT50ZX0pO3ZhciBwdD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixBZT0oQT0+cHQmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSx0ZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHc9ey4uLkpBLC4uLm10fTtmdW5jdGlvbiBIQShBLHQpe3JldHVybiBKKEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihJLGUsZyxyKXtyZXR1cm4gdy5pc05vZGUmJkMuaXNCdWZmZXIoSSk/KHRoaXMuYXBwZW5kKGUsSS50b1N0cmluZygiYmFzZTY0IikpLCExKTpyLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHQpKX1mdW5jdGlvbiBJZShBKXtyZXR1cm4gQy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csQSkubWFwKHQ9PnRbMF09PT0iW10iPyIiOnRbMV18fHRbMF0pfWZ1bmN0aW9uIGVlKEEpe2xldCB0PXt9LEk9T2JqZWN0LmtleXMoQSksZSxnPUkubGVuZ3RoLHI7Zm9yKGU9MDtlPGc7ZSsrKXI9SVtlXSx0W3JdPUFbcl07cmV0dXJuIHR9ZnVuY3Rpb24gZ2UoQSl7ZnVuY3Rpb24gdChJLGUsZyxyKXtsZXQgbz1JW3IrK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBuPU51bWJlci5pc0Zpbml0ZSgrbyksYT1yPj1JLmxlbmd0aDtyZXR1cm4gbz0hbyYmQy5pc0FycmF5KGcpP2cubGVuZ3RoOm8sYT8oQy5oYXNPd25Qcm9wKGcsbyk/Z1tvXT1bZ1tvXSxlXTpnW29dPWUsIW4pOigoIWdbb118fCFDLmlzT2JqZWN0KGdbb10pKSYmKGdbb109W10pLHQoSSxlLGdbb10scikmJkMuaXNBcnJheShnW29dKSYmKGdbb109ZWUoZ1tvXSkpLCFuKX1pZihDLmlzRm9ybURhdGEoQSkmJkMuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgST17fTtyZXR1cm4gQy5mb3JFYWNoRW50cnkoQSwoZSxnKT0+e3QoSWUoZSksZyxJLDApfSksSX1yZXR1cm4gbnVsbH12YXIgY0E9Z2U7ZnVuY3Rpb24gcmUoQSx0LEkpe2lmKEMuaXNTdHJpbmcoQSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShBKSxDLnRyaW0oQSl9Y2F0Y2goZSl7aWYoZS5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBlfXJldHVybihJfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIFlBPXt0cmFuc2l0aW9uYWw6YUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbih0LEkpe2xldCBlPUkuZ2V0Q29udGVudFR5cGUoKXx8IiIsZz1lLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxyPUMuaXNPYmplY3QodCk7aWYociYmQy5pc0hUTUxGb3JtKHQpJiYodD1uZXcgRm9ybURhdGEodCkpLEMuaXNGb3JtRGF0YSh0KSlyZXR1cm4gZz9KU09OLnN0cmluZ2lmeShjQSh0KSk6dDtpZihDLmlzQXJyYXlCdWZmZXIodCl8fEMuaXNCdWZmZXIodCl8fEMuaXNTdHJlYW0odCl8fEMuaXNGaWxlKHQpfHxDLmlzQmxvYih0KSlyZXR1cm4gdDtpZihDLmlzQXJyYXlCdWZmZXJWaWV3KHQpKXJldHVybiB0LmJ1ZmZlcjtpZihDLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLHQudG9TdHJpbmcoKTtsZXQgbjtpZihyKXtpZihlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBIQSh0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKG49Qy5pc0ZpbGVMaXN0KHQpKXx8ZS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBhPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gSihuP3siZmlsZXNbXSI6dH06dCxhJiZuZXcgYSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIHJ8fGc/KEkuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxyZSh0KSk6dH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbih0KXtsZXQgST10aGlzLnRyYW5zaXRpb25hbHx8WUEudHJhbnNpdGlvbmFsLGU9SSYmSS5mb3JjZWRKU09OUGFyc2luZyxnPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKHQmJkMuaXNTdHJpbmcodCkmJihlJiYhdGhpcy5yZXNwb25zZVR5cGV8fGcpKXtsZXQgbz0hKEkmJkkuc2lsZW50SlNPTlBhcnNpbmcpJiZnO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChuKXtpZihvKXRocm93IG4ubmFtZT09PSJTeW50YXhFcnJvciI/bC5mcm9tKG4sbC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpufX1yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Qy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntZQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFQ9WUE7dmFyIG9lPUMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksU3Q9QT0+e2xldCB0PXt9LEksZSxnO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2c9by5pbmRleE9mKCI6IiksST1vLnN1YnN0cmluZygwLGcpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGU9by5zdWJzdHJpbmcoZysxKS50cmltKCksISghSXx8dFtJXSYmb2VbSV0pJiYoST09PSJzZXQtY29va2llIj90W0ldP3RbSV0ucHVzaChlKTp0W0ldPVtlXTp0W0ldPXRbSV0/dFtJXSsiLCAiK2U6ZSl9KSx0fTt2YXIgRnQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiB6KEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOkMuaXNBcnJheShBKT9BLm1hcChmQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIGllKEEpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCksST0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLGU7Zm9yKDtlPUkuZXhlYyhBKTspdFtlWzFdXT1lWzJdO3JldHVybiB0fXZhciBDZT1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBiQShBLHQsSSxlLGcpe2lmKEMuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMsdCxJKTtpZihnJiYodD1JKSwhIUMuaXNTdHJpbmcodCkpe2lmKEMuaXNTdHJpbmcoZSkpcmV0dXJuIHQuaW5kZXhPZihlKSE9PS0xO2lmKEMuaXNSZWdFeHAoZSkpcmV0dXJuIGUudGVzdCh0KX19ZnVuY3Rpb24gQmUoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCh0LEksZSk9PkkudG9VcHBlckNhc2UoKStlKX1mdW5jdGlvbiBuZShBLHQpe2xldCBJPUMudG9DYW1lbENhc2UoIiAiK3QpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChlPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsZStJLHt2YWx1ZTpmdW5jdGlvbihnLHIsbyl7cmV0dXJuIHRoaXNbZV0uY2FsbCh0aGlzLHQsZyxyLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3QmJnRoaXMuc2V0KHQpfXNldCh0LEksZSl7bGV0IGc9dGhpcztmdW5jdGlvbiByKG4sYSxRKXtsZXQgQj16KGEpO2lmKCFCKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgaT1DLmZpbmRLZXkoZyxCKTsoIWl8fGdbaV09PT12b2lkIDB8fFE9PT0hMHx8UT09PXZvaWQgMCYmZ1tpXSE9PSExKSYmKGdbaXx8YV09ZkEobikpfWxldCBvPShuLGEpPT5DLmZvckVhY2gobiwoUSxCKT0+cihRLEIsYSkpO3JldHVybiBDLmlzUGxhaW5PYmplY3QodCl8fHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP28odCxJKTpDLmlzU3RyaW5nKHQpJiYodD10LnRyaW0oKSkmJiFDZSh0KT9vKFN0KHQpLEkpOnQhPW51bGwmJnIoSSx0LGUpLHRoaXN9Z2V0KHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO2lmKGUpe2xldCBnPXRoaXNbZV07aWYoIUkpcmV0dXJuIGc7aWYoST09PSEwKXJldHVybiBpZShnKTtpZihDLmlzRnVuY3Rpb24oSSkpcmV0dXJuIEkuY2FsbCh0aGlzLGcsZSk7aWYoQy5pc1JlZ0V4cChJKSlyZXR1cm4gSS5leGVjKGcpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXModCxJKXtpZih0PXoodCksdCl7bGV0IGU9Qy5maW5kS2V5KHRoaXMsdCk7cmV0dXJuISEoZSYmdGhpc1tlXSE9PXZvaWQgMCYmKCFJfHxiQSh0aGlzLHRoaXNbZV0sZSxJKSkpfXJldHVybiExfWRlbGV0ZSh0LEkpe2xldCBlPXRoaXMsZz0hMTtmdW5jdGlvbiByKG8pe2lmKG89eihvKSxvKXtsZXQgbj1DLmZpbmRLZXkoZSxvKTtuJiYoIUl8fGJBKGUsZVtuXSxuLEkpKSYmKGRlbGV0ZSBlW25dLGc9ITApfX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLGd9Y2xlYXIodCl7bGV0IEk9T2JqZWN0LmtleXModGhpcyksZT1JLmxlbmd0aCxnPSExO2Zvcig7ZS0tOyl7bGV0IHI9SVtlXTsoIXR8fGJBKHRoaXMsdGhpc1tyXSxyLHQsITApKSYmKGRlbGV0ZSB0aGlzW3JdLGc9ITApfXJldHVybiBnfW5vcm1hbGl6ZSh0KXtsZXQgST10aGlzLGU9e307cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChnLHIpPT57bGV0IG89Qy5maW5kS2V5KGUscik7aWYobyl7SVtvXT1mQShnKSxkZWxldGUgSVtyXTtyZXR1cm59bGV0IG49dD9CZShyKTpTdHJpbmcocikudHJpbSgpO24hPT1yJiZkZWxldGUgSVtyXSxJW25dPWZBKGcpLGVbbl09ITB9KSx0aGlzfWNvbmNhdCguLi50KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi50KX10b0pTT04odCl7bGV0IEk9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gQy5mb3JFYWNoKHRoaXMsKGUsZyk9PntlIT1udWxsJiZlIT09ITEmJihJW2ddPXQmJkMuaXNBcnJheShlKT9lLmpvaW4oIiwgIik6ZSl9KSxJfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFt0LEldKT0+dCsiOiAiK0kpLmpvaW4oYCUwQWApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzP3Q6bmV3IHRoaXModCl9c3RhdGljIGNvbmNhdCh0LC4uLkkpe2xldCBlPW5ldyB0aGlzKHQpO3JldHVybiBJLmZvckVhY2goZz0+ZS5zZXQoZykpLGV9c3RhdGljIGFjY2Vzc29yKHQpe2xldCBlPSh0aGlzW0Z0XT10aGlzW0Z0XT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLGc9dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gcihvKXtsZXQgbj16KG8pO2Vbbl18fChuZShnLG8pLGVbbl09ITApfXJldHVybiBDLmlzQXJyYXkodCk/dC5mb3JFYWNoKHIpOnIodCksdGhpc319O1AuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO0MucmVkdWNlRGVzY3JpcHRvcnMoUC5wcm90b3R5cGUsKHt2YWx1ZTpBfSx0KT0+e2xldCBJPXRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KGUpe3RoaXNbSV09ZX19fSk7Qy5mcmVlemVNZXRob2RzKFApO3ZhciBtPVA7ZnVuY3Rpb24gXyhBLHQpe2xldCBJPXRoaXN8fFQsZT10fHxJLGc9bS5mcm9tKGUuaGVhZGVycykscj1lLmRhdGE7cmV0dXJuIEMuZm9yRWFjaChBLGZ1bmN0aW9uKG4pe3I9bi5jYWxsKEkscixnLm5vcm1hbGl6ZSgpLHQ/dC5zdGF0dXM6dm9pZCAwKX0pLGcubm9ybWFsaXplKCkscn1mdW5jdGlvbiB2KEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gUnQoQSx0LEkpe2wuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsbC5FUlJfQ0FOQ0VMRUQsdCxJKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifUMuaW5oZXJpdHMoUnQsbCx7X19DQU5DRUxfXzohMH0pO3ZhciBIPVJ0O2Z1bmN0aW9uIE1BKEEsdCxJKXtsZXQgZT1JLmNvbmZpZy52YWxpZGF0ZVN0YXR1czshSS5zdGF0dXN8fCFlfHxlKEkuc3RhdHVzKT9BKEkpOnQobmV3IGwoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIitJLnN0YXR1cyxbbC5FUlJfQkFEX1JFUVVFU1QsbC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKEkuc3RhdHVzLzEwMCktNF0sSS5jb25maWcsSS5yZXF1ZXN0LEkpKX12YXIgTnQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsdCxJLGUsZyxyKXtsZXQgbz1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpXTtDLmlzTnVtYmVyKEkpJiZvLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShJKS50b0dNVFN0cmluZygpKSxDLmlzU3RyaW5nKGUpJiZvLnB1c2goInBhdGg9IitlKSxDLmlzU3RyaW5nKGcpJiZvLnB1c2goImRvbWFpbj0iK2cpLHI9PT0hMCYmby5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9by5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBxQShBKXtyZXR1cm4vXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdChBKX1mdW5jdGlvbiBLQShBLHQpe3JldHVybiB0P0EucmVwbGFjZSgvXFwvP1xcLyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXFwvKy8sIiIpOkF9ZnVuY3Rpb24gJChBLHQpe3JldHVybiBBJiYhcUEodCk/S0EoQSx0KTp0fXZhciBVdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksST1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksZTtmdW5jdGlvbiBnKHIpe2xldCBvPXI7cmV0dXJuIHQmJihJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz1JLmhyZWYpLEkuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjpJLmhyZWYscHJvdG9jb2w6SS5wcm90b2NvbD9JLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpJLmhvc3Qsc2VhcmNoOkkuc2VhcmNoP0kuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOkkuaGFzaD9JLmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOkkuaG9zdG5hbWUscG9ydDpJLnBvcnQscGF0aG5hbWU6SS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/SS5wYXRobmFtZToiLyIrSS5wYXRobmFtZX19cmV0dXJuIGU9Zyh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IG49Qy5pc1N0cmluZyhvKT9nKG8pOm87cmV0dXJuIG4ucHJvdG9jb2w9PT1lLnByb3RvY29sJiZuLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIE9BKEEpe2xldCB0PS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiB0JiZ0WzFdfHwiIn1mdW5jdGlvbiBzZShBLHQpe0E9QXx8MTA7bGV0IEk9bmV3IEFycmF5KEEpLGU9bmV3IEFycmF5KEEpLGc9MCxyPTAsbztyZXR1cm4gdD10IT09dm9pZCAwP3Q6MWUzLGZ1bmN0aW9uKGEpe2xldCBRPURhdGUubm93KCksQj1lW3JdO298fChvPVEpLElbZ109YSxlW2ddPVE7bGV0IGk9cixmPTA7Zm9yKDtpIT09ZzspZis9SVtpKytdLGk9aSVBO2lmKGc9KGcrMSklQSxnPT09ciYmKHI9KHIrMSklQSksUS1vPHQpcmV0dXJuO2xldCBzPUImJlEtQjtyZXR1cm4gcz9NYXRoLnJvdW5kKGYqMWUzL3MpOnZvaWQgMH19dmFyIEd0PXNlO2Z1bmN0aW9uIGt0KEEsdCl7bGV0IEk9MCxlPUd0KDUwLDI1MCk7cmV0dXJuIGc9PntsZXQgcj1nLmxvYWRlZCxvPWcubGVuZ3RoQ29tcHV0YWJsZT9nLnRvdGFsOnZvaWQgMCxuPXItSSxhPWUobiksUT1yPD1vO0k9cjtsZXQgQj17bG9hZGVkOnIsdG90YWw6byxwcm9ncmVzczpvP3Ivbzp2b2lkIDAsYnl0ZXM6bixyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmbyYmUT8oby1yKS9hOnZvaWQgMCxldmVudDpnfTtCW3Q/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShCKX19dmFyIFFlPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsTHQ9UWUmJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihJLGUpe2xldCBnPUEuZGF0YSxyPW0uZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOm59PUEsYTtmdW5jdGlvbiBRKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpfWxldCBCO2lmKEMuaXNGb3JtRGF0YShnKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXIuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEI9ci5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1CP0Iuc3BsaXQoIjsiKS5tYXAoeT0+eS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtyLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO3Iuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgZj0kKEEuYmFzZVVSTCxBLnVybCk7aS5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksWChmLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksITApLGkudGltZW91dD1BLnRpbWVvdXQ7ZnVuY3Rpb24gcygpe2lmKCFpKXJldHVybjtsZXQgYz1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBpJiZpLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSx5PXtkYXRhOiFvfHxvPT09InRleHQifHxvPT09Impzb24iP2kucmVzcG9uc2VUZXh0OmkucmVzcG9uc2Usc3RhdHVzOmkuc3RhdHVzLHN0YXR1c1RleHQ6aS5zdGF0dXNUZXh0LGhlYWRlcnM6Yyxjb25maWc6QSxyZXF1ZXN0Oml9O01BKGZ1bmN0aW9uKE4pe0koTiksUSgpfSxmdW5jdGlvbihOKXtlKE4pLFEoKX0seSksaT1udWxsfWlmKCJvbmxvYWRlbmQiaW4gaT9pLm9ubG9hZGVuZD1zOmkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWl8fGkucmVhZHlTdGF0ZSE9PTR8fGkuc3RhdHVzPT09MCYmIShpLnJlc3BvbnNlVVJMJiZpLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChzKX0saS5vbmFib3J0PWZ1bmN0aW9uKCl7aSYmKGUobmV3IGwoIlJlcXVlc3QgYWJvcnRlZCIsbC5FQ09OTkFCT1JURUQsQSxpKSksaT1udWxsKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgbCgiTmV0d29yayBFcnJvciIsbC5FUlJfTkVUV09SSyxBLGkpKSxpPW51bGx9LGkub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IHU9QS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrQS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHk9QS50cmFuc2l0aW9uYWx8fGFBO0EudGltZW91dEVycm9yTWVzc2FnZSYmKHU9QS50aW1lb3V0RXJyb3JNZXNzYWdlKSxlKG5ldyBsKHUseS5jbGFyaWZ5VGltZW91dEVycm9yP2wuRVRJTUVET1VUOmwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbH0sdy5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihuJiZDLmlzRnVuY3Rpb24obikmJihuPW4oQSkpLG58fG4hPT0hMSYmVXQoZikpKXtsZXQgYz1BLnhzcmZIZWFkZXJOYW1lJiZBLnhzcmZDb29raWVOYW1lJiZOdC5yZWFkKEEueHNyZkNvb2tpZU5hbWUpO2MmJnIuc2V0KEEueHNyZkhlYWRlck5hbWUsYyl9Zz09PXZvaWQgMCYmci5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBpJiZDLmZvckVhY2goci50b0pTT04oKSxmdW5jdGlvbih1LHkpe2kuc2V0UmVxdWVzdEhlYWRlcih5LHUpfSksQy5pc1VuZGVmaW5lZChBLndpdGhDcmVkZW50aWFscyl8fChpLndpdGhDcmVkZW50aWFscz0hIUEud2l0aENyZWRlbnRpYWxzKSxvJiZvIT09Impzb24iJiYoaS5yZXNwb25zZVR5cGU9QS5yZXNwb25zZVR5cGUpLHR5cGVvZiBBLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa3QoQS5vbkRvd25sb2FkUHJvZ3Jlc3MsITApKSx0eXBlb2YgQS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZpLnVwbG9hZCYmaS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25VcGxvYWRQcm9ncmVzcykpLChBLmNhbmNlbFRva2VufHxBLnNpZ25hbCkmJihhPWM9PntpJiYoZSghY3x8Yy50eXBlP25ldyBIKG51bGwsQSxpKTpjKSxpLmFib3J0KCksaT1udWxsKX0sQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYSksQS5zaWduYWwmJihBLnNpZ25hbC5hYm9ydGVkP2EoKTpBLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYSkpKTtsZXQgRT1PQShmKTtpZihFJiZ3LnByb3RvY29scy5pbmRleE9mKEUpPT09LTEpe2UobmV3IGwoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrRSsiOiIsbC5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1pLnNlbmQoZ3x8bnVsbCl9KX07dmFyIFRBPXtodHRwOlFBLHhocjpMdH07Qy5mb3JFYWNoKFRBLChBLHQpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6dH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTp0fSl9fSk7dmFyIEp0PUE9PmAtICR7QX1gLEVlPUE9PkMuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxsQT17Z2V0QWRhcHRlcjpBPT57QT1DLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDp0fT1BLEksZSxnPXt9O2ZvcihsZXQgcj0wO3I8dDtyKyspe0k9QVtyXTtsZXQgbztpZihlPUksIUVlKEkpJiYoZT1UQVsobz1TdHJpbmcoSSkpLnRvTG93ZXJDYXNlKCldLGU9PT12b2lkIDApKXRocm93IG5ldyBsKGBVbmtub3duIGFkYXB0ZXIgXCcke299XCdgKTtpZihlKWJyZWFrO2dbb3x8IiUyMyIrcl09ZX1pZighZSl7bGV0IHI9T2JqZWN0LmVudHJpZXMoZykubWFwKChbbixhXSk9PmBhZGFwdGVyICR7bn0gYCsoYT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLG89dD9yLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtyLm1hcChKdCkuam9pbihgJTBBYCk6IiAiK0p0KHJbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IGwoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gZX0sYWRhcHRlcnM6VEF9O2Z1bmN0aW9uIFBBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBIKG51bGwsQSl9ZnVuY3Rpb24gREEoQSl7cmV0dXJuIFBBKEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFQuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gUEEoQSksZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZSksZS5oZWFkZXJzPW0uZnJvbShlLmhlYWRlcnMpLGV9LGZ1bmN0aW9uKGUpe3JldHVybiB2KGUpfHwoUEEoQSksZSYmZS5yZXNwb25zZSYmKGUucmVzcG9uc2UuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUucmVzcG9uc2UpLGUucmVzcG9uc2UuaGVhZGVycz1tLmZyb20oZS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KGUpfSl9dmFyIEh0PUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIGsoQSx0KXt0PXR8fHt9O2xldCBJPXt9O2Z1bmN0aW9uIGUoUSxCLGkpe3JldHVybiBDLmlzUGxhaW5PYmplY3QoUSkmJkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOml9LFEsQik6Qy5pc1BsYWluT2JqZWN0KEIpP0MubWVyZ2Uoe30sQik6Qy5pc0FycmF5KEIpP0Iuc2xpY2UoKTpCfWZ1bmN0aW9uIGcoUSxCLGkpe2lmKEMuaXNVbmRlZmluZWQoQikpe2lmKCFDLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRLGkpfWVsc2UgcmV0dXJuIGUoUSxCLGkpfWZ1bmN0aW9uIHIoUSxCKXtpZighQy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbyhRLEIpe2lmKEMuaXNVbmRlZmluZWQoQikpe2lmKCFDLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRKX1lbHNlIHJldHVybiBlKHZvaWQgMCxCKX1mdW5jdGlvbiBuKFEsQixpKXtpZihpIGluIHQpcmV0dXJuIGUoUSxCKTtpZihpIGluIEEpcmV0dXJuIGUodm9pZCAwLFEpfWxldCBhPXt1cmw6cixtZXRob2Q6cixkYXRhOnIsYmFzZVVSTDpvLHRyYW5zZm9ybVJlcXVlc3Q6byx0cmFuc2Zvcm1SZXNwb25zZTpvLHBhcmFtc1NlcmlhbGl6ZXI6byx0aW1lb3V0Om8sdGltZW91dE1lc3NhZ2U6byx3aXRoQ3JlZGVudGlhbHM6byx3aXRoWFNSRlRva2VuOm8sYWRhcHRlcjpvLHJlc3BvbnNlVHlwZTpvLHhzcmZDb29raWVOYW1lOm8seHNyZkhlYWRlck5hbWU6byxvblVwbG9hZFByb2dyZXNzOm8sb25Eb3dubG9hZFByb2dyZXNzOm8sZGVjb21wcmVzczpvLG1heENvbnRlbnRMZW5ndGg6byxtYXhCb2R5TGVuZ3RoOm8sYmVmb3JlUmVkaXJlY3Q6byx0cmFuc3BvcnQ6byxodHRwQWdlbnQ6byxodHRwc0FnZW50Om8sY2FuY2VsVG9rZW46byxzb2NrZXRQYXRoOm8scmVzcG9uc2VFbmNvZGluZzpvLHZhbGlkYXRlU3RhdHVzOm4saGVhZGVyczooUSxCKT0+ZyhIdChRKSxIdChCKSwhMCl9O3JldHVybiBDLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLHQpKSxmdW5jdGlvbihCKXtsZXQgaT1hW0JdfHxnLGY9aShBW0JdLHRbQl0sQik7Qy5pc1VuZGVmaW5lZChmKSYmaSE9PW58fChJW0JdPWYpfSksSX12YXIgdUE9IjEuNi44Ijt2YXIgeEE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLHQpPT57eEFbQV09ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT09QXx8ImEiKyh0PDE/Im4gIjoiICIpK0F9fSk7dmFyIFl0PXt9O3hBLnRyYW5zaXRpb25hbD1mdW5jdGlvbih0LEksZSl7ZnVuY3Rpb24gZyhyLG8pe3JldHVybiJbQXhpb3MgdiIrdUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrcisiXCciK28rKGU/Ii4gIitlOiIiKX1yZXR1cm4ocixvLG4pPT57aWYodD09PSExKXRocm93IG5ldyBsKGcobywiIGhhcyBiZWVuIHJlbW92ZWQiKyhJPyIgaW4gIitJOiIiKSksbC5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIEkmJiFZdFtvXSYmKFl0W29dPSEwLGNvbnNvbGUud2FybihnKG8sIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK0krIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksdD90KHIsbyxuKTohMH19O2Z1bmN0aW9uIGFlKEEsdCxJKXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IGwoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBlPU9iamVjdC5rZXlzKEEpLGc9ZS5sZW5ndGg7Zm9yKDtnLS0gPjA7KXtsZXQgcj1lW2ddLG89dFtyXTtpZihvKXtsZXQgbj1BW3JdLGE9bj09PXZvaWQgMHx8byhuLHIsQSk7aWYoYSE9PSEwKXRocm93IG5ldyBsKCJvcHRpb24gIityKyIgbXVzdCBiZSAiK2EsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYoSSE9PSEwKXRocm93IG5ldyBsKCJVbmtub3duIG9wdGlvbiAiK3IsbC5FUlJfQkFEX09QVElPTil9fXZhciBoQT17YXNzZXJ0T3B0aW9uczphZSx2YWxpZGF0b3JzOnhBfTt2YXIgWT1oQS52YWxpZGF0b3JzLHg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBMQSxyZXNwb25zZTpuZXcgTEF9fWFzeW5jIHJlcXVlc3QodCxJKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxJKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBnO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGc9e30pOmc9bmV3IEVycm9yO2xldCByPWcuc3RhY2s/Zy5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjtlLnN0YWNrP3ImJiFTdHJpbmcoZS5zdGFjaykuZW5kc1dpdGgoci5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKGUuc3RhY2srPWAlMEFgK3IpOmUuc3RhY2s9cn10aHJvdyBlfX1fcmVxdWVzdCh0LEkpe3R5cGVvZiB0PT0ic3RyaW5nIj8oST1JfHx7fSxJLnVybD10KTpJPXR8fHt9LEk9ayh0aGlzLmRlZmF1bHRzLEkpO2xldHt0cmFuc2l0aW9uYWw6ZSxwYXJhbXNTZXJpYWxpemVyOmcsaGVhZGVyczpyfT1JO2UhPT12b2lkIDAmJmhBLmFzc2VydE9wdGlvbnMoZSx7c2lsZW50SlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKX0sITEpLGchPW51bGwmJihDLmlzRnVuY3Rpb24oZyk/SS5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6Z306aEEuYXNzZXJ0T3B0aW9ucyhnLHtlbmNvZGU6WS5mdW5jdGlvbixzZXJpYWxpemU6WS5mdW5jdGlvbn0sITApKSxJLm1ldGhvZD0oSS5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1yJiZDLm1lcmdlKHIuY29tbW9uLHJbSS5tZXRob2RdKTtyJiZDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSByW0VdfSksSS5oZWFkZXJzPW0uY29uY2F0KG8scik7bGV0IG49W10sYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKEkpPT09ITF8fChhPWEmJmMuc3luY2hyb25vdXMsbi51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBRPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7US5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IEIsaT0wLGY7aWYoIWEpe2xldCBFPVtEQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLG4pLEUucHVzaC5hcHBseShFLFEpLGY9RS5sZW5ndGgsQj1Qcm9taXNlLnJlc29sdmUoSSk7aTxmOylCPUIudGhlbihFW2krK10sRVtpKytdKTtyZXR1cm4gQn1mPW4ubGVuZ3RoO2xldCBzPUk7Zm9yKGk9MDtpPGY7KXtsZXQgRT1uW2krK10sYz1uW2krK107dHJ5e3M9RShzKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e0I9REEuY2FsbCh0aGlzLHMpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3IoaT0wLGY9US5sZW5ndGg7aTxmOylCPUIudGhlbihRW2krK10sUVtpKytdKTtyZXR1cm4gQn1nZXRVcmkodCl7dD1rKHRoaXMuZGVmYXVsdHMsdCk7bGV0IEk9JCh0LmJhc2VVUkwsdC51cmwpO3JldHVybiBYKEksdC5wYXJhbXMsdC5wYXJhbXNTZXJpYWxpemVyKX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24odCl7eC5wcm90b3R5cGVbdF09ZnVuY3Rpb24oSSxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsoZXx8e30se21ldGhvZDp0LHVybDpJLGRhdGE6KGV8fHt9KS5kYXRhfSkpfX0pO0MuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIEkoZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbyxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsobnx8e30se21ldGhvZDp0LGhlYWRlcnM6ZT97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6cixkYXRhOm99KSl9fXgucHJvdG90eXBlW3RdPUkoKSx4LnByb3RvdHlwZVt0KyJGb3JtIl09SSghMCl9KTt2YXIgQUE9eDt2YXIgakE9Y2xhc3MgQXtjb25zdHJ1Y3Rvcih0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IEk7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe0k9cn0pO2xldCBlPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZz0+e2lmKCFlLl9saXN0ZW5lcnMpcmV0dXJuO2xldCByPWUuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtyLS0gPjA7KWUuX2xpc3RlbmVyc1tyXShnKTtlLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPWc9PntsZXQgcixvPW5ldyBQcm9taXNlKG49PntlLnN1YnNjcmliZShuKSxyPW59KS50aGVuKGcpO3JldHVybiBvLmNhbmNlbD1mdW5jdGlvbigpe2UudW5zdWJzY3JpYmUocil9LG99LHQoZnVuY3Rpb24ocixvLG4pe2UucmVhc29ufHwoZS5yZWFzb249bmV3IEgocixvLG4pLEkoZS5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUodCl7aWYodGhpcy5yZWFzb24pe3QodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2godCk6dGhpcy5fbGlzdGVuZXJzPVt0XX11bnN1YnNjcmliZSh0KXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgST10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZih0KTtJIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoSSwxKX1zdGF0aWMgc291cmNlKCl7bGV0IHQ7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKGcpe3Q9Z30pLGNhbmNlbDp0fX19LGJ0PWpBO2Z1bmN0aW9uIFdBKEEpe3JldHVybiBmdW5jdGlvbihJKXtyZXR1cm4gQS5hcHBseShudWxsLEkpfX1mdW5jdGlvbiBaQShBKXtyZXR1cm4gQy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgVkE9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKFZBKS5mb3JFYWNoKChbQSx0XSk9PntWQVt0XT1BfSk7dmFyIE10PVZBO2Z1bmN0aW9uIHF0KEEpe2xldCB0PW5ldyBBQShBKSxJPVcoQUEucHJvdG90eXBlLnJlcXVlc3QsdCk7cmV0dXJuIEMuZXh0ZW5kKEksQUEucHJvdG90eXBlLHQse2FsbE93bktleXM6ITB9KSxDLmV4dGVuZChJLHQsbnVsbCx7YWxsT3duS2V5czohMH0pLEkuY3JlYXRlPWZ1bmN0aW9uKGcpe3JldHVybiBxdChrKEEsZykpfSxJfXZhciBoPXF0KFQpO2guQXhpb3M9QUE7aC5DYW5jZWxlZEVycm9yPUg7aC5DYW5jZWxUb2tlbj1idDtoLmlzQ2FuY2VsPXY7aC5WRVJTSU9OPXVBO2gudG9Gb3JtRGF0YT1KO2guQXhpb3NFcnJvcj1sO2guQ2FuY2VsPWguQ2FuY2VsZWRFcnJvcjtoLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodCl9O2guc3ByZWFkPVdBO2guaXNBeGlvc0Vycm9yPVpBO2gubWVyZ2VDb25maWc9aztoLkF4aW9zSGVhZGVycz1tO2guZm9ybVRvSlNPTj1BPT5jQShDLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2guZ2V0QWRhcHRlcj1sQS5nZXRBZGFwdGVyO2guSHR0cFN0YXR1c0NvZGU9TXQ7aC5kZWZhdWx0PWg7dmFyIGRBPWg7dmFye0F4aW9zOmlvLEF4aW9zRXJyb3I6Q28sQ2FuY2VsZWRFcnJvcjpCbyxpc0NhbmNlbDpubyxDYW5jZWxUb2tlbjpzbyxWRVJTSU9OOlFvLGFsbDpFbyxDYW5jZWw6YW8saXNBeGlvc0Vycm9yOmNvLHNwcmVhZDpmbyx0b0Zvcm1EYXRhOmxvLEF4aW9zSGVhZGVyczpEbyxIdHRwU3RhdHVzQ29kZTp1byxmb3JtVG9KU09OOmhvLGdldEFkYXB0ZXI6eW8sbWVyZ2VDb25maWc6d299PWRBO3ZhciB0QSxMLHpBLFhBPXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7ekE9bmV3IFVpbnQ4QXJyYXkoTC5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LHlBPWNsYXNze2luaXQoKXtyZXR1cm4gdEF8fCh0eXBlb2YgZmV0Y2g8InUiP3RBPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrS3QpLnRoZW4odD0+dC5hcnJheUJ1ZmZlcigpKS50aGVuKHQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsWEEpKS50aGVuKHRoaXMuX2luaXQpOnRBPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKEt0LCJiYXNlNjQiKSxYQSkudGhlbih0aGlzLl9pbml0KSx0QSl9X2luaXQodCl7TD10Lmluc3RhbmNlLFhBLmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZSh0LEk9MCl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IGU9dC5ieXRlTGVuZ3RoLGc9TC5leHBvcnRzLm1hbGxvYyhlKTt6QS5zZXQodCxnKSxJPUl8fE51bWJlcihMLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShnLGUpKTtsZXQgcj1MLmV4cG9ydHMubWFsbG9jKEkpLG89TC5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhyLEksZyxlKSxuPXpBLnNsaWNlKHIscitvKTtyZXR1cm4gTC5leHBvcnRzLmZyZWUoZyksTC5leHBvcnRzLmZyZWUociksbn19LEt0PSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIE90PW5ldyB5QSxUdD0hMTthc3luYyBmdW5jdGlvbiBjZShBLHQsSSl7bGV0IGU9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ZT1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ZT1BOmU9YCR7dH0vJHtBfWAsZS5lbmRzV2l0aCgiLmpzIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMykpLGUuZW5kc1dpdGgoIi53YXNtIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtNSkpO2xldCBnPWAke2V9Lndhc21gLHI9YXdhaXQgZEEuZ2V0KGAke2d9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczpJfSk7VHR8fChhd2FpdCBPdC5pbml0KCksVHQ9ITApO2xldCBuPU90LmRlY29kZShuZXcgVWludDhBcnJheShyLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtlfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om59KX12YXIgUHQ9Y2U7dmFyIHdBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gZmUoQSx0LEkpe2xldCBlPUEsZz1BLHI9bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoZT1uZXcgVVJMKEEuaHJlZiksZz1lLmhyZWYpLHdBLmhhcyhnKT9yPWF3YWl0IHdBLmdldChnKTood0Euc2V0KGcsUHQoZSx0LEkpKSxyPWF3YWl0IHdBLmdldChnKSkscn12YXIgeHQ9ZmU7dmFyIGxlPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sRD1sZTt2YXIgRGU9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxTPURlO3ZhciB1ZT17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0saj11ZTtmdW5jdGlvbiBoZShBLHQpe2xldCBJPW51bGw7c3dpdGNoKEEpe2Nhc2UgUy5VSW50ODp7ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFMuSW50ODp7ST1uZXcgSW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50MTY6e0k9bmV3IFVpbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQxNjp7ST1uZXcgSW50MTZBcnJheSh0KTticmVha31jYXNlIFMuVUludDMyOntJPW5ldyBVaW50MzJBcnJheSh0KTticmVha31jYXNlIFMuSW50MzI6e0k9bmV3IEludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/ST1uZXcgQmlnVWludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFMuSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/ST1uZXcgQmlnSW50NjRBcnJheSh0KTpJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDMyOntJPW5ldyBGbG9hdDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBqLkZsb2F0NjQ6e0k9bmV3IEZsb2F0NjRBcnJheSh0KTticmVha31jYXNlIm51bGwiOntJPW51bGw7YnJlYWt9Y2FzZSBudWxsOntJPW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gSX12YXIgRz1oZTt2YXIgWnQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsanQ9bmV3IFRleHRFbmNvZGVyLFd0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBkZShBLHQpe2xldCBJPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LGU9QS5mc19vcGVuKHQsSS5mbGFncykscj1BLmZzX3N0YXQodCkuc2l6ZSxvPW51bGw7WnQ/bz1uZXcgU2hhcmVkQXJyYXlCdWZmZXIocik6bz1uZXcgQXJyYXlCdWZmZXIocik7bGV0IG49bmV3IFVpbnQ4QXJyYXkobyk7cmV0dXJuIEEuZnNfcmVhZChlLG4sMCxyLDApLEEuZnNfY2xvc2UoZSksbn1mdW5jdGlvbiBWdChBLHQsSSl7bGV0IGU9bnVsbDtadD9lPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihJKTplPW5ldyBBcnJheUJ1ZmZlcihJKTtsZXQgZz1uZXcgVWludDhBcnJheShlKSxyPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcix0LEkpO3JldHVybiBnLnNldChyKSxnfWZ1bmN0aW9uIGQoQSx0LEksZSl7bGV0IGc9MDtyZXR1cm4gdCE9PW51bGwmJihnPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksZSx0LmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxnKSksZ31mdW5jdGlvbiBNKEEsdCxJKXtsZXQgZT1KU09OLnN0cmluZ2lmeSh0KSxnPUEubGVuZ3RoQnl0ZXNVVEY4KGUpKzEscj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksZ10pO0Euc3RyaW5nVG9VVEY4KGUscixnKX1mdW5jdGlvbiBwKEEsdCxJLGUpe2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxJXSksbz1WdChBLGcscik7cmV0dXJuIEcoZSxvLmJ1ZmZlcil9ZnVuY3Rpb24gbUEoQSx0KXtsZXQgST1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLHRdKSxlPUEuVVRGOFRvU3RyaW5nKEkpO3JldHVybiBKU09OLnBhcnNlKGUpfWZ1bmN0aW9uIHllKEEsdCxJLGUpe2UhPW51bGwmJmUubGVuZ3RoPjAmJmUuZm9yRWFjaChmdW5jdGlvbihRLEIpe3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgaT1qdC5lbmNvZGUoUS5kYXRhLmRhdGEpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgaT1qdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoUS5kYXRhKSksZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgaT1RLmRhdGEuZGF0YSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5kYXRhLEIsMCkscz1kKEEsaS5kaXJlY3Rpb24sQiwxKSxFPXR5cGVvZiBpLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGkubWV0YWRhdGEuZW50cmllcygpKTpbXSxjPXtpbWFnZVR5cGU6aS5pbWFnZVR5cGUsbmFtZTppLm5hbWUsb3JpZ2luOmkub3JpZ2luLHNwYWNpbmc6aS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxzaXplOmkuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOkV9O00oQSxjLEIpO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLmNlbGxzLEIsMSksRT1kKEEsaS5wb2ludERhdGEsQiwyKSxjPWQoQSxpLmNlbGxEYXRhLEIsMyksdT17bWVzaFR5cGU6aS5tZXNoVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOmkubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxjZWxsQnVmZmVyU2l6ZTppLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZkNlbGxQaXhlbHM6aS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O00oQSx1LEIpO2JyZWFrfWNhc2UgRC5Qb2ludFNldDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5wb2ludERhdGEsQiwxKSxFPXtwb2ludFNldFR5cGU6aS5wb2ludFNldFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gfTtNKEEsRSxCKTticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkudmVydGljZXMsQiwxKSxFPWQoQSxpLmxpbmVzLEIsMiksYz1kKEEsaS5wb2x5Z29ucyxCLDMpLHU9ZChBLGkudHJpYW5nbGVTdHJpcHMsQiw0KSx5PWQoQSxpLnBvaW50RGF0YSxCLDUpLFI9ZChBLGkucG9pbnREYXRhLEIsNiksTj17cG9seURhdGFUeXBlOmkucG9seURhdGFUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTppLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxsaW5lc0J1ZmZlclNpemU6aS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOmkucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTppLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5fWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtNKEEsTixCKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgZz1BLnN0YWNrU2F2ZSgpLHI9MDt0cnl7cj1BLmNhbGxNYWluKHQuc2xpY2UoKSl9Y2F0Y2goUSl7dGhyb3cgdHlwZW9mIFE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoUSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksUX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKGcpfWxldCBvPUEuZ2V0TW9kdWxlU3Rkb3V0KCksbj1BLmdldE1vZHVsZVN0ZGVycigpLGE9W107cmV0dXJuIEkhPW51bGwmJkkubGVuZ3RoPjAmJnI9PT0wJiZJLmZvckVhY2goZnVuY3Rpb24oUSxCKXtsZXQgaT1udWxsO3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHMsRSk7aT17ZGF0YTpXdC5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9SlNPTi5wYXJzZShXdC5kZWNvZGUoYykpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSk7aT17ZGF0YTpWdChBLHMsRSl9O2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7aT17cGF0aDpRLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoUS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7aT17cGF0aDpRLmRhdGEucGF0aCxkYXRhOmRlKEEsUS5kYXRhLnBhdGgpfTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBzPW1BKEEsQik7cy5kYXRhPXAoQSxCLDAscy5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSkscy5kaXJlY3Rpb249cChBLEIsMSxqLkZsb2F0NjQpLHMubWV0YWRhdGE9bmV3IE1hcChzLm1ldGFkYXRhKSxpPXM7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAscy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOnMucG9pbnRzPUcocy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbHM+MD9zLmNlbGxzPXAoQSxCLDEscy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6cy5jZWxscz1HKHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwyLHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/cy5jZWxsRGF0YT1wKEEsQiwzLHMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6cy5jZWxsRGF0YT1HKHMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBzPW1BKEEsQik7Y29uc29sZS5sb2cocykscy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAscy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDEscy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLGouRmxvYXQzMik6cy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxzLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP3MudmVydGljZXM9cChBLEIsMSxTLlVJbnQzMik6cy52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXkscy5saW5lc0J1ZmZlclNpemU+MD9zLmxpbmVzPXAoQSxCLDIsUy5VSW50MzIpOnMubGluZXM9bmV3IFVpbnQzMkFycmF5LHMucG9seWdvbnNCdWZmZXJTaXplPjA/cy5wb2x5Z29ucz1wKEEsQiwzLFMuVUludDMyKTpzLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP3MudHJpYW5nbGVTdHJpcHM9cChBLEIsNCxTLlVJbnQzMik6cy50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsNSxzLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/cy5jZWxsRGF0YT1wKEEsQiw2LHMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6US50eXBlLGRhdGE6aX07YS5wdXNoKGYpfSkse3JldHVyblZhbHVlOnIsc3Rkb3V0Om8sc3RkZXJyOm4sb3V0cHV0czphfX12YXIgWHQ9eWU7dmFyIHdlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBtZShBLHQpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IEk9W107Zm9yKGxldCBlPTA7ZTxBLmxlbmd0aDtlKyspe2xldCBnPXBlKEFbZV0sdCk7ZyE9PW51bGwmJkkucHVzaChnKX1yZXR1cm4gSX1mdW5jdGlvbiBwZShBLHQpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IEk9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/ST1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihJPUEpLHdlJiZJIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDp0P0k6SS5zbGljZSgwKX12YXIgenQ9bWU7ZnVuY3Rpb24gU2UoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIF90PVNlO2Z1bmN0aW9uIEZlKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciB2dD1GZTtmdW5jdGlvbiBSZShBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgJHQ9UmU7YXN5bmMgZnVuY3Rpb24gTmUoQSx0LEksZSl7bGV0IGc9WHQoQSx0LEksZSkscj1bXTtyZXR1cm4gZy5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24obyl7aWYoby50eXBlPT09RC5CaW5hcnlTdHJlYW18fG8udHlwZT09PUQuQmluYXJ5RmlsZSl7bGV0IG49by5kYXRhO3IucHVzaChuKX1lbHNlIGlmKG8udHlwZT09PUQuSW1hZ2Upe2xldCBuPW8uZGF0YTtyLnB1c2goLi4uX3QobikpfWVsc2UgaWYoby50eXBlPT09RC5NZXNoKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLnZ0KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuUG9seURhdGEpe2xldCBuPW8uZGF0YTtyLnB1c2goLi4uJHQobikpfX0pLEZBKGcsenQociwhMCkpfXZhciBBST1OZTt2YXIgVWU9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsdCxJLGUsZyxyKXtsZXQgbz1hd2FpdCB4dChBLHQscik7cmV0dXJuIGF3YWl0IEFJKG8sSSxlLGcpfX07aUEoVWUpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7QnQobHQpO2V4cG9ydHtubiBhcyBkb3duc2FtcGxlLFhyIGFzIGRvd25zYW1wbGVCaW5TaHJpbmssQW4gYXMgZG93bnNhbXBsZUxhYmVsSW1hZ2UsdG4gYXMgZG93bnNhbXBsZVNpZ21hLGFuIGFzIGdhdXNzaWFuS2VybmVsUmFkaXVzLE8gYXMgZ2V0RGVmYXVsdFdlYldvcmtlcixSIGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLEwgYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCxJcyBhcyBzZXREZWZhdWx0V2ViV29ya2VyLEJ0IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLHRzIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsYkEgYXMgdmVyc2lvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" +default_js_module = """data:text/javascript;base64,dmFyIGN0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgUXQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSljdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHV0PSIxLjQuMiIsYkE9dXQ7dmFyIGZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1mdDt2YXIgcHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFk9cHQ7ZnVuY3Rpb24gZHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIFMuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIFMuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIFkuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgWS5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIE49ZHQ7dmFyIG10PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sdT1tdDt2YXIgaWU9U3ltYm9sKCJDb21saW5rLnByb3h5IiksaHQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksTkE9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLEZBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxzQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksYWU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIseXQ9e2NhbkhhbmRsZTpBPT5hZShBKSYmQVtpZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gSWUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLEdBKEEpfX0sd3Q9e2NhbkhhbmRsZTpBPT5hZShBKSYmc0EgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LHNlPW5ldyBNYXAoW1sicHJveHkiLHl0XSxbInRocm93Iix3dF1dKTtmdW5jdGlvbiBEdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gSWUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG4pe2lmKCFufHwhbi5kYXRhKXJldHVybjtpZighRHQodCxuLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7bi5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6byx0eXBlOmkscGF0aDpnfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxuLmRhdGEpLGw9KG4uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoSCksQzt0cnl7bGV0IEk9Zy5zbGljZSgwLC0xKS5yZWR1Y2UoKGMsQik9PmNbQl0sQSksYT1nLnJlZHVjZSgoYyxCKT0+Y1tCXSxBKTtzd2l0Y2goaSl7Y2FzZSJHRVQiOkM9YTticmVhaztjYXNlIlNFVCI6SVtnLnNsaWNlKC0xKVswXV09SChuLmRhdGEudmFsdWUpLEM9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6Qz1hLmFwcGx5KEksbCk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgYz1uZXcgYSguLi5sKTtDPUZ0KGMpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Yyxwb3J0MjpCfT1uZXcgTWVzc2FnZUNoYW5uZWw7SWUoQSxCKSxDPUxBKGMsW2NdKX1icmVhaztjYXNlIlJFTEVBU0UiOkM9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChJKXtDPXt2YWx1ZTpJLFtzQV06MH19UHJvbWlzZS5yZXNvbHZlKEMpLmNhdGNoKEk9Pih7dmFsdWU6SSxbc0FdOjB9KSkudGhlbihJPT57bGV0W2EsY109QkEoSSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOm99KSxjKSxpPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxnZShlKSxGQSBpbiBBJiZ0eXBlb2YgQVtGQV09PSJmdW5jdGlvbiImJkFbRkFdKCkpfSkuY2F0Y2goST0+e2xldFthLGNdPUJBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbc0FdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6b30pLGMpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gU3QoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gZ2UoQSl7U3QoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBHQShBLGUpe3JldHVybiBVQShBLFtdLGUpfWZ1bmN0aW9uIGFBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBCZShBKXtyZXR1cm4gcShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntnZShBKX0pfXZhciBJQT1uZXcgV2Vha01hcCxnQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oSUEuZ2V0KEEpfHwwKS0xO0lBLnNldChBLGUpLGU9PT0wJiZCZShBKX0pO2Z1bmN0aW9uIGt0KEEsZSl7bGV0IHQ9KElBLmdldChlKXx8MCkrMTtJQS5zZXQoZSx0KSxnQSYmZ0EucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIFJ0KEEpe2dBJiZnQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIFVBKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbj1uZXcgUHJveHkodCx7Z2V0KG8saSl7aWYoYUEociksaT09PU5BKXJldHVybigpPT57UnQobiksQmUoQSkscj0hMH07aWYoaT09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5ufTtsZXQgZz1xKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChsPT5sLnRvU3RyaW5nKCkpfSkudGhlbihIKTtyZXR1cm4gZy50aGVuLmJpbmQoZyl9cmV0dXJuIFVBKEEsWy4uLmUsaV0pfSxzZXQobyxpLGcpe2FBKHIpO2xldFtsLENdPUJBKGcpO3JldHVybiBxKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxpXS5tYXAoST0+SS50b1N0cmluZygpKSx2YWx1ZTpsfSxDKS50aGVuKEgpfSxhcHBseShvLGksZyl7YUEocik7bGV0IGw9ZVtlLmxlbmd0aC0xXTtpZihsPT09aHQpcmV0dXJuIHEoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihIKTtpZihsPT09ImJpbmQiKXJldHVybiBVQShBLGUuc2xpY2UoMCwtMSkpO2xldFtDLEldPW9lKGcpO3JldHVybiBxKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkN9LEkpLnRoZW4oSCl9LGNvbnN0cnVjdChvLGkpe2FBKHIpO2xldFtnLGxdPW9lKGkpO3JldHVybiBxKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChDPT5DLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpnfSxsKS50aGVuKEgpfX0pO3JldHVybiBrdChuLEEpLG59ZnVuY3Rpb24gYnQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gb2UoQSl7bGV0IGU9QS5tYXAoQkEpO3JldHVybltlLm1hcCh0PT50WzBdKSxidChlLm1hcCh0PT50WzFdKSldfXZhciBDZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBMQShBLGUpe3JldHVybiBDZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIEZ0KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tpZV06ITB9KX1mdW5jdGlvbiBCQShBKXtmb3IobGV0W2UsdF1vZiBzZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isbl09dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sbl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LENlLmdldChBKXx8W11dfWZ1bmN0aW9uIEgoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gc2UuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBxKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBuPVV0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBvKGkpeyFpLmRhdGF8fCFpLmRhdGEuaWR8fGkuZGF0YS5pZCE9PW58fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHIoaS5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpufSxlKSx0KX0pfWZ1bmN0aW9uIFV0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBaKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6TnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOlRBfT1PYmplY3QsbEE9KEE9PmU9PntsZXQgdD1OdC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksRz1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+bEEoZSk9PT1BKSxFQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6S309QXJyYXksWD1FQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gR3QoQSl7cmV0dXJuIEEhPT1udWxsJiYhWChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFYKEEuY29uc3RydWN0b3IpJiZrKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBRZT1HKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIEx0KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmUWUoQS5idWZmZXIpLGV9dmFyIE90PUVBKCJzdHJpbmciKSxrPUVBKCJmdW5jdGlvbiIpLHVlPUVBKCJudW1iZXIiKSxjQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLFB0PUE9PkE9PT0hMHx8QT09PSExLENBPUE9PntpZihsQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPVRBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LFR0PUcoIkRhdGUiKSx4dD1HKCJGaWxlIiksSnQ9RygiQmxvYiIpLEh0PUcoIkZpbGVMaXN0IiksTXQ9QT0+Y0EoQSkmJmsoQS5waXBlKSxZdD1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8ayhBLmFwcGVuZCkmJigoZT1sQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJmsoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0scXQ9RygiVVJMU2VhcmNoUGFyYW1zIiksS3Q9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uICQoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixuO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxLKEEpKWZvcihyPTAsbj1BLmxlbmd0aDtyPG47cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBvPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksaT1vLmxlbmd0aCxnO2ZvcihyPTA7cjxpO3IrKylnPW9bcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBmZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsbjtmb3IoO3ItLSA+MDspaWYobj10W3JdLGU9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG47cmV0dXJuIG51bGx9dmFyIHBlPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsZGU9QT0+IVgoQSkmJkEhPT1wZTtmdW5jdGlvbiBQQSgpe2xldHtjYXNlbGVzczpBfT1kZSh0aGlzKSYmdGhpc3x8e30sZT17fSx0PShyLG4pPT57bGV0IG89QSYmZmUoZSxuKXx8bjtDQShlW29dKSYmQ0Eocik/ZVtvXT1QQShlW29dLHIpOkNBKHIpP2Vbb109UEEoe30scik6SyhyKT9lW29dPXIuc2xpY2UoKTplW29dPXJ9O2ZvcihsZXQgcj0wLG49YXJndW1lbnRzLmxlbmd0aDtyPG47cisrKWFyZ3VtZW50c1tyXSYmJChhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIFd0PShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PigkKGUsKG4sbyk9Pnt0JiZrKG4pP0Fbb109WihuLHQpOkFbb109bn0se2FsbE93bktleXM6cn0pLEEpLGp0PUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksdnQ9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sX3Q9KEEsZSx0LHIpPT57bGV0IG4sbyxpLGc9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLG89bi5sZW5ndGg7by0tID4wOylpPW5bb10sKCFyfHxyKGksQSxlKSkmJiFnW2ldJiYoZVtpXT1BW2ldLGdbaV09ITApO0E9dCE9PSExJiZUQShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0senQ9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxWdD1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoSyhBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighdWUoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LFp0PShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZUQShVaW50OEFycmF5KSksWHQ9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG47Zm9yKDsobj1yLm5leHQoKSkmJiFuLmRvbmU7KXtsZXQgbz1uLnZhbHVlO2UuY2FsbChBLG9bMF0sb1sxXSl9fSwkdD0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxBcj1HKCJIVE1MRm9ybUVsZW1lbnQiKSxlcj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbil7cmV0dXJuIHIudG9VcHBlckNhc2UoKStufSksRWU9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLHRyPUcoIlJlZ0V4cCIpLG1lPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTskKHQsKG4sbyk9PntsZXQgaTsoaT1lKG4sbyxBKSkhPT0hMSYmKHJbb109aXx8bil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxycj1BPT57bWUoQSwoZSx0KT0+e2lmKGsoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoayhyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxucj0oQSxlKT0+e2xldCB0PXt9LHI9bj0+e24uZm9yRWFjaChvPT57dFtvXT0hMH0pfTtyZXR1cm4gSyhBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxvcj0oKT0+e30saXI9KEEsZSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOmUpLE9BPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsY2U9IjAxMjM0NTY3ODkiLGhlPXtESUdJVDpjZSxBTFBIQTpPQSxBTFBIQV9ESUdJVDpPQStPQS50b1VwcGVyQ2FzZSgpK2NlfSxhcj0oQT0xNixlPWhlLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6cn09ZTtmb3IoO0EtLTspdCs9ZVtNYXRoLnJhbmRvbSgpKnJ8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIHNyKEEpe3JldHVybiEhKEEmJmsoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBJcj1BPT57bGV0IGU9bmV3IEFycmF5KDEwKSx0PShyLG4pPT57aWYoY0Eocikpe2lmKGUuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXtlW25dPXI7bGV0IG89SyhyKT9bXTp7fTtyZXR1cm4gJChyLChpLGcpPT57bGV0IGw9dChpLG4rMSk7IVgobCkmJihvW2ddPWwpfSksZVtuXT12b2lkIDAsb319cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LGdyPUcoIkFzeW5jRnVuY3Rpb24iKSxCcj1BPT5BJiYoY0EoQSl8fGsoQSkpJiZrKEEudGhlbikmJmsoQS5jYXRjaCkscz17aXNBcnJheTpLLGlzQXJyYXlCdWZmZXI6UWUsaXNCdWZmZXI6R3QsaXNGb3JtRGF0YTpZdCxpc0FycmF5QnVmZmVyVmlldzpMdCxpc1N0cmluZzpPdCxpc051bWJlcjp1ZSxpc0Jvb2xlYW46UHQsaXNPYmplY3Q6Y0EsaXNQbGFpbk9iamVjdDpDQSxpc1VuZGVmaW5lZDpYLGlzRGF0ZTpUdCxpc0ZpbGU6eHQsaXNCbG9iOkp0LGlzUmVnRXhwOnRyLGlzRnVuY3Rpb246ayxpc1N0cmVhbTpNdCxpc1VSTFNlYXJjaFBhcmFtczpxdCxpc1R5cGVkQXJyYXk6WnQsaXNGaWxlTGlzdDpIdCxmb3JFYWNoOiQsbWVyZ2U6UEEsZXh0ZW5kOld0LHRyaW06S3Qsc3RyaXBCT006anQsaW5oZXJpdHM6dnQsdG9GbGF0T2JqZWN0Ol90LGtpbmRPZjpsQSxraW5kT2ZUZXN0OkcsZW5kc1dpdGg6enQsdG9BcnJheTpWdCxmb3JFYWNoRW50cnk6WHQsbWF0Y2hBbGw6JHQsaXNIVE1MRm9ybTpBcixoYXNPd25Qcm9wZXJ0eTpFZSxoYXNPd25Qcm9wOkVlLHJlZHVjZURlc2NyaXB0b3JzOm1lLGZyZWV6ZU1ldGhvZHM6cnIsdG9PYmplY3RTZXQ6bnIsdG9DYW1lbENhc2U6ZXIsbm9vcDpvcix0b0Zpbml0ZU51bWJlcjppcixmaW5kS2V5OmZlLGdsb2JhbDpwZSxpc0NvbnRleHREZWZpbmVkOmRlLEFMUEhBQkVUOmhlLGdlbmVyYXRlU3RyaW5nOmFyLGlzU3BlY0NvbXBsaWFudEZvcm06c3IsdG9KU09OT2JqZWN0OklyLGlzQXN5bmNGbjpncixpc1RoZW5hYmxlOkJyfTtmdW5jdGlvbiBXKEEsZSx0LHIsbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG4mJih0aGlzLnJlc3BvbnNlPW4pfXMuaW5oZXJpdHMoVyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIHllPVcucHJvdG90eXBlLHdlPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e3dlW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFcsd2UpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5ZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtXLmZyb209KEEsZSx0LHIsbixvKT0+e2xldCBpPU9iamVjdC5jcmVhdGUoeWUpO3JldHVybiBzLnRvRmxhdE9iamVjdChBLGksZnVuY3Rpb24obCl7cmV0dXJuIGwhPT1FcnJvci5wcm90b3R5cGV9LGc9PmchPT0iaXNBeGlvc0Vycm9yIiksVy5jYWxsKGksQS5tZXNzYWdlLGUsdCxyLG4pLGkuY2F1c2U9QSxpLm5hbWU9QS5uYW1lLG8mJk9iamVjdC5hc3NpZ24oaSxvKSxpfTt2YXIgcD1XO3ZhciBRQT1udWxsO2Z1bmN0aW9uIHhBKEEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQSl8fHMuaXNBcnJheShBKX1mdW5jdGlvbiBTZShBKXtyZXR1cm4gcy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBEZShBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG4sbyl7cmV0dXJuIG49U2UobiksIXQmJm8/IlsiK24rIl0iOm59KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIENyKEEpe3JldHVybiBzLmlzQXJyYXkoQSkmJiFBLnNvbWUoeEEpfXZhciBscj1zLnRvRmxhdE9iamVjdChzLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gRXIoQSxlLHQpe2lmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KFFBfHxGb3JtRGF0YSksdD1zLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oUSxmKXtyZXR1cm4hcy5pc1VuZGVmaW5lZChmW1FdKX0pO2xldCByPXQubWV0YVRva2VucyxuPXQudmlzaXRvcnx8SSxvPXQuZG90cyxpPXQuaW5kZXhlcyxsPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJnMuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighcy5pc0Z1bmN0aW9uKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gQyhFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihzLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFsJiZzLmlzQmxvYihFKSl0aHJvdyBuZXcgcCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gcy5pc0FycmF5QnVmZmVyKEUpfHxzLmlzVHlwZWRBcnJheShFKT9sJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gSShFLFEsZil7bGV0IGQ9RTtpZihFJiYhZiYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihzLmVuZHNXaXRoKFEsInt9IikpUT1yP1E6US5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYocy5pc0FycmF5KEUpJiZDcihFKXx8KHMuaXNGaWxlTGlzdChFKXx8cy5lbmRzV2l0aChRLCJbXSIpKSYmKGQ9cy50b0FycmF5KEUpKSlyZXR1cm4gUT1TZShRKSxkLmZvckVhY2goZnVuY3Rpb24oVSxFdCl7IShzLmlzVW5kZWZpbmVkKFUpfHxVPT09bnVsbCkmJmUuYXBwZW5kKGk9PT0hMD9EZShbUV0sRXQsbyk6aT09PW51bGw/UTpRKyJbXSIsQyhVKSl9KSwhMX1yZXR1cm4geEEoRSk/ITA6KGUuYXBwZW5kKERlKGYsUSxvKSxDKEUpKSwhMSl9bGV0IGE9W10sYz1PYmplY3QuYXNzaWduKGxyLHtkZWZhdWx0VmlzaXRvcjpJLGNvbnZlcnRWYWx1ZTpDLGlzVmlzaXRhYmxlOnhBfSk7ZnVuY3Rpb24gQihFLFEpe2lmKCFzLmlzVW5kZWZpbmVkKEUpKXtpZihhLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrUS5qb2luKCIuIikpO2EucHVzaChFKSxzLmZvckVhY2goRSxmdW5jdGlvbihkLEYpeyghKHMuaXNVbmRlZmluZWQoZCl8fGQ9PT1udWxsKSYmbi5jYWxsKGUsZCxzLmlzU3RyaW5nKEYpP0YudHJpbSgpOkYsUSxjKSk9PT0hMCYmQihkLFE/US5jb25jYXQoRik6W0ZdKX0pLGEucG9wKCl9fWlmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gQihBKSxlfXZhciBUPUVyO2Z1bmN0aW9uIGtlKEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gUmUoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZUKEEsdGhpcyxlKX12YXIgYmU9UmUucHJvdG90eXBlO2JlLmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtiZS50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLGtlKX06a2U7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChuWzBdKSsiPSIrdChuWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHVBPVJlO2Z1bmN0aW9uIGNyKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIEFBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8Y3Isbj10JiZ0LnNlcmlhbGl6ZSxvO2lmKG4/bz1uKGUsdCk6bz1zLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgdUEoZSx0KS50b1N0cmluZyhyKSxvKXtsZXQgaT1BLmluZGV4T2YoIiMiKTtpIT09LTEmJihBPUEuc2xpY2UoMCxpKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gQX12YXIgSkE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe3MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxIQT1KQTt2YXIgZkE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBGZT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6dUE7dmFyIFVlPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgTmU9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgR2U9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6RmUsRm9ybURhdGE6VWUsQmxvYjpOZX0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBNQT17fTtRdChNQSx7aGFzQnJvd3NlckVudjooKT0+TGUsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5RcixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PnVyfSk7dmFyIExlPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLFFyPShBPT5MZSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLHVyPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgeT17Li4uTUEsLi4uR2V9O2Z1bmN0aW9uIFlBKEEsZSl7cmV0dXJuIFQoQSxuZXcgeS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixuLG8pe3JldHVybiB5LmlzTm9kZSYmcy5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOm8uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZSkpfWZ1bmN0aW9uIGZyKEEpe3JldHVybiBzLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxBKS5tYXAoZT0+ZVswXT09PSJbXSI/IiI6ZVsxXXx8ZVswXSl9ZnVuY3Rpb24gcHIoQSl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhBKSxyLG49dC5sZW5ndGgsbztmb3Iocj0wO3I8bjtyKyspbz10W3JdLGVbb109QVtvXTtyZXR1cm4gZX1mdW5jdGlvbiBkcihBKXtmdW5jdGlvbiBlKHQscixuLG8pe2xldCBpPXRbbysrXTtpZihpPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IGc9TnVtYmVyLmlzRmluaXRlKCtpKSxsPW8+PXQubGVuZ3RoO3JldHVybiBpPSFpJiZzLmlzQXJyYXkobik/bi5sZW5ndGg6aSxsPyhzLmhhc093blByb3AobixpKT9uW2ldPVtuW2ldLHJdOm5baV09ciwhZyk6KCghbltpXXx8IXMuaXNPYmplY3QobltpXSkpJiYobltpXT1bXSksZSh0LHIsbltpXSxvKSYmcy5pc0FycmF5KG5baV0pJiYobltpXT1wcihuW2ldKSksIWcpfWlmKHMuaXNGb3JtRGF0YShBKSYmcy5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBzLmZvckVhY2hFbnRyeShBLChyLG4pPT57ZShmcihyKSxuLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBwQT1kcjtmdW5jdGlvbiBtcihBLGUsdCl7aWYocy5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKEEpLHMudHJpbShBKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgcUE9e3RyYW5zaXRpb25hbDpmQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixuPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG89cy5pc09iamVjdChlKTtpZihvJiZzLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSkscy5pc0Zvcm1EYXRhKGUpKXJldHVybiBuP0pTT04uc3RyaW5naWZ5KHBBKGUpKTplO2lmKHMuaXNBcnJheUJ1ZmZlcihlKXx8cy5pc0J1ZmZlcihlKXx8cy5pc1N0cmVhbShlKXx8cy5pc0ZpbGUoZSl8fHMuaXNCbG9iKGUpKXJldHVybiBlO2lmKHMuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKHMuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKG8pe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIFlBKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1zLmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGw9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBUKGc/eyJmaWxlc1tdIjplfTplLGwmJm5ldyBsLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8bj8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLG1yKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxxQS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG49dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoZSYmcy5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bikpe2xldCBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm47dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKGkpdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9wLmZyb20oZyxwLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp5LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp5LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e3FBLmhlYWRlcnNbQV09e319KTt2YXIgaj1xQTt2YXIgaHI9cy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxPZT1BPT57bGV0IGU9e30sdCxyLG47cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe249aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLG4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9aS5zdWJzdHJpbmcobisxKS50cmltKCksISghdHx8ZVt0XSYmaHJbdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgUGU9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGRBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAoZEEpOlN0cmluZyhBKX1mdW5jdGlvbiB5cihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgd3I9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gS0EoQSxlLHQscixuKXtpZihzLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYobiYmKGU9dCksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIERyKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIFNyKEEsZSl7bGV0IHQ9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxuLG8saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIHY9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgbj10aGlzO2Z1bmN0aW9uIG8oZyxsLEMpe2xldCBJPWVBKGwpO2lmKCFJKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgYT1zLmZpbmRLZXkobixJKTsoIWF8fG5bYV09PT12b2lkIDB8fEM9PT0hMHx8Qz09PXZvaWQgMCYmblthXSE9PSExKSYmKG5bYXx8bF09ZEEoZykpfWxldCBpPShnLGwpPT5zLmZvckVhY2goZywoQyxJKT0+byhDLEksbCkpO3JldHVybiBzLmlzUGxhaW5PYmplY3QoZSl8fGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2koZSx0KTpzLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiF3cihlKT9pKE9lKGUpLHQpOmUhPW51bGwmJm8odCxlLHIpLHRoaXN9Z2V0KGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgbj10aGlzW3JdO2lmKCF0KXJldHVybiBuO2lmKHQ9PT0hMClyZXR1cm4geXIobik7aWYocy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxuLHIpO2lmKHMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhuKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fEtBKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxuPSExO2Z1bmN0aW9uIG8oaSl7aWYoaT1lQShpKSxpKXtsZXQgZz1zLmZpbmRLZXkocixpKTtnJiYoIXR8fEtBKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLG49ITApfX1yZXR1cm4gcy5pc0FycmF5KGUpP2UuZm9yRWFjaChvKTpvKGUpLG59Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxuPSExO2Zvcig7ci0tOyl7bGV0IG89dFtyXTsoIWV8fEtBKHRoaXMsdGhpc1tvXSxvLGUsITApKSYmKGRlbGV0ZSB0aGlzW29dLG49ITApfXJldHVybiBufW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIHMuZm9yRWFjaCh0aGlzLChuLG8pPT57bGV0IGk9cy5maW5kS2V5KHIsbyk7aWYoaSl7dFtpXT1kQShuKSxkZWxldGUgdFtvXTtyZXR1cm59bGV0IGc9ZT9EcihvKTpTdHJpbmcobykudHJpbSgpO2chPT1vJiZkZWxldGUgdFtvXSx0W2ddPWRBKG4pLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKHIsbik9PntyIT1udWxsJiZyIT09ITEmJih0W25dPWUmJnMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG49PnIuc2V0KG4pKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1tQZV09dGhpc1tQZV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxuPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG8oaSl7bGV0IGc9ZUEoaSk7cltnXXx8KFNyKG4saSkscltnXT0hMCl9cmV0dXJuIHMuaXNBcnJheShlKT9lLmZvckVhY2gobyk6byhlKSx0aGlzfX07di5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7cy5yZWR1Y2VEZXNjcmlwdG9ycyh2LnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTtzLmZyZWV6ZU1ldGhvZHModik7dmFyIHc9djtmdW5jdGlvbiB0QShBLGUpe2xldCB0PXRoaXN8fGoscj1lfHx0LG49dy5mcm9tKHIuaGVhZGVycyksbz1yLmRhdGE7cmV0dXJuIHMuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe289Zy5jYWxsKHQsbyxuLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG4ubm9ybWFsaXplKCksb31mdW5jdGlvbiByQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFRlKEEsZSx0KXtwLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLHAuRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1zLmluaGVyaXRzKFRlLHAse19fQ0FOQ0VMX186ITB9KTt2YXIgeD1UZTtmdW5jdGlvbiBXQShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBwKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW3AuRVJSX0JBRF9SRVFVRVNULHAuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIHhlPXkuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLG4sbyl7bGV0IGk9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07cy5pc051bWJlcih0KSYmaS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSkscy5pc1N0cmluZyhyKSYmaS5wdXNoKCJwYXRoPSIrcikscy5pc1N0cmluZyhuKSYmaS5wdXNoKCJkb21haW49IituKSxvPT09ITAmJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIGpBKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gdkEoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIG5BKEEsZSl7cmV0dXJuIEEmJiFqQShlKT92QShBLGUpOmV9dmFyIEplPXkuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG4obyl7bGV0IGk9bztyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSxpPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihpKXtsZXQgZz1zLmlzU3RyaW5nKGkpP24oaSk6aTtyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gX0EoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIGtyKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksbj0wLG89MCxpO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24obCl7bGV0IEM9RGF0ZS5ub3coKSxJPXJbb107aXx8KGk9QyksdFtuXT1sLHJbbl09QztsZXQgYT1vLGM9MDtmb3IoO2EhPT1uOyljKz10W2ErK10sYT1hJUE7aWYobj0obisxKSVBLG49PT1vJiYobz0obysxKSVBKSxDLWk8ZSlyZXR1cm47bGV0IEI9SSYmQy1JO3JldHVybiBCP01hdGgucm91bmQoYyoxZTMvQik6dm9pZCAwfX12YXIgSGU9a3I7ZnVuY3Rpb24gTWUoQSxlKXtsZXQgdD0wLHI9SGUoNTAsMjUwKTtyZXR1cm4gbj0+e2xldCBvPW4ubG9hZGVkLGk9bi5sZW5ndGhDb21wdXRhYmxlP24udG90YWw6dm9pZCAwLGc9by10LGw9cihnKSxDPW88PWk7dD1vO2xldCBJPXtsb2FkZWQ6byx0b3RhbDppLHByb2dyZXNzOmk/by9pOnZvaWQgMCxieXRlczpnLHJhdGU6bHx8dm9pZCAwLGVzdGltYXRlZDpsJiZpJiZDPyhpLW8pL2w6dm9pZCAwLGV2ZW50Om59O0lbZT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKEkpfX12YXIgUnI9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixZZT1SciYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG49QS5kYXRhLG89dy5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTppLHdpdGhYU1JGVG9rZW46Z309QSxsO2Z1bmN0aW9uIEMoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbCl9bGV0IEk7aWYocy5pc0Zvcm1EYXRhKG4pKXtpZih5Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8eS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpby5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoST1vLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtRLC4uLmZdPUk/SS5zcGxpdCgiOyIpLm1hcChkPT5kLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO28uc2V0Q29udGVudFR5cGUoW1F8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5mXS5qb2luKCI7ICIpKX19bGV0IGE9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IFE9QS5hdXRoLnVzZXJuYW1lfHwiIixmPUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7by5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoUSsiOiIrZikpfWxldCBjPW5BKEEuYmFzZVVSTCxBLnVybCk7YS5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksQUEoYyxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxhLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIEIoKXtpZighYSlyZXR1cm47bGV0IFE9dy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYSYmYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksZD17ZGF0YTohaXx8aT09PSJ0ZXh0Inx8aT09PSJqc29uIj9hLnJlc3BvbnNlVGV4dDphLnJlc3BvbnNlLHN0YXR1czphLnN0YXR1cyxzdGF0dXNUZXh0OmEuc3RhdHVzVGV4dCxoZWFkZXJzOlEsY29uZmlnOkEscmVxdWVzdDphfTtXQShmdW5jdGlvbihVKXt0KFUpLEMoKX0sZnVuY3Rpb24oVSl7cihVKSxDKCl9LGQpLGE9bnVsbH1pZigib25sb2FkZW5kImluIGE/YS5vbmxvYWRlbmQ9QjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFhfHxhLnJlYWR5U3RhdGUhPT00fHxhLnN0YXR1cz09PTAmJiEoYS5yZXNwb25zZVVSTCYmYS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoQil9LGEub25hYm9ydD1mdW5jdGlvbigpe2EmJihyKG5ldyBwKCJSZXF1ZXN0IGFib3J0ZWQiLHAuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbCl9LGEub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IHAoIk5ldHdvcmsgRXJyb3IiLHAuRVJSX05FVFdPUkssQSxhKSksYT1udWxsfSxhLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBmPUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixkPUEudHJhbnNpdGlvbmFsfHxmQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihmPUEudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgcChmLGQuY2xhcmlmeVRpbWVvdXRFcnJvcj9wLkVUSU1FRE9VVDpwLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGx9LHkuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoZyYmcy5pc0Z1bmN0aW9uKGcpJiYoZz1nKEEpKSxnfHxnIT09ITEmJkplKGMpKSl7bGV0IFE9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmeGUucmVhZChBLnhzcmZDb29raWVOYW1lKTtRJiZvLnNldChBLnhzcmZIZWFkZXJOYW1lLFEpfW49PT12b2lkIDAmJm8uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYSYmcy5mb3JFYWNoKG8udG9KU09OKCksZnVuY3Rpb24oZixkKXthLnNldFJlcXVlc3RIZWFkZXIoZCxmKX0pLHMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoYS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksaSYmaSE9PSJqc29uIiYmKGEucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLE1lKEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS51cGxvYWQmJmEudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixNZShBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYobD1RPT57YSYmKHIoIVF8fFEudHlwZT9uZXcgeChudWxsLEEsYSk6USksYS5hYm9ydCgpLGE9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9sKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpKSk7bGV0IEU9X0EoYyk7aWYoRSYmeS5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtyKG5ldyBwKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLHAuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59YS5zZW5kKG58fG51bGwpfSl9O3ZhciB6QT17aHR0cDpRQSx4aHI6WWV9O3MuZm9yRWFjaCh6QSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBxZT1BPT5gLSAke0F9YCxicj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbUE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsbj17fTtmb3IobGV0IG89MDtvPGU7bysrKXt0PUFbb107bGV0IGk7aWYocj10LCFicih0KSYmKHI9ekFbKGk9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgcChgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHIpYnJlYWs7bltpfHwiIyIrb109cn1pZighcil7bGV0IG89T2JqZWN0LmVudHJpZXMobikubWFwKChbZyxsXSk9PmBhZGFwdGVyICR7Z30gYCsobD09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9vLmxlbmd0aD4xP2BzaW5jZSA6CmArby5tYXAocWUpLmpvaW4oYApgKToiICIrcWUob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgcCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczp6QX07ZnVuY3Rpb24gVkEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHgobnVsbCxBKX1mdW5jdGlvbiBoQShBKXtyZXR1cm4gVkEoQSksQS5oZWFkZXJzPXcuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fGouYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gVkEoQSksci5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz13LmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gckEocil8fChWQShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz13LmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIEtlPUE9PkEgaW5zdGFuY2VvZiB3P3suLi5BfTpBO2Z1bmN0aW9uIFAoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoQyxJLGEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQykmJnMuaXNQbGFpbk9iamVjdChJKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOmF9LEMsSSk6cy5pc1BsYWluT2JqZWN0KEkpP3MubWVyZ2Uoe30sSSk6cy5pc0FycmF5KEkpP0kuc2xpY2UoKTpJfWZ1bmN0aW9uIG4oQyxJLGEpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDLGEpfWVsc2UgcmV0dXJuIHIoQyxJLGEpfWZ1bmN0aW9uIG8oQyxJKXtpZighcy5pc1VuZGVmaW5lZChJKSlyZXR1cm4gcih2b2lkIDAsSSl9ZnVuY3Rpb24gaShDLEkpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDKX1lbHNlIHJldHVybiByKHZvaWQgMCxJKX1mdW5jdGlvbiBnKEMsSSxhKXtpZihhIGluIGUpcmV0dXJuIHIoQyxJKTtpZihhIGluIEEpcmV0dXJuIHIodm9pZCAwLEMpfWxldCBsPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooQyxJKT0+bihLZShDKSxLZShJKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihJKXtsZXQgYT1sW0ldfHxuLGM9YShBW0ldLGVbSV0sSSk7cy5pc1VuZGVmaW5lZChjKSYmYSE9PWd8fCh0W0ldPWMpfSksdH12YXIgeUE9IjEuNi44Ijt2YXIgWkE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57WkFbQV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIFdlPXt9O1pBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihvLGkpe3JldHVybiJbQXhpb3MgdiIreUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitpKyhyPyIuICIrcjoiIil9cmV0dXJuKG8saSxnKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgcChuKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLHAuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhV2VbaV0mJihXZVtpXT0hMCxjb25zb2xlLndhcm4obihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLGksZyk6ITB9fTtmdW5jdGlvbiBGcihBLGUsdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBwKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixwLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhBKSxuPXIubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IG89cltuXSxpPWVbb107aWYoaSl7bGV0IGc9QVtvXSxsPWc9PT12b2lkIDB8fGkoZyxvLEEpO2lmKGwhPT0hMCl0aHJvdyBuZXcgcCgib3B0aW9uICIrbysiIG11c3QgYmUgIitsLHAuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgcCgiVW5rbm93biBvcHRpb24gIitvLHAuRVJSX0JBRF9PUFRJT04pfX12YXIgd0E9e2Fzc2VydE9wdGlvbnM6RnIsdmFsaWRhdG9yczpaQX07dmFyIEo9d0EudmFsaWRhdG9ycyxfPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgSEEscmVzcG9uc2U6bmV3IEhBfX1hc3luYyByZXF1ZXN0KGUsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgbz1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP28mJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmArbyk6ci5zdGFjaz1vfXRocm93IHJ9fV9yZXF1ZXN0KGUsdCl7dHlwZW9mIGU9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPWUpOnQ9ZXx8e30sdD1QKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOm99PXQ7ciE9PXZvaWQgMCYmd0EuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkoudHJhbnNpdGlvbmFsKEouYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKHMuaXNGdW5jdGlvbihuKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTp3QS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpKLmZ1bmN0aW9uLHNlcmlhbGl6ZTpKLmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPW8mJnMubWVyZ2Uoby5jb21tb24sb1t0Lm1ldGhvZF0pO28mJnMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIG9bRV19KSx0LmhlYWRlcnM9dy5jb25jYXQoaSxvKTtsZXQgZz1bXSxsPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihRKXt0eXBlb2YgUS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZRLnJ1bldoZW4odCk9PT0hMXx8KGw9bCYmUS5zeW5jaHJvbm91cyxnLnVuc2hpZnQoUS5mdWxmaWxsZWQsUS5yZWplY3RlZCkpfSk7bGV0IEM9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihRKXtDLnB1c2goUS5mdWxmaWxsZWQsUS5yZWplY3RlZCl9KTtsZXQgSSxhPTAsYztpZighbCl7bGV0IEU9W2hBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsZyksRS5wdXNoLmFwcGx5KEUsQyksYz1FLmxlbmd0aCxJPVByb21pc2UucmVzb2x2ZSh0KTthPGM7KUk9SS50aGVuKEVbYSsrXSxFW2ErK10pO3JldHVybiBJfWM9Zy5sZW5ndGg7bGV0IEI9dDtmb3IoYT0wO2E8Yzspe2xldCBFPWdbYSsrXSxRPWdbYSsrXTt0cnl7Qj1FKEIpfWNhdGNoKGYpe1EuY2FsbCh0aGlzLGYpO2JyZWFrfX10cnl7ST1oQS5jYWxsKHRoaXMsQil9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihhPTAsYz1DLmxlbmd0aDthPGM7KUk9SS50aGVuKENbYSsrXSxDW2ErK10pO3JldHVybiBJfWdldFVyaShlKXtlPVAodGhpcy5kZWZhdWx0cyxlKTtsZXQgdD1uQShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBBQSh0LGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe18ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChQKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtzLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihvLGksZyl7cmV0dXJuIHRoaXMucmVxdWVzdChQKGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm8sZGF0YTppfSkpfX1fLnByb3RvdHlwZVtlXT10KCksXy5wcm90b3R5cGVbZSsiRm9ybSJdPXQoITApfSk7dmFyIG9BPV87dmFyIFhBPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihvKXt0PW99KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG49PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgbz1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7by0tID4wOylyLl9saXN0ZW5lcnNbb10obik7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1uPT57bGV0IG8saT1uZXcgUHJvbWlzZShnPT57ci5zdWJzY3JpYmUoZyksbz1nfSkudGhlbihuKTtyZXR1cm4gaS5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKG8pfSxpfSxlKGZ1bmN0aW9uKG8saSxnKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyB4KG8saSxnKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihuKXtlPW59KSxjYW5jZWw6ZX19fSxqZT1YQTtmdW5jdGlvbiAkQShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gQWUoQSl7cmV0dXJuIHMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIGVlPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhlZSkuZm9yRWFjaCgoW0EsZV0pPT57ZWVbZV09QX0pO3ZhciB2ZT1lZTtmdW5jdGlvbiBfZShBKXtsZXQgZT1uZXcgb0EoQSksdD1aKG9BLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiBzLmV4dGVuZCh0LG9BLnByb3RvdHlwZSxlLHthbGxPd25LZXlzOiEwfSkscy5leHRlbmQodCxlLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gX2UoUChBLG4pKX0sdH12YXIgbT1fZShqKTttLkF4aW9zPW9BO20uQ2FuY2VsZWRFcnJvcj14O20uQ2FuY2VsVG9rZW49amU7bS5pc0NhbmNlbD1yQTttLlZFUlNJT049eUE7bS50b0Zvcm1EYXRhPVQ7bS5BeGlvc0Vycm9yPXA7bS5DYW5jZWw9bS5DYW5jZWxlZEVycm9yO20uYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX07bS5zcHJlYWQ9JEE7bS5pc0F4aW9zRXJyb3I9QWU7bS5tZXJnZUNvbmZpZz1QO20uQXhpb3NIZWFkZXJzPXc7bS5mb3JtVG9KU09OPUE9PnBBKHMuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7bS5nZXRBZGFwdGVyPW1BLmdldEFkYXB0ZXI7bS5IdHRwU3RhdHVzQ29kZT12ZTttLmRlZmF1bHQ9bTt2YXIgej1tO3ZhcntBeGlvczpaaSxBeGlvc0Vycm9yOlhpLENhbmNlbGVkRXJyb3I6JGksaXNDYW5jZWw6QWEsQ2FuY2VsVG9rZW46ZWEsVkVSU0lPTjp0YSxhbGw6cmEsQ2FuY2VsOm5hLGlzQXhpb3NFcnJvcjpvYSxzcHJlYWQ6aWEsdG9Gb3JtRGF0YTphYSxBeGlvc0hlYWRlcnM6c2EsSHR0cFN0YXR1c0NvZGU6SWEsZm9ybVRvSlNPTjpnYSxnZXRBZGFwdGVyOkJhLG1lcmdlQ29uZmlnOkNhfT16O2FzeW5jIGZ1bmN0aW9uIFVyKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgbj1hd2FpdCB6LmdldCh0LHtyZXNwb25zZVR5cGU6ImJsb2IiLHBhcmFtczplfSksbz1VUkwuY3JlYXRlT2JqZWN0VVJMKG4uZGF0YSk7cj1uZXcgV29ya2VyKG8se3R5cGU6Im1vZHVsZSJ9KX1lbHNlIHI9bmV3IFdvcmtlcih0LHt0eXBlOiJtb2R1bGUifSk7cmV0dXJuIHJ9dmFyIGlBPVVyO2Z1bmN0aW9uIHplKEEpe2xldCBlPUdBKEEpLHQ9QTtyZXR1cm4gdC50ZXJtaW5hdGVkPSExLHQud29ya2VyUHJveHk9ZSx0Lm9yaWdpbmFsVGVybWluYXRlPXQudGVybWluYXRlLHQudGVybWluYXRlPSgpPT57dC50ZXJtaW5hdGVkPSEwLHQud29ya2VyUHJveHlbTkFdKCksdC5vcmlnaW5hbFRlcm1pbmF0ZSgpfSx7d29ya2VyUHJveHk6ZSx3b3JrZXI6dH19YXN5bmMgZnVuY3Rpb24gTnIoQSxlLHQpe2xldCByO2lmKEEhPW51bGwpe2xldCBvPUE7cmV0dXJuIG8ud29ya2VyUHJveHkhPT12b2lkIDA/KHI9by53b3JrZXJQcm94eSx7d29ya2VyUHJveHk6cix3b3JrZXI6b30pOnplKEEpfWxldCBuPWF3YWl0IGlBKGUsdCk7cmV0dXJuIHplKG4pfXZhciBWZT1Ocjthc3luYyBmdW5jdGlvbiBHcihBLGUsdCl7bGV0IHI9InVua25vd24iO3R5cGVvZiBBIT0ic3RyaW5nIj9yPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9yPUE6cj10eXBlb2YgZTwidSI/YCR7ZX0vJHtBfWA6QSxyLmVuZHNXaXRoKCIuanMiKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC0zKSksci5lbmRzV2l0aCgiLndhc20iKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC01KSk7bGV0IG49YCR7cn0ud2FzbWAsaT0oYXdhaXQgei5nZXQobix7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KSkuZGF0YTtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke3J9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6aX0pfXZhciBaZT1Hcjt2YXIgWGU9YXN5bmMoKT0+V2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNSwxLDk2LDAsMSwxMjMsMywyLDEsMCwxMCwxMCwxLDgsMCw2NSwwLDI1MywxNSwyNTMsOTgsMTFdKSk7dmFyIGV0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLCRlPW5ldyBUZXh0RW5jb2RlcixBdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gTHIoQSxlKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxyPUEuZnNfb3BlbihlLHQuZmxhZ3MpLG89QS5mc19zdGF0KGUpLnNpemUsaT1udWxsO2V0P2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKG8pOmk9bmV3IEFycmF5QnVmZmVyKG8pO2xldCBnPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBBLmZzX3JlYWQocixnLDAsbywwKSxBLmZzX2Nsb3NlKHIpLGd9ZnVuY3Rpb24gdHQoQSxlLHQpe2xldCByPW51bGw7ZXQ/cj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6cj1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IG49bmV3IFVpbnQ4QXJyYXkociksbz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZSx0KTtyZXR1cm4gbi5zZXQobyksbn1mdW5jdGlvbiBoKEEsZSx0LHIpe2xldCBuPTA7cmV0dXJuIGUhPT1udWxsJiYobj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LHIsZS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShlLmJ1ZmZlciksbikpLG59ZnVuY3Rpb24gTShBLGUsdCl7bGV0IHI9SlNPTi5zdHJpbmdpZnkoZSksbj1BLmxlbmd0aEJ5dGVzVVRGOChyKSsxLG89QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LG5dKTtBLnN0cmluZ1RvVVRGOChyLG8sbil9ZnVuY3Rpb24gRChBLGUsdCxyKXtsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxvPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLGk9dHQoQSxuLG8pO3JldHVybiBOKHIsaS5idWZmZXIpfWZ1bmN0aW9uIERBKEEsZSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxlXSkscj1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShyKX1mdW5jdGlvbiBPcihBLGUsdCxyKXtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oQyxJKXtzd2l0Y2goQy50eXBlKXtjYXNlIHUuVGV4dFN0cmVhbTp7bGV0IGE9JGUuZW5jb2RlKEMuZGF0YS5kYXRhKSxjPWgoQSxhLEksMCksQj17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O00oQSxCLEkpO2JyZWFrfWNhc2UgdS5Kc29uQ29tcGF0aWJsZTp7bGV0IGE9JGUuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEMuZGF0YSkpLGM9aChBLGEsSSwwKSxCPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07TShBLEIsSSk7YnJlYWt9Y2FzZSB1LkJpbmFyeVN0cmVhbTp7bGV0IGE9Qy5kYXRhLmRhdGEsYz1oKEEsYSxJLDApLEI9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsQixJKTticmVha31jYXNlIHUuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKEMuZGF0YS5wYXRoLEMuZGF0YS5kYXRhKTticmVha31jYXNlIHUuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoQy5kYXRhLnBhdGgsQy5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgdS5JbWFnZTp7bGV0IGE9Qy5kYXRhLGM9aChBLGEuZGF0YSxJLDApLEI9aChBLGEuZGlyZWN0aW9uLEksMSksRT10eXBlb2YgYS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShhLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sUT17aW1hZ2VUeXBlOmEuaW1hZ2VUeXBlLG5hbWU6YS5uYW1lLG9yaWdpbjphLm9yaWdpbixzcGFjaW5nOmEuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsc2l6ZTphLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxtZXRhZGF0YTpFfTtNKEEsUSxJKTticmVha31jYXNlIHUuTWVzaDp7bGV0IGE9Qy5kYXRhLGM9aChBLGEucG9pbnRzLEksMCksQj1oKEEsYS5jZWxscyxJLDEpLEU9aChBLGEucG9pbnREYXRhLEksMiksUT1oKEEsYS5jZWxsRGF0YSxJLDMpLGY9e21lc2hUeXBlOmEubWVzaFR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsbnVtYmVyT2ZDZWxsczphLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsY2VsbEJ1ZmZlclNpemU6YS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTtNKEEsZixJKTticmVha31jYXNlIHUuUG9pbnRTZXQ6e2xldCBhPUMuZGF0YSxjPWgoQSxhLnBvaW50cyxJLDApLEI9aChBLGEucG9pbnREYXRhLEksMSksRT17cG9pbnRTZXRUeXBlOmEucG9pbnRTZXRUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07TShBLEUsSSk7YnJlYWt9Y2FzZSB1LlBvbHlEYXRhOntsZXQgYT1DLmRhdGEsYz1oKEEsYS5wb2ludHMsSSwwKSxCPWgoQSxhLnZlcnRpY2VzLEksMSksRT1oKEEsYS5saW5lcyxJLDIpLFE9aChBLGEucG9seWdvbnMsSSwzKSxmPWgoQSxhLnRyaWFuZ2xlU3RyaXBzLEksNCksZD1oKEEsYS5wb2ludERhdGEsSSw1KSxGPWgoQSxhLnBvaW50RGF0YSxJLDYpLFU9e3BvbHlEYXRhVHlwZTphLnBvbHlEYXRhVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6YS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbGluZXNCdWZmZXJTaXplOmEubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTphLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6YS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0Z9YH07TShBLFUsSSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG49QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKEMpe3Rocm93IHR5cGVvZiBDPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKEMpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLEN9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShuKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLGc9QS5nZXRNb2R1bGVTdGRlcnIoKSxsPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZvPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKEMsSSl7bGV0IGE9bnVsbDtzd2l0Y2goQy50eXBlKXtjYXNlIHUuVGV4dFN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxRPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO2E9e2RhdGE6QXQuZGVjb2RlKFEpfTticmVha31jYXNlIHUuSnNvbkNvbXBhdGlibGU6e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksUT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTthPUpTT04ucGFyc2UoQXQuZGVjb2RlKFEpKTticmVha31jYXNlIHUuQmluYXJ5U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pO2E9e2RhdGE6dHQoQSxCLEUpfTticmVha31jYXNlIHUuVGV4dEZpbGU6e2E9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKEMuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSB1LkJpbmFyeUZpbGU6e2E9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpMcihBLEMuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSB1LkltYWdlOntsZXQgQj1EQShBLEkpO0IuZGF0YT1EKEEsSSwwLEIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEIuZGlyZWN0aW9uPUQoQSxJLDEsWS5GbG9hdDY0KSxCLm1ldGFkYXRhPW5ldyBNYXAoQi5tZXRhZGF0YSksYT1CO2JyZWFrfWNhc2UgdS5NZXNoOntsZXQgQj1EQShBLEkpO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1EKEEsSSwwLEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1OKEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxzPjA/Qi5jZWxscz1EKEEsSSwxLEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkIuY2VsbHM9TihCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RChBLEksMixCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1OKEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RChBLEksMyxCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9TihCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPUI7YnJlYWt9Y2FzZSB1LlBvaW50U2V0OntsZXQgQj1EQShBLEkpO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1EKEEsSSwwLEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9TihCLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1EKEEsSSwxLEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1OKEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1CO2JyZWFrfWNhc2UgdS5Qb2x5RGF0YTp7bGV0IEI9REEoQSxJKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RChBLEksMCxZLkZsb2F0MzIpOkIucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9CLnZlcnRpY2VzPUQoQSxJLDEsUy5VSW50MzIpOkIudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEIubGluZXNCdWZmZXJTaXplPjA/Qi5saW5lcz1EKEEsSSwyLFMuVUludDMyKTpCLmxpbmVzPW5ldyBVaW50MzJBcnJheSxCLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0IucG9seWdvbnM9RChBLEksMyxTLlVJbnQzMik6Qi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9CLnRyaWFuZ2xlU3RyaXBzPUQoQSxJLDQsUy5VSW50MzIpOkIudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUQoQSxJLDUsQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPU4oQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RChBLEksNixCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPU4oQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9QjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBjPXt0eXBlOkMudHlwZSxkYXRhOmF9O2wucHVzaChjKX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDppLHN0ZGVycjpnLG91dHB1dHM6bH19dmFyIHJ0PU9yO3ZhciBQcj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gVHIoQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8QS5sZW5ndGg7cisrKXtsZXQgbj14cihBW3JdLGUpO24hPT1udWxsJiZ0LnB1c2gobil9cmV0dXJuIHR9ZnVuY3Rpb24geHIoQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSxQciYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT90OnQuc2xpY2UoMCl9dmFyIG50PVRyO2Z1bmN0aW9uIEpyKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBvdD1KcjtmdW5jdGlvbiBIcihBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgaXQ9SHI7ZnVuY3Rpb24gTXIoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIGF0PU1yO3ZhciBZcjtmdW5jdGlvbiBTQSgpe3JldHVybiBZcn12YXIgcXI7ZnVuY3Rpb24gc3QoKXtyZXR1cm4gcXJ9dmFyIEtyO2Z1bmN0aW9uIGtBKCl7cmV0dXJuIEtyfXZhciB0ZT1uZXcgTWFwO2Z1bmN0aW9uIFdyKCl7bGV0IEE9a0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIEl0KCl7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gUkEoKXtsZXQgQT1zdCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIGpyKEEsZSx0KXtsZXQgcj1BLG49QTtpZih0eXBlb2YgQSE9InN0cmluZyImJihyPW5ldyBVUkwoQS5ocmVmKSxuPXIuaHJlZiksdGUuaGFzKG4pKXJldHVybiB0ZS5nZXQobik7e2xldCBvPWF3YWl0IFplKEEsZT8udG9TdHJpbmcoKT8/SXQoKSx0Pz9SQSgpKTtyZXR1cm4gdGUuc2V0KG4sbyksb319YXN5bmMgZnVuY3Rpb24gdnIoQSxlLHQscixuKXtpZighYXdhaXQgWGUoKSl7bGV0IGY9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KGYpLG5ldyBFcnJvcihmKX1sZXQgbz1uPy53ZWJXb3JrZXI/P251bGw7aWYobz09PSExKXtsZXQgZj1hd2FpdCBqcihBLnRvU3RyaW5nKCksbj8ucGlwZWxpbmVCYXNlVXJsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1JBKCkpO3JldHVybiBydChmLGUsdCxyKX1sZXQgaT1vLGc9bj8ucGlwZWxpbmVXb3JrZXJVcmw/P1dyKCksbD10eXBlb2YgZyE9InN0cmluZyImJnR5cGVvZiBnPy5ocmVmPCJ1Ij9nLmhyZWY6Zyx7d29ya2VyUHJveHk6Qyx3b3JrZXI6SX09YXdhaXQgVmUoaSxsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1JBKCkpO2k9STtsZXQgYT1bXTtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oZil7aWYoZi50eXBlPT09dS5CaW5hcnlTdHJlYW0pe2xldCBkPWYuZGF0YS5kYXRhO2EucHVzaChkKX1lbHNlIGlmKGYudHlwZT09PXUuQmluYXJ5RmlsZSl7bGV0IGQ9Zi5kYXRhLmRhdGE7YS5wdXNoKGQpfWVsc2UgaWYoZi50eXBlPT09dS5JbWFnZSl7bGV0IGQ9Zi5kYXRhO2QuZGF0YSE9PW51bGwmJmEucHVzaCguLi5vdChkKSl9ZWxzZSBpZihmLnR5cGU9PT11Lk1lc2gpe2xldCBkPWYuZGF0YTthLnB1c2goLi4uaXQoZCkpfWVsc2UgaWYoZi50eXBlPT09dS5Qb2x5RGF0YSl7bGV0IGQ9Zi5kYXRhO2EucHVzaCguLi5hdChkKSl9fSk7bGV0IGM9bj8ucGlwZWxpbmVCYXNlVXJsPz9JdCgpLEI9dHlwZW9mIGMhPSJzdHJpbmciJiZ0eXBlb2YgYz8uaHJlZjwidSI/Yy5ocmVmOmMsRT1yIT1udWxsP0xBKHIsbnQoYSxuPy5ub0NvcHkpKTpudWxsLFE9YXdhaXQgQy5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCksQixlLHQsRSxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9SQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6US5yZXR1cm5WYWx1ZSxzdGRvdXQ6US5zdGRvdXQsc3RkZXJyOlEuc3RkZXJyLG91dHB1dHM6US5vdXRwdXRzLHdlYldvcmtlcjppfX12YXIgYj12cjt2YXIgX3I9bnVsbDtmdW5jdGlvbiBndCgpe3JldHVybiBfcn12YXIgcmUsenI9YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGl0ay13YXNtL2Rvd25zYW1wbGVAJHtiQX0vZGlzdC9waXBlbGluZXNgO2Z1bmN0aW9uIHRzKEEpe3JlPUF9ZnVuY3Rpb24gTCgpe2lmKHR5cGVvZiByZTwidSIpcmV0dXJuIHJlO2xldCBBPVNBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOnpyfXZhciBuZSxWcj1udWxsO2Z1bmN0aW9uIEJ0KEEpe25lPUF9ZnVuY3Rpb24gUigpe2lmKHR5cGVvZiBuZTwidSIpcmV0dXJuIG5lO2xldCBBPWtBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOlZyfXZhciBWPW51bGw7YXN5bmMgZnVuY3Rpb24gQ3QoKXtsZXQgQT1SKCksZT10eXBlb2YgQSE9InN0cmluZyImJnR5cGVvZiBBPy5ocmVmPCJ1Ij9BLmhyZWY6QTtWPWF3YWl0IGlBKGUpfWZ1bmN0aW9uIElzKEEpe1Y9QX1hc3luYyBmdW5jdGlvbiBPKCl7aWYoViE9PW51bGwpcmV0dXJuIFYudGVybWluYXRlZCYmYXdhaXQgQ3QoKSxWO2xldCBBPWd0KCk7cmV0dXJuIEEhPT1udWxsP0E6KGF3YWl0IEN0KCksVil9YXN5bmMgZnVuY3Rpb24gWnIoQSxlPXtzaHJpbmtGYWN0b3JzOlsyLDJdfSl7bGV0IHQ9W3t0eXBlOnUuSW1hZ2V9XSxyPVt7dHlwZTp1LkltYWdlLGRhdGE6QX1dLG49W107aWYobi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUuc2hyaW5rRmFjdG9ycyl7aWYoZS5zaHJpbmtGYWN0b3JzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignInNocmluay1mYWN0b3JzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1zaHJpbmstZmFjdG9ycyIpLGF3YWl0IFByb21pc2UuYWxsKGUuc2hyaW5rRmFjdG9ycy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmbi5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgZz0iZG93bnNhbXBsZS1iaW4tc2hyaW5rIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBPKCkpO2xldHt3ZWJXb3JrZXI6QyxyZXR1cm5WYWx1ZTpJLHN0ZGVycjphLG91dHB1dHM6Y309YXdhaXQgYihnLG4sdCxyLHtwaXBlbGluZUJhc2VVcmw6TCgpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoSSE9PTAmJmEhPT0iIil0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpDLGRvd25zYW1wbGVkOmNbMF0/LmRhdGF9fXZhciBYcj1acjthc3luYyBmdW5jdGlvbiAkcihBLGU9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgdD1be3R5cGU6dS5JbWFnZX1dLHI9W3t0eXBlOnUuSW1hZ2UsZGF0YTpBfV0sbj1bXTtpZihuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5zaHJpbmtGYWN0b3JzKXtpZihlLnNocmlua0ZhY3RvcnMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCcic2hyaW5rLWZhY3RvcnMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLXNocmluay1mYWN0b3JzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5zaHJpbmtGYWN0b3JzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9aWYoZS5jcm9wUmFkaXVzKXtpZihlLmNyb3BSYWRpdXMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCciY3JvcC1yYWRpdXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLWNyb3AtcmFkaXVzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5jcm9wUmFkaXVzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9bGV0IGc9ImRvd25zYW1wbGUtbGFiZWwtaW1hZ2UiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IE8oKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOkksc3RkZXJyOmEsb3V0cHV0czpjfT1hd2FpdCBiKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpMKCkscGlwZWxpbmVXb3JrZXJVcmw6UigpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihJIT09MCYmYSE9PSIiKXRocm93IG5ldyBFcnJvcihhKTtyZXR1cm57d2ViV29ya2VyOkMsZG93bnNhbXBsZWQ6Y1swXT8uZGF0YX19dmFyIEFuPSRyO2FzeW5jIGZ1bmN0aW9uIGVuKEE9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgZT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX1dLHQ9W10scj1bXTtpZihyLnB1c2goIjAiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdHlwZW9mIEEuc2hyaW5rRmFjdG9yczwidSIpe2lmKEEuc2hyaW5rRmFjdG9ycy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzaHJpbmstZmFjdG9ycyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtyLnB1c2goIi0tc2hyaW5rLWZhY3RvcnMiKSxhd2FpdCBQcm9taXNlLmFsbChBLnNocmlua0ZhY3RvcnMubWFwKGFzeW5jIGM9PntyLnB1c2goYy50b1N0cmluZygpKX0pKX1sZXQgbz0iZG93bnNhbXBsZS1zaWdtYSIsaT1BPy53ZWJXb3JrZXI7aT09PXZvaWQgMCYmKGk9YXdhaXQgTygpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6bCxzdGRlcnI6QyxvdXRwdXRzOkl9PWF3YWl0IGIobyxyLGUsdCx7cGlwZWxpbmVCYXNlVXJsOkwoKSxwaXBlbGluZVdvcmtlclVybDpSKCksd2ViV29ya2VyOmksbm9Db3B5OkE/Lm5vQ29weX0pO2lmKGwhPT0wJiZDIT09IiIpdGhyb3cgbmV3IEVycm9yKEMpO3JldHVybnt3ZWJXb3JrZXI6ZyxzaWdtYTpJWzBdPy5kYXRhfX12YXIgdG49ZW47YXN5bmMgZnVuY3Rpb24gcm4oQSxlPXtzaHJpbmtGYWN0b3JzOlsyLDJdfSl7bGV0IHQ9W3t0eXBlOnUuSW1hZ2V9XSxyPVt7dHlwZTp1LkltYWdlLGRhdGE6QX1dLG49W107aWYobi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUuc2hyaW5rRmFjdG9ycyl7aWYoZS5zaHJpbmtGYWN0b3JzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignInNocmluay1mYWN0b3JzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1zaHJpbmstZmFjdG9ycyIpLGF3YWl0IFByb21pc2UuYWxsKGUuc2hyaW5rRmFjdG9ycy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWlmKGUuY3JvcFJhZGl1cyl7aWYoZS5jcm9wUmFkaXVzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignImNyb3AtcmFkaXVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1jcm9wLXJhZGl1cyIpLGF3YWl0IFByb21pc2UuYWxsKGUuY3JvcFJhZGl1cy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWxldCBnPSJkb3duc2FtcGxlIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBPKCkpO2xldHt3ZWJXb3JrZXI6QyxyZXR1cm5WYWx1ZTpJLHN0ZGVycjphLG91dHB1dHM6Y309YXdhaXQgYihnLG4sdCxyLHtwaXBlbGluZUJhc2VVcmw6TCgpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoSSE9PTAmJmEhPT0iIil0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpDLGRvd25zYW1wbGVkOmNbMF0/LmRhdGF9fXZhciBubj1ybjthc3luYyBmdW5jdGlvbiBvbihBPXtzaXplOlsxLDFdLHNpZ21hOlsxLDFdfSl7bGV0IGU9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9XSx0PVtdLHI9W107aWYoci5wdXNoKCIwIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLHR5cGVvZiBBLnNpemU8InUiKXtpZihBLnNpemUubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcic2l6ZSIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtyLnB1c2goIi0tc2l6ZSIpLGF3YWl0IFByb21pc2UuYWxsKEEuc2l6ZS5tYXAoYXN5bmMgYz0+e3IucHVzaChjLnRvU3RyaW5nKCkpfSkpfWlmKHR5cGVvZiBBLnNpZ21hPCJ1Iil7aWYoQS5zaWdtYS5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzaWdtYSIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtyLnB1c2goIi0tc2lnbWEiKSxhd2FpdCBQcm9taXNlLmFsbChBLnNpZ21hLm1hcChhc3luYyBjPT57ci5wdXNoKGMudG9TdHJpbmcoKSl9KSl9dHlwZW9mIEEubWF4S2VybmVsV2lkdGg8InUiJiZyLnB1c2goIi0tbWF4LWtlcm5lbC13aWR0aCIsQS5tYXhLZXJuZWxXaWR0aC50b1N0cmluZygpKSx0eXBlb2YgQS5tYXhLZXJuZWxFcnJvcjwidSImJnIucHVzaCgiLS1tYXgta2VybmVsLWVycm9yIixBLm1heEtlcm5lbEVycm9yLnRvU3RyaW5nKCkpO2xldCBvPSJnYXVzc2lhbi1rZXJuZWwtcmFkaXVzIixpPUE/LndlYldvcmtlcjtpPT09dm9pZCAwJiYoaT1hd2FpdCBPKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTpsLHN0ZGVycjpDLG91dHB1dHM6SX09YXdhaXQgYihvLHIsZSx0LHtwaXBlbGluZUJhc2VVcmw6TCgpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6aSxub0NvcHk6QT8ubm9Db3B5fSk7aWYobCE9PTAmJkMhPT0iIil0aHJvdyBuZXcgRXJyb3IoQyk7cmV0dXJue3dlYldvcmtlcjpnLHJhZGl1czpJWzBdPy5kYXRhfX12YXIgYW49b247dmFyIGx0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciBJST1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGVJPShBLHQpPT57Zm9yKHZhciBJIGluIHQpSUkoQSxJLHtnZXQ6dFtJXSxlbnVtZXJhYmxlOiEwfSl9O3ZhciB2QT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxnST1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxyST1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IikscEE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGVBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSwkQT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixvST17Y2FuSGFuZGxlOkE9PiRBKEEpJiZBW3ZBXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOnQscG9ydDI6SX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBpQShBLHQpLFtJLFtJXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksbkkoQSl9fSxpST17Y2FuSGFuZGxlOkE9PiRBKEEpJiZlQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCB0O3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/dD17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OnQ9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW3QsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sQXQ9bmV3IE1hcChbWyJwcm94eSIsb0ldLFsidGhyb3ciLGlJXV0pO2Z1bmN0aW9uIENJKEEsdCl7Zm9yKGxldCBJIG9mIEEpaWYodD09PUl8fEk9PT0iKiJ8fEkgaW5zdGFuY2VvZiBSZWdFeHAmJkkudGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpQShBLHQ9Z2xvYmFsVGhpcyxJPVsiKiJdKXt0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGUoZyl7aWYoIWd8fCFnLmRhdGEpcmV0dXJuO2lmKCFDSShJLGcub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7Zy5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOnIsdHlwZTpvLHBhdGg6bn09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sZy5kYXRhKSxhPShnLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKGIpLFE7dHJ5e2xldCBCPW4uc2xpY2UoMCwtMSkucmVkdWNlKChmLHMpPT5mW3NdLEEpLGk9bi5yZWR1Y2UoKGYscyk9PmZbc10sQSk7c3dpdGNoKG8pe2Nhc2UiR0VUIjpRPWk7YnJlYWs7Y2FzZSJTRVQiOkJbbi5zbGljZSgtMSlbMF1dPWIoZy5kYXRhLnZhbHVlKSxRPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOlE9aS5hcHBseShCLGEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IGkoLi4uYSk7UT1hSShmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6c309bmV3IE1lc3NhZ2VDaGFubmVsO2lBKEEscyksUT1GQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpRPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goQil7UT17dmFsdWU6QixbZUFdOjB9fVByb21pc2UucmVzb2x2ZShRKS5jYXRjaChCPT4oe3ZhbHVlOkIsW2VBXTowfSkpLnRoZW4oQj0+e2xldFtpLGZdPW9BKEIpO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZiksbz09PSJSRUxFQVNFIiYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZSksdHQodCkscEEgaW4gQSYmdHlwZW9mIEFbcEFdPT0iZnVuY3Rpb24iJiZBW3BBXSgpKX0pLmNhdGNoKEI9PntsZXRbaSxmXT1vQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2VBXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse2lkOnJ9KSxmKX0pfSksdC5zdGFydCYmdC5zdGFydCgpfWZ1bmN0aW9uIEJJKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIHR0KEEpe0JJKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gbkkoQSx0KXtyZXR1cm4gU0EoQSxbXSx0KX1mdW5jdGlvbiBJQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gSXQoQSl7cmV0dXJuIHEoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57dHQoQSl9KX12YXIgZ0E9bmV3IFdlYWtNYXAsckE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IHQ9KGdBLmdldChBKXx8MCktMTtnQS5zZXQoQSx0KSx0PT09MCYmSXQoQSl9KTtmdW5jdGlvbiBzSShBLHQpe2xldCBJPShnQS5nZXQodCl8fDApKzE7Z0Euc2V0KHQsSSksckEmJnJBLnJlZ2lzdGVyKEEsdCxBKX1mdW5jdGlvbiBRSShBKXtyQSYmckEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBTQShBLHQ9W10sST1mdW5jdGlvbigpe30pe2xldCBlPSExLGc9bmV3IFByb3h5KEkse2dldChyLG8pe2lmKElBKGUpLG89PT1ySSlyZXR1cm4oKT0+e1FJKGcpLEl0KEEpLGU9ITB9O2lmKG89PT0idGhlbiIpe2lmKHQubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+Z307bGV0IG49cShBLHt0eXBlOiJHRVQiLHBhdGg6dC5tYXAoYT0+YS50b1N0cmluZygpKX0pLnRoZW4oYik7cmV0dXJuIG4udGhlbi5iaW5kKG4pfXJldHVybiBTQShBLFsuLi50LG9dKX0sc2V0KHIsbyxuKXtJQShlKTtsZXRbYSxRXT1vQShuKTtyZXR1cm4gcShBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnQsb10ubWFwKEI9PkIudG9TdHJpbmcoKSksdmFsdWU6YX0sUSkudGhlbihiKX0sYXBwbHkocixvLG4pe0lBKGUpO2xldCBhPXRbdC5sZW5ndGgtMV07aWYoYT09PWdJKXJldHVybiBxKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oYik7aWYoYT09PSJiaW5kIilyZXR1cm4gU0EoQSx0LnNsaWNlKDAsLTEpKTtsZXRbUSxCXT1fQShuKTtyZXR1cm4gcShBLHt0eXBlOiJBUFBMWSIscGF0aDp0Lm1hcChpPT5pLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpRfSxCKS50aGVuKGIpfSxjb25zdHJ1Y3QocixvKXtJQShlKTtsZXRbbixhXT1fQShvKTtyZXR1cm4gcShBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6dC5tYXAoUT0+US50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6bn0sYSkudGhlbihiKX19KTtyZXR1cm4gc0koZyxBKSxnfWZ1bmN0aW9uIEVJKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIF9BKEEpe2xldCB0PUEubWFwKG9BKTtyZXR1cm5bdC5tYXAoST0+SVswXSksRUkodC5tYXAoST0+SVsxXSkpXX12YXIgZXQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRkEoQSx0KXtyZXR1cm4gZXQuc2V0KEEsdCksQX1mdW5jdGlvbiBhSShBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbdkFdOiEwfSl9ZnVuY3Rpb24gb0EoQSl7Zm9yKGxldFt0LEldb2YgQXQpaWYoSS5jYW5IYW5kbGUoQSkpe2xldFtlLGddPUkuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTp0LHZhbHVlOmV9LGddfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxldC5nZXQoQSl8fFtdXX1mdW5jdGlvbiBiKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEF0LmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gcShBLHQsSSl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntsZXQgZz1jSSgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihvKXshby5kYXRhfHwhby5kYXRhLmlkfHxvLmRhdGEuaWQhPT1nfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxlKG8uZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6Z30sdCksSSl9KX1mdW5jdGlvbiBjSSgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gVyhBLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOmZJfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpVQX09T2JqZWN0LEJBPShBPT50PT57bGV0IEk9ZkkuY2FsbCh0KTtyZXR1cm4gQVtJXXx8KEFbSV09SS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLFU9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLHQ9PkJBKHQpPT09QSksbkE9QT0+dD0+dHlwZW9mIHQ9PT1BLHtpc0FycmF5Okt9PUFycmF5LFo9bkEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGxJKEEpe3JldHVybiBBIT09bnVsbCYmIVooQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWihBLmNvbnN0cnVjdG9yKSYmRihBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgaXQ9VSgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBESShBKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOnQ9QSYmQS5idWZmZXImJml0KEEuYnVmZmVyKSx0fXZhciB1ST1uQSgic3RyaW5nIiksRj1uQSgiZnVuY3Rpb24iKSxDdD1uQSgibnVtYmVyIiksc0E9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixoST1BPT5BPT09ITB8fEE9PT0hMSxDQT1BPT57aWYoQkEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1VQShBKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxkST1VKCJEYXRlIikseUk9VSgiRmlsZSIpLHdJPVUoIkJsb2IiKSxtST1VKCJGaWxlTGlzdCIpLHBJPUE9PnNBKEEpJiZGKEEucGlwZSksU0k9QT0+e2xldCB0O3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fEYoQS5hcHBlbmQpJiYoKHQ9QkEoQSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZGKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LEZJPVUoIlVSTFNlYXJjaFBhcmFtcyIpLFJJPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBWKEEsdCx7YWxsT3duS2V5czpJPSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IGUsZztpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSksSyhBKSlmb3IoZT0wLGc9QS5sZW5ndGg7ZTxnO2UrKyl0LmNhbGwobnVsbCxBW2VdLGUsQSk7ZWxzZXtsZXQgcj1JP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG89ci5sZW5ndGgsbjtmb3IoZT0wO2U8bztlKyspbj1yW2VdLHQuY2FsbChudWxsLEFbbl0sbixBKX19ZnVuY3Rpb24gQnQoQSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgST1PYmplY3Qua2V5cyhBKSxlPUkubGVuZ3RoLGc7Zm9yKDtlLS0gPjA7KWlmKGc9SVtlXSx0PT09Zy50b0xvd2VyQ2FzZSgpKXJldHVybiBnO3JldHVybiBudWxsfXZhciBudD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLHN0PUE9PiFaKEEpJiZBIT09bnQ7ZnVuY3Rpb24gTkEoKXtsZXR7Y2FzZWxlc3M6QX09c3QodGhpcykmJnRoaXN8fHt9LHQ9e30sST0oZSxnKT0+e2xldCByPUEmJkJ0KHQsZyl8fGc7Q0EodFtyXSkmJkNBKGUpP3Rbcl09TkEodFtyXSxlKTpDQShlKT90W3JdPU5BKHt9LGUpOksoZSk/dFtyXT1lLnNsaWNlKCk6dFtyXT1lfTtmb3IobGV0IGU9MCxnPWFyZ3VtZW50cy5sZW5ndGg7ZTxnO2UrKylhcmd1bWVudHNbZV0mJlYoYXJndW1lbnRzW2VdLEkpO3JldHVybiB0fXZhciBOST0oQSx0LEkse2FsbE93bktleXM6ZX09e30pPT4oVih0LChnLHIpPT57SSYmRihnKT9BW3JdPVcoZyxJKTpBW3JdPWd9LHthbGxPd25LZXlzOmV9KSxBKSxVST1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLEdJPShBLHQsSSxlKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsZSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTp0LnByb3RvdHlwZX0pLEkmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsSSl9LGtJPShBLHQsSSxlKT0+e2xldCBnLHIsbyxuPXt9O2lmKHQ9dHx8e30sQT09bnVsbClyZXR1cm4gdDtkb3tmb3IoZz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxyPWcubGVuZ3RoO3ItLSA+MDspbz1nW3JdLCghZXx8ZShvLEEsdCkpJiYhbltvXSYmKHRbb109QVtvXSxuW29dPSEwKTtBPUkhPT0hMSYmVUEoQSl9d2hpbGUoQSYmKCFJfHxJKEEsdCkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LExJPShBLHQsSSk9PntBPVN0cmluZyhBKSwoST09PXZvaWQgMHx8ST5BLmxlbmd0aCkmJihJPUEubGVuZ3RoKSxJLT10Lmxlbmd0aDtsZXQgZT1BLmluZGV4T2YodCxJKTtyZXR1cm4gZSE9PS0xJiZlPT09SX0sSkk9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKEsoQSkpcmV0dXJuIEE7bGV0IHQ9QS5sZW5ndGg7aWYoIUN0KHQpKXJldHVybiBudWxsO2xldCBJPW5ldyBBcnJheSh0KTtmb3IoO3QtLSA+MDspSVt0XT1BW3RdO3JldHVybiBJfSxIST0oQT0+dD0+QSYmdCBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmVUEoVWludDhBcnJheSkpLFlJPShBLHQpPT57bGV0IGU9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxnO2Zvcig7KGc9ZS5uZXh0KCkpJiYhZy5kb25lOyl7bGV0IHI9Zy52YWx1ZTt0LmNhbGwoQSxyWzBdLHJbMV0pfX0sYkk9KEEsdCk9PntsZXQgSSxlPVtdO2Zvcig7KEk9QS5leGVjKHQpKSE9PW51bGw7KWUucHVzaChJKTtyZXR1cm4gZX0sTUk9VSgiSFRNTEZvcm1FbGVtZW50IikscUk9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24oSSxlLGcpe3JldHVybiBlLnRvVXBwZXJDYXNlKCkrZ30pLHJ0PSgoe2hhc093blByb3BlcnR5OkF9KT0+KHQsSSk9PkEuY2FsbCh0LEkpKShPYmplY3QucHJvdG90eXBlKSxLST1VKCJSZWdFeHAiKSxRdD0oQSx0KT0+e2xldCBJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLGU9e307VihJLChnLHIpPT57bGV0IG87KG89dChnLHIsQSkpIT09ITEmJihlW3JdPW98fGcpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxlKX0sT0k9QT0+e1F0KEEsKHQsSSk9PntpZihGKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoSSkhPT0tMSlyZXR1cm4hMTtsZXQgZT1BW0ldO2lmKEYoZSkpe2lmKHQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdCl7dC53cml0YWJsZT0hMTtyZXR1cm59dC5zZXR8fCh0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrSSsiXCciKX0pfX0pfSxUST0oQSx0KT0+e2xldCBJPXt9LGU9Zz0+e2cuZm9yRWFjaChyPT57SVtyXT0hMH0pfTtyZXR1cm4gSyhBKT9lKEEpOmUoU3RyaW5nKEEpLnNwbGl0KHQpKSxJfSxQST0oKT0+e30seEk9KEEsdCk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOnQpLFJBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsb3Q9IjAxMjM0NTY3ODkiLEV0PXtESUdJVDpvdCxBTFBIQTpSQSxBTFBIQV9ESUdJVDpSQStSQS50b1VwcGVyQ2FzZSgpK290fSxqST0oQT0xNix0PUV0LkFMUEhBX0RJR0lUKT0+e2xldCBJPSIiLHtsZW5ndGg6ZX09dDtmb3IoO0EtLTspSSs9dFtNYXRoLnJhbmRvbSgpKmV8MF07cmV0dXJuIEl9O2Z1bmN0aW9uIFdJKEEpe3JldHVybiEhKEEmJkYoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBaST1BPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxJPShlLGcpPT57aWYoc0EoZSkpe2lmKHQuaW5kZXhPZihlKT49MClyZXR1cm47aWYoISgidG9KU09OImluIGUpKXt0W2ddPWU7bGV0IHI9SyhlKT9bXTp7fTtyZXR1cm4gVihlLChvLG4pPT57bGV0IGE9SShvLGcrMSk7IVooYSkmJihyW25dPWEpfSksdFtnXT12b2lkIDAscn19cmV0dXJuIGV9O3JldHVybiBJKEEsMCl9LFZJPVUoIkFzeW5jRnVuY3Rpb24iKSxYST1BPT5BJiYoc0EoQSl8fEYoQSkpJiZGKEEudGhlbikmJkYoQS5jYXRjaCksQz17aXNBcnJheTpLLGlzQXJyYXlCdWZmZXI6aXQsaXNCdWZmZXI6bEksaXNGb3JtRGF0YTpTSSxpc0FycmF5QnVmZmVyVmlldzpESSxpc1N0cmluZzp1SSxpc051bWJlcjpDdCxpc0Jvb2xlYW46aEksaXNPYmplY3Q6c0EsaXNQbGFpbk9iamVjdDpDQSxpc1VuZGVmaW5lZDpaLGlzRGF0ZTpkSSxpc0ZpbGU6eUksaXNCbG9iOndJLGlzUmVnRXhwOktJLGlzRnVuY3Rpb246Rixpc1N0cmVhbTpwSSxpc1VSTFNlYXJjaFBhcmFtczpGSSxpc1R5cGVkQXJyYXk6SEksaXNGaWxlTGlzdDptSSxmb3JFYWNoOlYsbWVyZ2U6TkEsZXh0ZW5kOk5JLHRyaW06Ukksc3RyaXBCT006VUksaW5oZXJpdHM6R0ksdG9GbGF0T2JqZWN0OmtJLGtpbmRPZjpCQSxraW5kT2ZUZXN0OlUsZW5kc1dpdGg6TEksdG9BcnJheTpKSSxmb3JFYWNoRW50cnk6WUksbWF0Y2hBbGw6YkksaXNIVE1MRm9ybTpNSSxoYXNPd25Qcm9wZXJ0eTpydCxoYXNPd25Qcm9wOnJ0LHJlZHVjZURlc2NyaXB0b3JzOlF0LGZyZWV6ZU1ldGhvZHM6T0ksdG9PYmplY3RTZXQ6VEksdG9DYW1lbENhc2U6cUksbm9vcDpQSSx0b0Zpbml0ZU51bWJlcjp4SSxmaW5kS2V5OkJ0LGdsb2JhbDpudCxpc0NvbnRleHREZWZpbmVkOnN0LEFMUEhBQkVUOkV0LGdlbmVyYXRlU3RyaW5nOmpJLGlzU3BlY0NvbXBsaWFudEZvcm06V0ksdG9KU09OT2JqZWN0OlpJLGlzQXN5bmNGbjpWSSxpc1RoZW5hYmxlOlhJfTtmdW5jdGlvbiBPKEEsdCxJLGUsZyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIix0JiYodGhpcy5jb2RlPXQpLEkmJih0aGlzLmNvbmZpZz1JKSxlJiYodGhpcy5yZXF1ZXN0PWUpLGcmJih0aGlzLnJlc3BvbnNlPWcpfUMuaW5oZXJpdHMoTyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGF0PU8ucHJvdG90eXBlLGN0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e2N0W0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sY3QpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtPLmZyb209KEEsdCxJLGUsZyxyKT0+e2xldCBvPU9iamVjdC5jcmVhdGUoYXQpO3JldHVybiBDLnRvRmxhdE9iamVjdChBLG8sZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1FcnJvci5wcm90b3R5cGV9LG49Pm4hPT0iaXNBeGlvc0Vycm9yIiksTy5jYWxsKG8sQS5tZXNzYWdlLHQsSSxlLGcpLG8uY2F1c2U9QSxvLm5hbWU9QS5uYW1lLHImJk9iamVjdC5hc3NpZ24obyxyKSxvfTt2YXIgbD1PO3ZhciBRQT1udWxsO2Z1bmN0aW9uIEdBKEEpe3JldHVybiBDLmlzUGxhaW5PYmplY3QoQSl8fEMuaXNBcnJheShBKX1mdW5jdGlvbiBsdChBKXtyZXR1cm4gQy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBmdChBLHQsSSl7cmV0dXJuIEE/QS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKGcscil7cmV0dXJuIGc9bHQoZyksIUkmJnI/IlsiK2crIl0iOmd9KS5qb2luKEk/Ii4iOiIiKTp0fWZ1bmN0aW9uIHpJKEEpe3JldHVybiBDLmlzQXJyYXkoQSkmJiFBLnNvbWUoR0EpfXZhciBfST1DLnRvRmxhdE9iamVjdChDLHt9LG51bGwsZnVuY3Rpb24odCl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KHQpfSk7ZnVuY3Rpb24gdkkoQSx0LEkpe2lmKCFDLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9dHx8bmV3KFFBfHxGb3JtRGF0YSksST1DLnRvRmxhdE9iamVjdChJLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyx1KXtyZXR1cm4hQy5pc1VuZGVmaW5lZCh1W2NdKX0pO2xldCBlPUkubWV0YVRva2VucyxnPUkudmlzaXRvcnx8QixyPUkuZG90cyxvPUkuaW5kZXhlcyxhPShJLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkMuaXNTcGVjQ29tcGxpYW50Rm9ybSh0KTtpZighQy5pc0Z1bmN0aW9uKGcpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gUShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihDLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFhJiZDLmlzQmxvYihFKSl0aHJvdyBuZXcgbCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gQy5pc0FycmF5QnVmZmVyKEUpfHxDLmlzVHlwZWRBcnJheShFKT9hJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gQihFLGMsdSl7bGV0IHk9RTtpZihFJiYhdSYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihDLmVuZHNXaXRoKGMsInt9IikpYz1lP2M6Yy5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoQy5pc0FycmF5KEUpJiZ6SShFKXx8KEMuaXNGaWxlTGlzdChFKXx8Qy5lbmRzV2l0aChjLCJbXSIpKSYmKHk9Qy50b0FycmF5KEUpKSlyZXR1cm4gYz1sdChjKSx5LmZvckVhY2goZnVuY3Rpb24oTix0SSl7IShDLmlzVW5kZWZpbmVkKE4pfHxOPT09bnVsbCkmJnQuYXBwZW5kKG89PT0hMD9mdChbY10sdEkscik6bz09PW51bGw/YzpjKyJbXSIsUShOKSl9KSwhMX1yZXR1cm4gR0EoRSk/ITA6KHQuYXBwZW5kKGZ0KHUsYyxyKSxRKEUpKSwhMSl9bGV0IGk9W10sZj1PYmplY3QuYXNzaWduKF9JLHtkZWZhdWx0VmlzaXRvcjpCLGNvbnZlcnRWYWx1ZTpRLGlzVmlzaXRhYmxlOkdBfSk7ZnVuY3Rpb24gcyhFLGMpe2lmKCFDLmlzVW5kZWZpbmVkKEUpKXtpZihpLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO2kucHVzaChFKSxDLmZvckVhY2goRSxmdW5jdGlvbih5LFIpeyghKEMuaXNVbmRlZmluZWQoeSl8fHk9PT1udWxsKSYmZy5jYWxsKHQseSxDLmlzU3RyaW5nKFIpP1IudHJpbSgpOlIsYyxmKSk9PT0hMCYmcyh5LGM/Yy5jb25jYXQoUik6W1JdKX0pLGkucG9wKCl9fWlmKCFDLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gcyhBKSx0fXZhciBKPXZJO2Z1bmN0aW9uIER0KEEpe2xldCB0PXsiISI6IiUyNTIxIiwiXCciOiIlMjUyNyIsIigiOiIlMjUyOCIsIikiOiIlMjUyOSIsIn4iOiIlMjU3RSIsIiUyNTIwIjoiKyIsIiUyNTAwIjoiXFwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIVwnKCl+XXwlMjUyMHwlMjUwMC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gdXQoQSx0KXt0aGlzLl9wYWlycz1bXSxBJiZKKEEsdGhpcyx0KX12YXIgaHQ9dXQucHJvdG90eXBlO2h0LmFwcGVuZD1mdW5jdGlvbih0LEkpe3RoaXMuX3BhaXJzLnB1c2goW3QsSV0pfTtodC50b1N0cmluZz1mdW5jdGlvbih0KXtsZXQgST10P2Z1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcyxlLER0KX06RHQ7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihnKXtyZXR1cm4gSShnWzBdKSsiPSIrSShnWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIEVBPXV0O2Z1bmN0aW9uICRJKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTI1M0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjUyNC9nLCIkIikucmVwbGFjZSgvJTI1MkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjUyMC9nLCIrIikucmVwbGFjZSgvJTI1NUIvZ2ksIlsiKS5yZXBsYWNlKC8lMjU1RC9naSwiXSIpfWZ1bmN0aW9uIFgoQSx0LEkpe2lmKCF0KXJldHVybiBBO2xldCBlPUkmJkkuZW5jb2RlfHwkSSxnPUkmJkkuc2VyaWFsaXplLHI7aWYoZz9yPWcodCxJKTpyPUMuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyBFQSh0LEkpLnRvU3RyaW5nKGUpLHIpe2xldCBvPUEuaW5kZXhPZigiJTIzIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK3J9cmV0dXJuIEF9dmFyIGtBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UodCxJLGUpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDp0LHJlamVjdGVkOkksc3luY2hyb25vdXM6ZT9lLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ZT9lLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QodCl7dGhpcy5oYW5kbGVyc1t0XSYmKHRoaXMuaGFuZGxlcnNbdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh0KXtDLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihlKXtlIT09bnVsbCYmdChlKX0pfX0sTEE9a0E7dmFyIGFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgZHQ9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOkVBO3ZhciB5dD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIHd0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIG10PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOmR0LEZvcm1EYXRhOnl0LEJsb2I6d3R9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgSkE9e307ZUkoSkEse2hhc0Jyb3dzZXJFbnY6KCk9PnB0LGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+QWUsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT50ZX0pO3ZhciBwdD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixBZT0oQT0+cHQmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSx0ZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHc9ey4uLkpBLC4uLm10fTtmdW5jdGlvbiBIQShBLHQpe3JldHVybiBKKEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihJLGUsZyxyKXtyZXR1cm4gdy5pc05vZGUmJkMuaXNCdWZmZXIoSSk/KHRoaXMuYXBwZW5kKGUsSS50b1N0cmluZygiYmFzZTY0IikpLCExKTpyLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHQpKX1mdW5jdGlvbiBJZShBKXtyZXR1cm4gQy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csQSkubWFwKHQ9PnRbMF09PT0iW10iPyIiOnRbMV18fHRbMF0pfWZ1bmN0aW9uIGVlKEEpe2xldCB0PXt9LEk9T2JqZWN0LmtleXMoQSksZSxnPUkubGVuZ3RoLHI7Zm9yKGU9MDtlPGc7ZSsrKXI9SVtlXSx0W3JdPUFbcl07cmV0dXJuIHR9ZnVuY3Rpb24gZ2UoQSl7ZnVuY3Rpb24gdChJLGUsZyxyKXtsZXQgbz1JW3IrK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBuPU51bWJlci5pc0Zpbml0ZSgrbyksYT1yPj1JLmxlbmd0aDtyZXR1cm4gbz0hbyYmQy5pc0FycmF5KGcpP2cubGVuZ3RoOm8sYT8oQy5oYXNPd25Qcm9wKGcsbyk/Z1tvXT1bZ1tvXSxlXTpnW29dPWUsIW4pOigoIWdbb118fCFDLmlzT2JqZWN0KGdbb10pKSYmKGdbb109W10pLHQoSSxlLGdbb10scikmJkMuaXNBcnJheShnW29dKSYmKGdbb109ZWUoZ1tvXSkpLCFuKX1pZihDLmlzRm9ybURhdGEoQSkmJkMuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgST17fTtyZXR1cm4gQy5mb3JFYWNoRW50cnkoQSwoZSxnKT0+e3QoSWUoZSksZyxJLDApfSksSX1yZXR1cm4gbnVsbH12YXIgY0E9Z2U7ZnVuY3Rpb24gcmUoQSx0LEkpe2lmKEMuaXNTdHJpbmcoQSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShBKSxDLnRyaW0oQSl9Y2F0Y2goZSl7aWYoZS5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBlfXJldHVybihJfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIFlBPXt0cmFuc2l0aW9uYWw6YUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbih0LEkpe2xldCBlPUkuZ2V0Q29udGVudFR5cGUoKXx8IiIsZz1lLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxyPUMuaXNPYmplY3QodCk7aWYociYmQy5pc0hUTUxGb3JtKHQpJiYodD1uZXcgRm9ybURhdGEodCkpLEMuaXNGb3JtRGF0YSh0KSlyZXR1cm4gZz9KU09OLnN0cmluZ2lmeShjQSh0KSk6dDtpZihDLmlzQXJyYXlCdWZmZXIodCl8fEMuaXNCdWZmZXIodCl8fEMuaXNTdHJlYW0odCl8fEMuaXNGaWxlKHQpfHxDLmlzQmxvYih0KSlyZXR1cm4gdDtpZihDLmlzQXJyYXlCdWZmZXJWaWV3KHQpKXJldHVybiB0LmJ1ZmZlcjtpZihDLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLHQudG9TdHJpbmcoKTtsZXQgbjtpZihyKXtpZihlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBIQSh0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKG49Qy5pc0ZpbGVMaXN0KHQpKXx8ZS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBhPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gSihuP3siZmlsZXNbXSI6dH06dCxhJiZuZXcgYSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIHJ8fGc/KEkuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxyZSh0KSk6dH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbih0KXtsZXQgST10aGlzLnRyYW5zaXRpb25hbHx8WUEudHJhbnNpdGlvbmFsLGU9SSYmSS5mb3JjZWRKU09OUGFyc2luZyxnPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKHQmJkMuaXNTdHJpbmcodCkmJihlJiYhdGhpcy5yZXNwb25zZVR5cGV8fGcpKXtsZXQgbz0hKEkmJkkuc2lsZW50SlNPTlBhcnNpbmcpJiZnO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChuKXtpZihvKXRocm93IG4ubmFtZT09PSJTeW50YXhFcnJvciI/bC5mcm9tKG4sbC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpufX1yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Qy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntZQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFQ9WUE7dmFyIG9lPUMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksU3Q9QT0+e2xldCB0PXt9LEksZSxnO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2c9by5pbmRleE9mKCI6IiksST1vLnN1YnN0cmluZygwLGcpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGU9by5zdWJzdHJpbmcoZysxKS50cmltKCksISghSXx8dFtJXSYmb2VbSV0pJiYoST09PSJzZXQtY29va2llIj90W0ldP3RbSV0ucHVzaChlKTp0W0ldPVtlXTp0W0ldPXRbSV0/dFtJXSsiLCAiK2U6ZSl9KSx0fTt2YXIgRnQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiB6KEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOkMuaXNBcnJheShBKT9BLm1hcChmQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIGllKEEpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCksST0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLGU7Zm9yKDtlPUkuZXhlYyhBKTspdFtlWzFdXT1lWzJdO3JldHVybiB0fXZhciBDZT1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBiQShBLHQsSSxlLGcpe2lmKEMuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMsdCxJKTtpZihnJiYodD1JKSwhIUMuaXNTdHJpbmcodCkpe2lmKEMuaXNTdHJpbmcoZSkpcmV0dXJuIHQuaW5kZXhPZihlKSE9PS0xO2lmKEMuaXNSZWdFeHAoZSkpcmV0dXJuIGUudGVzdCh0KX19ZnVuY3Rpb24gQmUoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCh0LEksZSk9PkkudG9VcHBlckNhc2UoKStlKX1mdW5jdGlvbiBuZShBLHQpe2xldCBJPUMudG9DYW1lbENhc2UoIiAiK3QpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChlPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsZStJLHt2YWx1ZTpmdW5jdGlvbihnLHIsbyl7cmV0dXJuIHRoaXNbZV0uY2FsbCh0aGlzLHQsZyxyLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3QmJnRoaXMuc2V0KHQpfXNldCh0LEksZSl7bGV0IGc9dGhpcztmdW5jdGlvbiByKG4sYSxRKXtsZXQgQj16KGEpO2lmKCFCKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgaT1DLmZpbmRLZXkoZyxCKTsoIWl8fGdbaV09PT12b2lkIDB8fFE9PT0hMHx8UT09PXZvaWQgMCYmZ1tpXSE9PSExKSYmKGdbaXx8YV09ZkEobikpfWxldCBvPShuLGEpPT5DLmZvckVhY2gobiwoUSxCKT0+cihRLEIsYSkpO3JldHVybiBDLmlzUGxhaW5PYmplY3QodCl8fHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP28odCxJKTpDLmlzU3RyaW5nKHQpJiYodD10LnRyaW0oKSkmJiFDZSh0KT9vKFN0KHQpLEkpOnQhPW51bGwmJnIoSSx0LGUpLHRoaXN9Z2V0KHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO2lmKGUpe2xldCBnPXRoaXNbZV07aWYoIUkpcmV0dXJuIGc7aWYoST09PSEwKXJldHVybiBpZShnKTtpZihDLmlzRnVuY3Rpb24oSSkpcmV0dXJuIEkuY2FsbCh0aGlzLGcsZSk7aWYoQy5pc1JlZ0V4cChJKSlyZXR1cm4gSS5leGVjKGcpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXModCxJKXtpZih0PXoodCksdCl7bGV0IGU9Qy5maW5kS2V5KHRoaXMsdCk7cmV0dXJuISEoZSYmdGhpc1tlXSE9PXZvaWQgMCYmKCFJfHxiQSh0aGlzLHRoaXNbZV0sZSxJKSkpfXJldHVybiExfWRlbGV0ZSh0LEkpe2xldCBlPXRoaXMsZz0hMTtmdW5jdGlvbiByKG8pe2lmKG89eihvKSxvKXtsZXQgbj1DLmZpbmRLZXkoZSxvKTtuJiYoIUl8fGJBKGUsZVtuXSxuLEkpKSYmKGRlbGV0ZSBlW25dLGc9ITApfX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLGd9Y2xlYXIodCl7bGV0IEk9T2JqZWN0LmtleXModGhpcyksZT1JLmxlbmd0aCxnPSExO2Zvcig7ZS0tOyl7bGV0IHI9SVtlXTsoIXR8fGJBKHRoaXMsdGhpc1tyXSxyLHQsITApKSYmKGRlbGV0ZSB0aGlzW3JdLGc9ITApfXJldHVybiBnfW5vcm1hbGl6ZSh0KXtsZXQgST10aGlzLGU9e307cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChnLHIpPT57bGV0IG89Qy5maW5kS2V5KGUscik7aWYobyl7SVtvXT1mQShnKSxkZWxldGUgSVtyXTtyZXR1cm59bGV0IG49dD9CZShyKTpTdHJpbmcocikudHJpbSgpO24hPT1yJiZkZWxldGUgSVtyXSxJW25dPWZBKGcpLGVbbl09ITB9KSx0aGlzfWNvbmNhdCguLi50KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi50KX10b0pTT04odCl7bGV0IEk9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gQy5mb3JFYWNoKHRoaXMsKGUsZyk9PntlIT1udWxsJiZlIT09ITEmJihJW2ddPXQmJkMuaXNBcnJheShlKT9lLmpvaW4oIiwgIik6ZSl9KSxJfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFt0LEldKT0+dCsiOiAiK0kpLmpvaW4oYCUwQWApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzP3Q6bmV3IHRoaXModCl9c3RhdGljIGNvbmNhdCh0LC4uLkkpe2xldCBlPW5ldyB0aGlzKHQpO3JldHVybiBJLmZvckVhY2goZz0+ZS5zZXQoZykpLGV9c3RhdGljIGFjY2Vzc29yKHQpe2xldCBlPSh0aGlzW0Z0XT10aGlzW0Z0XT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLGc9dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gcihvKXtsZXQgbj16KG8pO2Vbbl18fChuZShnLG8pLGVbbl09ITApfXJldHVybiBDLmlzQXJyYXkodCk/dC5mb3JFYWNoKHIpOnIodCksdGhpc319O1AuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO0MucmVkdWNlRGVzY3JpcHRvcnMoUC5wcm90b3R5cGUsKHt2YWx1ZTpBfSx0KT0+e2xldCBJPXRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KGUpe3RoaXNbSV09ZX19fSk7Qy5mcmVlemVNZXRob2RzKFApO3ZhciBtPVA7ZnVuY3Rpb24gXyhBLHQpe2xldCBJPXRoaXN8fFQsZT10fHxJLGc9bS5mcm9tKGUuaGVhZGVycykscj1lLmRhdGE7cmV0dXJuIEMuZm9yRWFjaChBLGZ1bmN0aW9uKG4pe3I9bi5jYWxsKEkscixnLm5vcm1hbGl6ZSgpLHQ/dC5zdGF0dXM6dm9pZCAwKX0pLGcubm9ybWFsaXplKCkscn1mdW5jdGlvbiB2KEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gUnQoQSx0LEkpe2wuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsbC5FUlJfQ0FOQ0VMRUQsdCxJKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifUMuaW5oZXJpdHMoUnQsbCx7X19DQU5DRUxfXzohMH0pO3ZhciBIPVJ0O2Z1bmN0aW9uIE1BKEEsdCxJKXtsZXQgZT1JLmNvbmZpZy52YWxpZGF0ZVN0YXR1czshSS5zdGF0dXN8fCFlfHxlKEkuc3RhdHVzKT9BKEkpOnQobmV3IGwoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIitJLnN0YXR1cyxbbC5FUlJfQkFEX1JFUVVFU1QsbC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKEkuc3RhdHVzLzEwMCktNF0sSS5jb25maWcsSS5yZXF1ZXN0LEkpKX12YXIgTnQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsdCxJLGUsZyxyKXtsZXQgbz1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpXTtDLmlzTnVtYmVyKEkpJiZvLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShJKS50b0dNVFN0cmluZygpKSxDLmlzU3RyaW5nKGUpJiZvLnB1c2goInBhdGg9IitlKSxDLmlzU3RyaW5nKGcpJiZvLnB1c2goImRvbWFpbj0iK2cpLHI9PT0hMCYmby5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9by5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBxQShBKXtyZXR1cm4vXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdChBKX1mdW5jdGlvbiBLQShBLHQpe3JldHVybiB0P0EucmVwbGFjZSgvXFwvP1xcLyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXFwvKy8sIiIpOkF9ZnVuY3Rpb24gJChBLHQpe3JldHVybiBBJiYhcUEodCk/S0EoQSx0KTp0fXZhciBVdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksST1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksZTtmdW5jdGlvbiBnKHIpe2xldCBvPXI7cmV0dXJuIHQmJihJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz1JLmhyZWYpLEkuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjpJLmhyZWYscHJvdG9jb2w6SS5wcm90b2NvbD9JLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpJLmhvc3Qsc2VhcmNoOkkuc2VhcmNoP0kuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOkkuaGFzaD9JLmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOkkuaG9zdG5hbWUscG9ydDpJLnBvcnQscGF0aG5hbWU6SS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/SS5wYXRobmFtZToiLyIrSS5wYXRobmFtZX19cmV0dXJuIGU9Zyh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IG49Qy5pc1N0cmluZyhvKT9nKG8pOm87cmV0dXJuIG4ucHJvdG9jb2w9PT1lLnByb3RvY29sJiZuLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIE9BKEEpe2xldCB0PS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiB0JiZ0WzFdfHwiIn1mdW5jdGlvbiBzZShBLHQpe0E9QXx8MTA7bGV0IEk9bmV3IEFycmF5KEEpLGU9bmV3IEFycmF5KEEpLGc9MCxyPTAsbztyZXR1cm4gdD10IT09dm9pZCAwP3Q6MWUzLGZ1bmN0aW9uKGEpe2xldCBRPURhdGUubm93KCksQj1lW3JdO298fChvPVEpLElbZ109YSxlW2ddPVE7bGV0IGk9cixmPTA7Zm9yKDtpIT09ZzspZis9SVtpKytdLGk9aSVBO2lmKGc9KGcrMSklQSxnPT09ciYmKHI9KHIrMSklQSksUS1vPHQpcmV0dXJuO2xldCBzPUImJlEtQjtyZXR1cm4gcz9NYXRoLnJvdW5kKGYqMWUzL3MpOnZvaWQgMH19dmFyIEd0PXNlO2Z1bmN0aW9uIGt0KEEsdCl7bGV0IEk9MCxlPUd0KDUwLDI1MCk7cmV0dXJuIGc9PntsZXQgcj1nLmxvYWRlZCxvPWcubGVuZ3RoQ29tcHV0YWJsZT9nLnRvdGFsOnZvaWQgMCxuPXItSSxhPWUobiksUT1yPD1vO0k9cjtsZXQgQj17bG9hZGVkOnIsdG90YWw6byxwcm9ncmVzczpvP3Ivbzp2b2lkIDAsYnl0ZXM6bixyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmbyYmUT8oby1yKS9hOnZvaWQgMCxldmVudDpnfTtCW3Q/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShCKX19dmFyIFFlPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsTHQ9UWUmJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihJLGUpe2xldCBnPUEuZGF0YSxyPW0uZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOm59PUEsYTtmdW5jdGlvbiBRKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpfWxldCBCO2lmKEMuaXNGb3JtRGF0YShnKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXIuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEI9ci5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1CP0Iuc3BsaXQoIjsiKS5tYXAoeT0+eS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtyLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO3Iuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgZj0kKEEuYmFzZVVSTCxBLnVybCk7aS5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksWChmLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksITApLGkudGltZW91dD1BLnRpbWVvdXQ7ZnVuY3Rpb24gcygpe2lmKCFpKXJldHVybjtsZXQgYz1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBpJiZpLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSx5PXtkYXRhOiFvfHxvPT09InRleHQifHxvPT09Impzb24iP2kucmVzcG9uc2VUZXh0OmkucmVzcG9uc2Usc3RhdHVzOmkuc3RhdHVzLHN0YXR1c1RleHQ6aS5zdGF0dXNUZXh0LGhlYWRlcnM6Yyxjb25maWc6QSxyZXF1ZXN0Oml9O01BKGZ1bmN0aW9uKE4pe0koTiksUSgpfSxmdW5jdGlvbihOKXtlKE4pLFEoKX0seSksaT1udWxsfWlmKCJvbmxvYWRlbmQiaW4gaT9pLm9ubG9hZGVuZD1zOmkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWl8fGkucmVhZHlTdGF0ZSE9PTR8fGkuc3RhdHVzPT09MCYmIShpLnJlc3BvbnNlVVJMJiZpLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChzKX0saS5vbmFib3J0PWZ1bmN0aW9uKCl7aSYmKGUobmV3IGwoIlJlcXVlc3QgYWJvcnRlZCIsbC5FQ09OTkFCT1JURUQsQSxpKSksaT1udWxsKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgbCgiTmV0d29yayBFcnJvciIsbC5FUlJfTkVUV09SSyxBLGkpKSxpPW51bGx9LGkub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IHU9QS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrQS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHk9QS50cmFuc2l0aW9uYWx8fGFBO0EudGltZW91dEVycm9yTWVzc2FnZSYmKHU9QS50aW1lb3V0RXJyb3JNZXNzYWdlKSxlKG5ldyBsKHUseS5jbGFyaWZ5VGltZW91dEVycm9yP2wuRVRJTUVET1VUOmwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbH0sdy5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihuJiZDLmlzRnVuY3Rpb24obikmJihuPW4oQSkpLG58fG4hPT0hMSYmVXQoZikpKXtsZXQgYz1BLnhzcmZIZWFkZXJOYW1lJiZBLnhzcmZDb29raWVOYW1lJiZOdC5yZWFkKEEueHNyZkNvb2tpZU5hbWUpO2MmJnIuc2V0KEEueHNyZkhlYWRlck5hbWUsYyl9Zz09PXZvaWQgMCYmci5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBpJiZDLmZvckVhY2goci50b0pTT04oKSxmdW5jdGlvbih1LHkpe2kuc2V0UmVxdWVzdEhlYWRlcih5LHUpfSksQy5pc1VuZGVmaW5lZChBLndpdGhDcmVkZW50aWFscyl8fChpLndpdGhDcmVkZW50aWFscz0hIUEud2l0aENyZWRlbnRpYWxzKSxvJiZvIT09Impzb24iJiYoaS5yZXNwb25zZVR5cGU9QS5yZXNwb25zZVR5cGUpLHR5cGVvZiBBLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa3QoQS5vbkRvd25sb2FkUHJvZ3Jlc3MsITApKSx0eXBlb2YgQS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZpLnVwbG9hZCYmaS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25VcGxvYWRQcm9ncmVzcykpLChBLmNhbmNlbFRva2VufHxBLnNpZ25hbCkmJihhPWM9PntpJiYoZSghY3x8Yy50eXBlP25ldyBIKG51bGwsQSxpKTpjKSxpLmFib3J0KCksaT1udWxsKX0sQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYSksQS5zaWduYWwmJihBLnNpZ25hbC5hYm9ydGVkP2EoKTpBLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYSkpKTtsZXQgRT1PQShmKTtpZihFJiZ3LnByb3RvY29scy5pbmRleE9mKEUpPT09LTEpe2UobmV3IGwoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrRSsiOiIsbC5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1pLnNlbmQoZ3x8bnVsbCl9KX07dmFyIFRBPXtodHRwOlFBLHhocjpMdH07Qy5mb3JFYWNoKFRBLChBLHQpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6dH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTp0fSl9fSk7dmFyIEp0PUE9PmAtICR7QX1gLEVlPUE9PkMuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxsQT17Z2V0QWRhcHRlcjpBPT57QT1DLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDp0fT1BLEksZSxnPXt9O2ZvcihsZXQgcj0wO3I8dDtyKyspe0k9QVtyXTtsZXQgbztpZihlPUksIUVlKEkpJiYoZT1UQVsobz1TdHJpbmcoSSkpLnRvTG93ZXJDYXNlKCldLGU9PT12b2lkIDApKXRocm93IG5ldyBsKGBVbmtub3duIGFkYXB0ZXIgXCcke299XCdgKTtpZihlKWJyZWFrO2dbb3x8IiUyMyIrcl09ZX1pZighZSl7bGV0IHI9T2JqZWN0LmVudHJpZXMoZykubWFwKChbbixhXSk9PmBhZGFwdGVyICR7bn0gYCsoYT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLG89dD9yLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtyLm1hcChKdCkuam9pbihgJTBBYCk6IiAiK0p0KHJbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IGwoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gZX0sYWRhcHRlcnM6VEF9O2Z1bmN0aW9uIFBBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBIKG51bGwsQSl9ZnVuY3Rpb24gREEoQSl7cmV0dXJuIFBBKEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFQuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gUEEoQSksZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZSksZS5oZWFkZXJzPW0uZnJvbShlLmhlYWRlcnMpLGV9LGZ1bmN0aW9uKGUpe3JldHVybiB2KGUpfHwoUEEoQSksZSYmZS5yZXNwb25zZSYmKGUucmVzcG9uc2UuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUucmVzcG9uc2UpLGUucmVzcG9uc2UuaGVhZGVycz1tLmZyb20oZS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KGUpfSl9dmFyIEh0PUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIGsoQSx0KXt0PXR8fHt9O2xldCBJPXt9O2Z1bmN0aW9uIGUoUSxCLGkpe3JldHVybiBDLmlzUGxhaW5PYmplY3QoUSkmJkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOml9LFEsQik6Qy5pc1BsYWluT2JqZWN0KEIpP0MubWVyZ2Uoe30sQik6Qy5pc0FycmF5KEIpP0Iuc2xpY2UoKTpCfWZ1bmN0aW9uIGcoUSxCLGkpe2lmKEMuaXNVbmRlZmluZWQoQikpe2lmKCFDLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRLGkpfWVsc2UgcmV0dXJuIGUoUSxCLGkpfWZ1bmN0aW9uIHIoUSxCKXtpZighQy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbyhRLEIpe2lmKEMuaXNVbmRlZmluZWQoQikpe2lmKCFDLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRKX1lbHNlIHJldHVybiBlKHZvaWQgMCxCKX1mdW5jdGlvbiBuKFEsQixpKXtpZihpIGluIHQpcmV0dXJuIGUoUSxCKTtpZihpIGluIEEpcmV0dXJuIGUodm9pZCAwLFEpfWxldCBhPXt1cmw6cixtZXRob2Q6cixkYXRhOnIsYmFzZVVSTDpvLHRyYW5zZm9ybVJlcXVlc3Q6byx0cmFuc2Zvcm1SZXNwb25zZTpvLHBhcmFtc1NlcmlhbGl6ZXI6byx0aW1lb3V0Om8sdGltZW91dE1lc3NhZ2U6byx3aXRoQ3JlZGVudGlhbHM6byx3aXRoWFNSRlRva2VuOm8sYWRhcHRlcjpvLHJlc3BvbnNlVHlwZTpvLHhzcmZDb29raWVOYW1lOm8seHNyZkhlYWRlck5hbWU6byxvblVwbG9hZFByb2dyZXNzOm8sb25Eb3dubG9hZFByb2dyZXNzOm8sZGVjb21wcmVzczpvLG1heENvbnRlbnRMZW5ndGg6byxtYXhCb2R5TGVuZ3RoOm8sYmVmb3JlUmVkaXJlY3Q6byx0cmFuc3BvcnQ6byxodHRwQWdlbnQ6byxodHRwc0FnZW50Om8sY2FuY2VsVG9rZW46byxzb2NrZXRQYXRoOm8scmVzcG9uc2VFbmNvZGluZzpvLHZhbGlkYXRlU3RhdHVzOm4saGVhZGVyczooUSxCKT0+ZyhIdChRKSxIdChCKSwhMCl9O3JldHVybiBDLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLHQpKSxmdW5jdGlvbihCKXtsZXQgaT1hW0JdfHxnLGY9aShBW0JdLHRbQl0sQik7Qy5pc1VuZGVmaW5lZChmKSYmaSE9PW58fChJW0JdPWYpfSksSX12YXIgdUE9IjEuNi44Ijt2YXIgeEE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLHQpPT57eEFbQV09ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT09QXx8ImEiKyh0PDE/Im4gIjoiICIpK0F9fSk7dmFyIFl0PXt9O3hBLnRyYW5zaXRpb25hbD1mdW5jdGlvbih0LEksZSl7ZnVuY3Rpb24gZyhyLG8pe3JldHVybiJbQXhpb3MgdiIrdUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrcisiXCciK28rKGU/Ii4gIitlOiIiKX1yZXR1cm4ocixvLG4pPT57aWYodD09PSExKXRocm93IG5ldyBsKGcobywiIGhhcyBiZWVuIHJlbW92ZWQiKyhJPyIgaW4gIitJOiIiKSksbC5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIEkmJiFZdFtvXSYmKFl0W29dPSEwLGNvbnNvbGUud2FybihnKG8sIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK0krIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksdD90KHIsbyxuKTohMH19O2Z1bmN0aW9uIGFlKEEsdCxJKXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IGwoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBlPU9iamVjdC5rZXlzKEEpLGc9ZS5sZW5ndGg7Zm9yKDtnLS0gPjA7KXtsZXQgcj1lW2ddLG89dFtyXTtpZihvKXtsZXQgbj1BW3JdLGE9bj09PXZvaWQgMHx8byhuLHIsQSk7aWYoYSE9PSEwKXRocm93IG5ldyBsKCJvcHRpb24gIityKyIgbXVzdCBiZSAiK2EsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYoSSE9PSEwKXRocm93IG5ldyBsKCJVbmtub3duIG9wdGlvbiAiK3IsbC5FUlJfQkFEX09QVElPTil9fXZhciBoQT17YXNzZXJ0T3B0aW9uczphZSx2YWxpZGF0b3JzOnhBfTt2YXIgWT1oQS52YWxpZGF0b3JzLHg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBMQSxyZXNwb25zZTpuZXcgTEF9fWFzeW5jIHJlcXVlc3QodCxJKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxJKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBnO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGc9e30pOmc9bmV3IEVycm9yO2xldCByPWcuc3RhY2s/Zy5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjtlLnN0YWNrP3ImJiFTdHJpbmcoZS5zdGFjaykuZW5kc1dpdGgoci5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKGUuc3RhY2srPWAlMEFgK3IpOmUuc3RhY2s9cn10aHJvdyBlfX1fcmVxdWVzdCh0LEkpe3R5cGVvZiB0PT0ic3RyaW5nIj8oST1JfHx7fSxJLnVybD10KTpJPXR8fHt9LEk9ayh0aGlzLmRlZmF1bHRzLEkpO2xldHt0cmFuc2l0aW9uYWw6ZSxwYXJhbXNTZXJpYWxpemVyOmcsaGVhZGVyczpyfT1JO2UhPT12b2lkIDAmJmhBLmFzc2VydE9wdGlvbnMoZSx7c2lsZW50SlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKX0sITEpLGchPW51bGwmJihDLmlzRnVuY3Rpb24oZyk/SS5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6Z306aEEuYXNzZXJ0T3B0aW9ucyhnLHtlbmNvZGU6WS5mdW5jdGlvbixzZXJpYWxpemU6WS5mdW5jdGlvbn0sITApKSxJLm1ldGhvZD0oSS5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1yJiZDLm1lcmdlKHIuY29tbW9uLHJbSS5tZXRob2RdKTtyJiZDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSByW0VdfSksSS5oZWFkZXJzPW0uY29uY2F0KG8scik7bGV0IG49W10sYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKEkpPT09ITF8fChhPWEmJmMuc3luY2hyb25vdXMsbi51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBRPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7US5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IEIsaT0wLGY7aWYoIWEpe2xldCBFPVtEQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLG4pLEUucHVzaC5hcHBseShFLFEpLGY9RS5sZW5ndGgsQj1Qcm9taXNlLnJlc29sdmUoSSk7aTxmOylCPUIudGhlbihFW2krK10sRVtpKytdKTtyZXR1cm4gQn1mPW4ubGVuZ3RoO2xldCBzPUk7Zm9yKGk9MDtpPGY7KXtsZXQgRT1uW2krK10sYz1uW2krK107dHJ5e3M9RShzKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e0I9REEuY2FsbCh0aGlzLHMpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3IoaT0wLGY9US5sZW5ndGg7aTxmOylCPUIudGhlbihRW2krK10sUVtpKytdKTtyZXR1cm4gQn1nZXRVcmkodCl7dD1rKHRoaXMuZGVmYXVsdHMsdCk7bGV0IEk9JCh0LmJhc2VVUkwsdC51cmwpO3JldHVybiBYKEksdC5wYXJhbXMsdC5wYXJhbXNTZXJpYWxpemVyKX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24odCl7eC5wcm90b3R5cGVbdF09ZnVuY3Rpb24oSSxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsoZXx8e30se21ldGhvZDp0LHVybDpJLGRhdGE6KGV8fHt9KS5kYXRhfSkpfX0pO0MuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIEkoZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbyxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsobnx8e30se21ldGhvZDp0LGhlYWRlcnM6ZT97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6cixkYXRhOm99KSl9fXgucHJvdG90eXBlW3RdPUkoKSx4LnByb3RvdHlwZVt0KyJGb3JtIl09SSghMCl9KTt2YXIgQUE9eDt2YXIgakE9Y2xhc3MgQXtjb25zdHJ1Y3Rvcih0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IEk7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe0k9cn0pO2xldCBlPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZz0+e2lmKCFlLl9saXN0ZW5lcnMpcmV0dXJuO2xldCByPWUuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtyLS0gPjA7KWUuX2xpc3RlbmVyc1tyXShnKTtlLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPWc9PntsZXQgcixvPW5ldyBQcm9taXNlKG49PntlLnN1YnNjcmliZShuKSxyPW59KS50aGVuKGcpO3JldHVybiBvLmNhbmNlbD1mdW5jdGlvbigpe2UudW5zdWJzY3JpYmUocil9LG99LHQoZnVuY3Rpb24ocixvLG4pe2UucmVhc29ufHwoZS5yZWFzb249bmV3IEgocixvLG4pLEkoZS5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUodCl7aWYodGhpcy5yZWFzb24pe3QodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2godCk6dGhpcy5fbGlzdGVuZXJzPVt0XX11bnN1YnNjcmliZSh0KXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgST10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZih0KTtJIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoSSwxKX1zdGF0aWMgc291cmNlKCl7bGV0IHQ7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKGcpe3Q9Z30pLGNhbmNlbDp0fX19LGJ0PWpBO2Z1bmN0aW9uIFdBKEEpe3JldHVybiBmdW5jdGlvbihJKXtyZXR1cm4gQS5hcHBseShudWxsLEkpfX1mdW5jdGlvbiBaQShBKXtyZXR1cm4gQy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgVkE9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKFZBKS5mb3JFYWNoKChbQSx0XSk9PntWQVt0XT1BfSk7dmFyIE10PVZBO2Z1bmN0aW9uIHF0KEEpe2xldCB0PW5ldyBBQShBKSxJPVcoQUEucHJvdG90eXBlLnJlcXVlc3QsdCk7cmV0dXJuIEMuZXh0ZW5kKEksQUEucHJvdG90eXBlLHQse2FsbE93bktleXM6ITB9KSxDLmV4dGVuZChJLHQsbnVsbCx7YWxsT3duS2V5czohMH0pLEkuY3JlYXRlPWZ1bmN0aW9uKGcpe3JldHVybiBxdChrKEEsZykpfSxJfXZhciBoPXF0KFQpO2guQXhpb3M9QUE7aC5DYW5jZWxlZEVycm9yPUg7aC5DYW5jZWxUb2tlbj1idDtoLmlzQ2FuY2VsPXY7aC5WRVJTSU9OPXVBO2gudG9Gb3JtRGF0YT1KO2guQXhpb3NFcnJvcj1sO2guQ2FuY2VsPWguQ2FuY2VsZWRFcnJvcjtoLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodCl9O2guc3ByZWFkPVdBO2guaXNBeGlvc0Vycm9yPVpBO2gubWVyZ2VDb25maWc9aztoLkF4aW9zSGVhZGVycz1tO2guZm9ybVRvSlNPTj1BPT5jQShDLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2guZ2V0QWRhcHRlcj1sQS5nZXRBZGFwdGVyO2guSHR0cFN0YXR1c0NvZGU9TXQ7aC5kZWZhdWx0PWg7dmFyIGRBPWg7dmFye0F4aW9zOmlvLEF4aW9zRXJyb3I6Q28sQ2FuY2VsZWRFcnJvcjpCbyxpc0NhbmNlbDpubyxDYW5jZWxUb2tlbjpzbyxWRVJTSU9OOlFvLGFsbDpFbyxDYW5jZWw6YW8saXNBeGlvc0Vycm9yOmNvLHNwcmVhZDpmbyx0b0Zvcm1EYXRhOmxvLEF4aW9zSGVhZGVyczpEbyxIdHRwU3RhdHVzQ29kZTp1byxmb3JtVG9KU09OOmhvLGdldEFkYXB0ZXI6eW8sbWVyZ2VDb25maWc6d299PWRBO3ZhciB0QSxMLHpBLFhBPXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7ekE9bmV3IFVpbnQ4QXJyYXkoTC5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LHlBPWNsYXNze2luaXQoKXtyZXR1cm4gdEF8fCh0eXBlb2YgZmV0Y2g8InUiP3RBPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrS3QpLnRoZW4odD0+dC5hcnJheUJ1ZmZlcigpKS50aGVuKHQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsWEEpKS50aGVuKHRoaXMuX2luaXQpOnRBPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKEt0LCJiYXNlNjQiKSxYQSkudGhlbih0aGlzLl9pbml0KSx0QSl9X2luaXQodCl7TD10Lmluc3RhbmNlLFhBLmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZSh0LEk9MCl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IGU9dC5ieXRlTGVuZ3RoLGc9TC5leHBvcnRzLm1hbGxvYyhlKTt6QS5zZXQodCxnKSxJPUl8fE51bWJlcihMLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShnLGUpKTtsZXQgcj1MLmV4cG9ydHMubWFsbG9jKEkpLG89TC5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhyLEksZyxlKSxuPXpBLnNsaWNlKHIscitvKTtyZXR1cm4gTC5leHBvcnRzLmZyZWUoZyksTC5leHBvcnRzLmZyZWUociksbn19LEt0PSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIE90PW5ldyB5QSxUdD0hMTthc3luYyBmdW5jdGlvbiBjZShBLHQsSSl7bGV0IGU9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ZT1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ZT1BOmU9YCR7dH0vJHtBfWAsZS5lbmRzV2l0aCgiLmpzIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMykpLGUuZW5kc1dpdGgoIi53YXNtIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtNSkpO2xldCBnPWAke2V9Lndhc21gLHI9YXdhaXQgZEEuZ2V0KGAke2d9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczpJfSk7VHR8fChhd2FpdCBPdC5pbml0KCksVHQ9ITApO2xldCBuPU90LmRlY29kZShuZXcgVWludDhBcnJheShyLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtlfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om59KX12YXIgUHQ9Y2U7dmFyIHdBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gZmUoQSx0LEkpe2xldCBlPUEsZz1BLHI9bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoZT1uZXcgVVJMKEEuaHJlZiksZz1lLmhyZWYpLHdBLmhhcyhnKT9yPWF3YWl0IHdBLmdldChnKTood0Euc2V0KGcsUHQoZSx0LEkpKSxyPWF3YWl0IHdBLmdldChnKSkscn12YXIgeHQ9ZmU7dmFyIGxlPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sRD1sZTt2YXIgRGU9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxTPURlO3ZhciB1ZT17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0saj11ZTtmdW5jdGlvbiBoZShBLHQpe2xldCBJPW51bGw7c3dpdGNoKEEpe2Nhc2UgUy5VSW50ODp7ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFMuSW50ODp7ST1uZXcgSW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50MTY6e0k9bmV3IFVpbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQxNjp7ST1uZXcgSW50MTZBcnJheSh0KTticmVha31jYXNlIFMuVUludDMyOntJPW5ldyBVaW50MzJBcnJheSh0KTticmVha31jYXNlIFMuSW50MzI6e0k9bmV3IEludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/ST1uZXcgQmlnVWludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFMuSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/ST1uZXcgQmlnSW50NjRBcnJheSh0KTpJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDMyOntJPW5ldyBGbG9hdDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBqLkZsb2F0NjQ6e0k9bmV3IEZsb2F0NjRBcnJheSh0KTticmVha31jYXNlIm51bGwiOntJPW51bGw7YnJlYWt9Y2FzZSBudWxsOntJPW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gSX12YXIgRz1oZTt2YXIgWnQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsanQ9bmV3IFRleHRFbmNvZGVyLFd0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBkZShBLHQpe2xldCBJPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LGU9QS5mc19vcGVuKHQsSS5mbGFncykscj1BLmZzX3N0YXQodCkuc2l6ZSxvPW51bGw7WnQ/bz1uZXcgU2hhcmVkQXJyYXlCdWZmZXIocik6bz1uZXcgQXJyYXlCdWZmZXIocik7bGV0IG49bmV3IFVpbnQ4QXJyYXkobyk7cmV0dXJuIEEuZnNfcmVhZChlLG4sMCxyLDApLEEuZnNfY2xvc2UoZSksbn1mdW5jdGlvbiBWdChBLHQsSSl7bGV0IGU9bnVsbDtadD9lPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihJKTplPW5ldyBBcnJheUJ1ZmZlcihJKTtsZXQgZz1uZXcgVWludDhBcnJheShlKSxyPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcix0LEkpO3JldHVybiBnLnNldChyKSxnfWZ1bmN0aW9uIGQoQSx0LEksZSl7bGV0IGc9MDtyZXR1cm4gdCE9PW51bGwmJihnPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksZSx0LmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxnKSksZ31mdW5jdGlvbiBNKEEsdCxJKXtsZXQgZT1KU09OLnN0cmluZ2lmeSh0KSxnPUEubGVuZ3RoQnl0ZXNVVEY4KGUpKzEscj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksZ10pO0Euc3RyaW5nVG9VVEY4KGUscixnKX1mdW5jdGlvbiBwKEEsdCxJLGUpe2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxJXSksbz1WdChBLGcscik7cmV0dXJuIEcoZSxvLmJ1ZmZlcil9ZnVuY3Rpb24gbUEoQSx0KXtsZXQgST1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLHRdKSxlPUEuVVRGOFRvU3RyaW5nKEkpO3JldHVybiBKU09OLnBhcnNlKGUpfWZ1bmN0aW9uIHllKEEsdCxJLGUpe2UhPW51bGwmJmUubGVuZ3RoPjAmJmUuZm9yRWFjaChmdW5jdGlvbihRLEIpe3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgaT1qdC5lbmNvZGUoUS5kYXRhLmRhdGEpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgaT1qdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoUS5kYXRhKSksZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgaT1RLmRhdGEuZGF0YSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5kYXRhLEIsMCkscz1kKEEsaS5kaXJlY3Rpb24sQiwxKSxFPXR5cGVvZiBpLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGkubWV0YWRhdGEuZW50cmllcygpKTpbXSxjPXtpbWFnZVR5cGU6aS5pbWFnZVR5cGUsbmFtZTppLm5hbWUsb3JpZ2luOmkub3JpZ2luLHNwYWNpbmc6aS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxzaXplOmkuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOkV9O00oQSxjLEIpO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLmNlbGxzLEIsMSksRT1kKEEsaS5wb2ludERhdGEsQiwyKSxjPWQoQSxpLmNlbGxEYXRhLEIsMyksdT17bWVzaFR5cGU6aS5tZXNoVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOmkubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxjZWxsQnVmZmVyU2l6ZTppLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZkNlbGxQaXhlbHM6aS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O00oQSx1LEIpO2JyZWFrfWNhc2UgRC5Qb2ludFNldDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5wb2ludERhdGEsQiwxKSxFPXtwb2ludFNldFR5cGU6aS5wb2ludFNldFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gfTtNKEEsRSxCKTticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkudmVydGljZXMsQiwxKSxFPWQoQSxpLmxpbmVzLEIsMiksYz1kKEEsaS5wb2x5Z29ucyxCLDMpLHU9ZChBLGkudHJpYW5nbGVTdHJpcHMsQiw0KSx5PWQoQSxpLnBvaW50RGF0YSxCLDUpLFI9ZChBLGkucG9pbnREYXRhLEIsNiksTj17cG9seURhdGFUeXBlOmkucG9seURhdGFUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTppLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxsaW5lc0J1ZmZlclNpemU6aS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOmkucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTppLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5fWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtNKEEsTixCKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgZz1BLnN0YWNrU2F2ZSgpLHI9MDt0cnl7cj1BLmNhbGxNYWluKHQuc2xpY2UoKSl9Y2F0Y2goUSl7dGhyb3cgdHlwZW9mIFE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoUSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksUX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKGcpfWxldCBvPUEuZ2V0TW9kdWxlU3Rkb3V0KCksbj1BLmdldE1vZHVsZVN0ZGVycigpLGE9W107cmV0dXJuIEkhPW51bGwmJkkubGVuZ3RoPjAmJnI9PT0wJiZJLmZvckVhY2goZnVuY3Rpb24oUSxCKXtsZXQgaT1udWxsO3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHMsRSk7aT17ZGF0YTpXdC5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9SlNPTi5wYXJzZShXdC5kZWNvZGUoYykpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSk7aT17ZGF0YTpWdChBLHMsRSl9O2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7aT17cGF0aDpRLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoUS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7aT17cGF0aDpRLmRhdGEucGF0aCxkYXRhOmRlKEEsUS5kYXRhLnBhdGgpfTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBzPW1BKEEsQik7cy5kYXRhPXAoQSxCLDAscy5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSkscy5kaXJlY3Rpb249cChBLEIsMSxqLkZsb2F0NjQpLHMubWV0YWRhdGE9bmV3IE1hcChzLm1ldGFkYXRhKSxpPXM7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAscy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOnMucG9pbnRzPUcocy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbHM+MD9zLmNlbGxzPXAoQSxCLDEscy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6cy5jZWxscz1HKHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwyLHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/cy5jZWxsRGF0YT1wKEEsQiwzLHMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6cy5jZWxsRGF0YT1HKHMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAscy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDEscy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLGouRmxvYXQzMik6cy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxzLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP3MudmVydGljZXM9cChBLEIsMSxTLlVJbnQzMik6cy52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXkscy5saW5lc0J1ZmZlclNpemU+MD9zLmxpbmVzPXAoQSxCLDIsUy5VSW50MzIpOnMubGluZXM9bmV3IFVpbnQzMkFycmF5LHMucG9seWdvbnNCdWZmZXJTaXplPjA/cy5wb2x5Z29ucz1wKEEsQiwzLFMuVUludDMyKTpzLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP3MudHJpYW5nbGVTdHJpcHM9cChBLEIsNCxTLlVJbnQzMik6cy50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsNSxzLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/cy5jZWxsRGF0YT1wKEEsQiw2LHMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6US50eXBlLGRhdGE6aX07YS5wdXNoKGYpfSkse3JldHVyblZhbHVlOnIsc3Rkb3V0Om8sc3RkZXJyOm4sb3V0cHV0czphfX12YXIgWHQ9eWU7dmFyIHdlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBtZShBLHQpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IEk9W107Zm9yKGxldCBlPTA7ZTxBLmxlbmd0aDtlKyspe2xldCBnPXBlKEFbZV0sdCk7ZyE9PW51bGwmJkkucHVzaChnKX1yZXR1cm4gSX1mdW5jdGlvbiBwZShBLHQpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IEk9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/ST1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihJPUEpLHdlJiZJIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDp0P0k6SS5zbGljZSgwKX12YXIgenQ9bWU7ZnVuY3Rpb24gU2UoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIF90PVNlO2Z1bmN0aW9uIEZlKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciB2dD1GZTtmdW5jdGlvbiBSZShBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgJHQ9UmU7YXN5bmMgZnVuY3Rpb24gTmUoQSx0LEksZSl7bGV0IGc9WHQoQSx0LEksZSkscj1bXTtyZXR1cm4gZy5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24obyl7aWYoby50eXBlPT09RC5CaW5hcnlTdHJlYW18fG8udHlwZT09PUQuQmluYXJ5RmlsZSl7bGV0IG49by5kYXRhO3IucHVzaChuKX1lbHNlIGlmKG8udHlwZT09PUQuSW1hZ2Upe2xldCBuPW8uZGF0YTtyLnB1c2goLi4uX3QobikpfWVsc2UgaWYoby50eXBlPT09RC5NZXNoKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLnZ0KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuUG9seURhdGEpe2xldCBuPW8uZGF0YTtyLnB1c2goLi4uJHQobikpfX0pLEZBKGcsenQociwhMCkpfXZhciBBST1OZTt2YXIgVWU9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsdCxJLGUsZyxyKXtsZXQgbz1hd2FpdCB4dChBLHQscik7cmV0dXJuIGF3YWl0IEFJKG8sSSxlLGcpfX07aUEoVWUpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7QnQobHQpO2V4cG9ydHtubiBhcyBkb3duc2FtcGxlLFhyIGFzIGRvd25zYW1wbGVCaW5TaHJpbmssQW4gYXMgZG93bnNhbXBsZUxhYmVsSW1hZ2UsdG4gYXMgZG93bnNhbXBsZVNpZ21hLGFuIGFzIGdhdXNzaWFuS2VybmVsUmFkaXVzLE8gYXMgZ2V0RGVmYXVsdFdlYldvcmtlcixSIGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLEwgYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCxJcyBhcyBzZXREZWZhdWx0V2ViV29ya2VyLEJ0IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLHRzIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsYkEgYXMgdmVyc2lvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fee6fe6b8..86ee126db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -573,9 +573,6 @@ importers: '@itk-wasm/dam': specifier: ^1.1.0 version: 1.1.1 - '@thewtex/setup-micromamba': - specifier: ^1.9.7 - version: 1.9.7 itk-wasm: specifier: workspace:^ version: link:../core/typescript/itk-wasm From 6b196b50e4da406ae130ee245d82211fdf412c64 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Thu, 24 Oct 2024 13:57:11 -0400 Subject: [PATCH 26/39] chore(downsample): bump version to 1.4.3 --- .../itkwasm_downsample_emscripten/_version.py | 2 +- .../itkwasm_downsample_emscripten/js_package.py | 2 +- .../itkwasm-downsample-wasi/itkwasm_downsample_wasi/_version.py | 2 +- .../python/itkwasm-downsample/itkwasm_downsample/_version.py | 2 +- packages/downsample/typescript/package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/_version.py b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/_version.py index daa50c7cf..aa56ed404 100644 --- a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/_version.py +++ b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/_version.py @@ -1 +1 @@ -__version__ = "1.4.2" +__version__ = "1.4.3" diff --git a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py index 72366bcfb..2c15e5f33 100644 --- a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py +++ b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIGN0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgUXQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSljdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHV0PSIxLjQuMiIsYkE9dXQ7dmFyIGZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1mdDt2YXIgcHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFk9cHQ7ZnVuY3Rpb24gZHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIFMuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIFMuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIFkuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgWS5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIE49ZHQ7dmFyIG10PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sdT1tdDt2YXIgaWU9U3ltYm9sKCJDb21saW5rLnByb3h5IiksaHQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksTkE9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLEZBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxzQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksYWU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIseXQ9e2NhbkhhbmRsZTpBPT5hZShBKSYmQVtpZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gSWUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLEdBKEEpfX0sd3Q9e2NhbkhhbmRsZTpBPT5hZShBKSYmc0EgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LHNlPW5ldyBNYXAoW1sicHJveHkiLHl0XSxbInRocm93Iix3dF1dKTtmdW5jdGlvbiBEdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gSWUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG4pe2lmKCFufHwhbi5kYXRhKXJldHVybjtpZighRHQodCxuLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7bi5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6byx0eXBlOmkscGF0aDpnfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxuLmRhdGEpLGw9KG4uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoSCksQzt0cnl7bGV0IEk9Zy5zbGljZSgwLC0xKS5yZWR1Y2UoKGMsQik9PmNbQl0sQSksYT1nLnJlZHVjZSgoYyxCKT0+Y1tCXSxBKTtzd2l0Y2goaSl7Y2FzZSJHRVQiOkM9YTticmVhaztjYXNlIlNFVCI6SVtnLnNsaWNlKC0xKVswXV09SChuLmRhdGEudmFsdWUpLEM9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6Qz1hLmFwcGx5KEksbCk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgYz1uZXcgYSguLi5sKTtDPUZ0KGMpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Yyxwb3J0MjpCfT1uZXcgTWVzc2FnZUNoYW5uZWw7SWUoQSxCKSxDPUxBKGMsW2NdKX1icmVhaztjYXNlIlJFTEVBU0UiOkM9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChJKXtDPXt2YWx1ZTpJLFtzQV06MH19UHJvbWlzZS5yZXNvbHZlKEMpLmNhdGNoKEk9Pih7dmFsdWU6SSxbc0FdOjB9KSkudGhlbihJPT57bGV0W2EsY109QkEoSSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOm99KSxjKSxpPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxnZShlKSxGQSBpbiBBJiZ0eXBlb2YgQVtGQV09PSJmdW5jdGlvbiImJkFbRkFdKCkpfSkuY2F0Y2goST0+e2xldFthLGNdPUJBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbc0FdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6b30pLGMpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gU3QoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gZ2UoQSl7U3QoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBHQShBLGUpe3JldHVybiBVQShBLFtdLGUpfWZ1bmN0aW9uIGFBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBCZShBKXtyZXR1cm4gcShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntnZShBKX0pfXZhciBJQT1uZXcgV2Vha01hcCxnQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oSUEuZ2V0KEEpfHwwKS0xO0lBLnNldChBLGUpLGU9PT0wJiZCZShBKX0pO2Z1bmN0aW9uIGt0KEEsZSl7bGV0IHQ9KElBLmdldChlKXx8MCkrMTtJQS5zZXQoZSx0KSxnQSYmZ0EucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIFJ0KEEpe2dBJiZnQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIFVBKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbj1uZXcgUHJveHkodCx7Z2V0KG8saSl7aWYoYUEociksaT09PU5BKXJldHVybigpPT57UnQobiksQmUoQSkscj0hMH07aWYoaT09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5ufTtsZXQgZz1xKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChsPT5sLnRvU3RyaW5nKCkpfSkudGhlbihIKTtyZXR1cm4gZy50aGVuLmJpbmQoZyl9cmV0dXJuIFVBKEEsWy4uLmUsaV0pfSxzZXQobyxpLGcpe2FBKHIpO2xldFtsLENdPUJBKGcpO3JldHVybiBxKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxpXS5tYXAoST0+SS50b1N0cmluZygpKSx2YWx1ZTpsfSxDKS50aGVuKEgpfSxhcHBseShvLGksZyl7YUEocik7bGV0IGw9ZVtlLmxlbmd0aC0xXTtpZihsPT09aHQpcmV0dXJuIHEoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihIKTtpZihsPT09ImJpbmQiKXJldHVybiBVQShBLGUuc2xpY2UoMCwtMSkpO2xldFtDLEldPW9lKGcpO3JldHVybiBxKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkN9LEkpLnRoZW4oSCl9LGNvbnN0cnVjdChvLGkpe2FBKHIpO2xldFtnLGxdPW9lKGkpO3JldHVybiBxKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChDPT5DLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpnfSxsKS50aGVuKEgpfX0pO3JldHVybiBrdChuLEEpLG59ZnVuY3Rpb24gYnQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gb2UoQSl7bGV0IGU9QS5tYXAoQkEpO3JldHVybltlLm1hcCh0PT50WzBdKSxidChlLm1hcCh0PT50WzFdKSldfXZhciBDZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBMQShBLGUpe3JldHVybiBDZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIEZ0KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tpZV06ITB9KX1mdW5jdGlvbiBCQShBKXtmb3IobGV0W2UsdF1vZiBzZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isbl09dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sbl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LENlLmdldChBKXx8W11dfWZ1bmN0aW9uIEgoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gc2UuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBxKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBuPVV0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBvKGkpeyFpLmRhdGF8fCFpLmRhdGEuaWR8fGkuZGF0YS5pZCE9PW58fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHIoaS5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpufSxlKSx0KX0pfWZ1bmN0aW9uIFV0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBaKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6TnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOlRBfT1PYmplY3QsbEE9KEE9PmU9PntsZXQgdD1OdC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksRz1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+bEEoZSk9PT1BKSxFQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6S309QXJyYXksWD1FQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gR3QoQSl7cmV0dXJuIEEhPT1udWxsJiYhWChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFYKEEuY29uc3RydWN0b3IpJiZrKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBRZT1HKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIEx0KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmUWUoQS5idWZmZXIpLGV9dmFyIE90PUVBKCJzdHJpbmciKSxrPUVBKCJmdW5jdGlvbiIpLHVlPUVBKCJudW1iZXIiKSxjQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLFB0PUE9PkE9PT0hMHx8QT09PSExLENBPUE9PntpZihsQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPVRBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LFR0PUcoIkRhdGUiKSx4dD1HKCJGaWxlIiksSnQ9RygiQmxvYiIpLEh0PUcoIkZpbGVMaXN0IiksTXQ9QT0+Y0EoQSkmJmsoQS5waXBlKSxZdD1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8ayhBLmFwcGVuZCkmJigoZT1sQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJmsoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0scXQ9RygiVVJMU2VhcmNoUGFyYW1zIiksS3Q9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uICQoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixuO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxLKEEpKWZvcihyPTAsbj1BLmxlbmd0aDtyPG47cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBvPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksaT1vLmxlbmd0aCxnO2ZvcihyPTA7cjxpO3IrKylnPW9bcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBmZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsbjtmb3IoO3ItLSA+MDspaWYobj10W3JdLGU9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG47cmV0dXJuIG51bGx9dmFyIHBlPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsZGU9QT0+IVgoQSkmJkEhPT1wZTtmdW5jdGlvbiBQQSgpe2xldHtjYXNlbGVzczpBfT1kZSh0aGlzKSYmdGhpc3x8e30sZT17fSx0PShyLG4pPT57bGV0IG89QSYmZmUoZSxuKXx8bjtDQShlW29dKSYmQ0Eocik/ZVtvXT1QQShlW29dLHIpOkNBKHIpP2Vbb109UEEoe30scik6SyhyKT9lW29dPXIuc2xpY2UoKTplW29dPXJ9O2ZvcihsZXQgcj0wLG49YXJndW1lbnRzLmxlbmd0aDtyPG47cisrKWFyZ3VtZW50c1tyXSYmJChhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIFd0PShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PigkKGUsKG4sbyk9Pnt0JiZrKG4pP0Fbb109WihuLHQpOkFbb109bn0se2FsbE93bktleXM6cn0pLEEpLGp0PUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksdnQ9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sX3Q9KEEsZSx0LHIpPT57bGV0IG4sbyxpLGc9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLG89bi5sZW5ndGg7by0tID4wOylpPW5bb10sKCFyfHxyKGksQSxlKSkmJiFnW2ldJiYoZVtpXT1BW2ldLGdbaV09ITApO0E9dCE9PSExJiZUQShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0senQ9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxWdD1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoSyhBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighdWUoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LFp0PShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZUQShVaW50OEFycmF5KSksWHQ9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG47Zm9yKDsobj1yLm5leHQoKSkmJiFuLmRvbmU7KXtsZXQgbz1uLnZhbHVlO2UuY2FsbChBLG9bMF0sb1sxXSl9fSwkdD0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxBcj1HKCJIVE1MRm9ybUVsZW1lbnQiKSxlcj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbil7cmV0dXJuIHIudG9VcHBlckNhc2UoKStufSksRWU9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLHRyPUcoIlJlZ0V4cCIpLG1lPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTskKHQsKG4sbyk9PntsZXQgaTsoaT1lKG4sbyxBKSkhPT0hMSYmKHJbb109aXx8bil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxycj1BPT57bWUoQSwoZSx0KT0+e2lmKGsoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoayhyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxucj0oQSxlKT0+e2xldCB0PXt9LHI9bj0+e24uZm9yRWFjaChvPT57dFtvXT0hMH0pfTtyZXR1cm4gSyhBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxvcj0oKT0+e30saXI9KEEsZSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOmUpLE9BPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsY2U9IjAxMjM0NTY3ODkiLGhlPXtESUdJVDpjZSxBTFBIQTpPQSxBTFBIQV9ESUdJVDpPQStPQS50b1VwcGVyQ2FzZSgpK2NlfSxhcj0oQT0xNixlPWhlLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6cn09ZTtmb3IoO0EtLTspdCs9ZVtNYXRoLnJhbmRvbSgpKnJ8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIHNyKEEpe3JldHVybiEhKEEmJmsoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBJcj1BPT57bGV0IGU9bmV3IEFycmF5KDEwKSx0PShyLG4pPT57aWYoY0Eocikpe2lmKGUuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXtlW25dPXI7bGV0IG89SyhyKT9bXTp7fTtyZXR1cm4gJChyLChpLGcpPT57bGV0IGw9dChpLG4rMSk7IVgobCkmJihvW2ddPWwpfSksZVtuXT12b2lkIDAsb319cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LGdyPUcoIkFzeW5jRnVuY3Rpb24iKSxCcj1BPT5BJiYoY0EoQSl8fGsoQSkpJiZrKEEudGhlbikmJmsoQS5jYXRjaCkscz17aXNBcnJheTpLLGlzQXJyYXlCdWZmZXI6UWUsaXNCdWZmZXI6R3QsaXNGb3JtRGF0YTpZdCxpc0FycmF5QnVmZmVyVmlldzpMdCxpc1N0cmluZzpPdCxpc051bWJlcjp1ZSxpc0Jvb2xlYW46UHQsaXNPYmplY3Q6Y0EsaXNQbGFpbk9iamVjdDpDQSxpc1VuZGVmaW5lZDpYLGlzRGF0ZTpUdCxpc0ZpbGU6eHQsaXNCbG9iOkp0LGlzUmVnRXhwOnRyLGlzRnVuY3Rpb246ayxpc1N0cmVhbTpNdCxpc1VSTFNlYXJjaFBhcmFtczpxdCxpc1R5cGVkQXJyYXk6WnQsaXNGaWxlTGlzdDpIdCxmb3JFYWNoOiQsbWVyZ2U6UEEsZXh0ZW5kOld0LHRyaW06S3Qsc3RyaXBCT006anQsaW5oZXJpdHM6dnQsdG9GbGF0T2JqZWN0Ol90LGtpbmRPZjpsQSxraW5kT2ZUZXN0OkcsZW5kc1dpdGg6enQsdG9BcnJheTpWdCxmb3JFYWNoRW50cnk6WHQsbWF0Y2hBbGw6JHQsaXNIVE1MRm9ybTpBcixoYXNPd25Qcm9wZXJ0eTpFZSxoYXNPd25Qcm9wOkVlLHJlZHVjZURlc2NyaXB0b3JzOm1lLGZyZWV6ZU1ldGhvZHM6cnIsdG9PYmplY3RTZXQ6bnIsdG9DYW1lbENhc2U6ZXIsbm9vcDpvcix0b0Zpbml0ZU51bWJlcjppcixmaW5kS2V5OmZlLGdsb2JhbDpwZSxpc0NvbnRleHREZWZpbmVkOmRlLEFMUEhBQkVUOmhlLGdlbmVyYXRlU3RyaW5nOmFyLGlzU3BlY0NvbXBsaWFudEZvcm06c3IsdG9KU09OT2JqZWN0OklyLGlzQXN5bmNGbjpncixpc1RoZW5hYmxlOkJyfTtmdW5jdGlvbiBXKEEsZSx0LHIsbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG4mJih0aGlzLnJlc3BvbnNlPW4pfXMuaW5oZXJpdHMoVyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIHllPVcucHJvdG90eXBlLHdlPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e3dlW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFcsd2UpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5ZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtXLmZyb209KEEsZSx0LHIsbixvKT0+e2xldCBpPU9iamVjdC5jcmVhdGUoeWUpO3JldHVybiBzLnRvRmxhdE9iamVjdChBLGksZnVuY3Rpb24obCl7cmV0dXJuIGwhPT1FcnJvci5wcm90b3R5cGV9LGc9PmchPT0iaXNBeGlvc0Vycm9yIiksVy5jYWxsKGksQS5tZXNzYWdlLGUsdCxyLG4pLGkuY2F1c2U9QSxpLm5hbWU9QS5uYW1lLG8mJk9iamVjdC5hc3NpZ24oaSxvKSxpfTt2YXIgcD1XO3ZhciBRQT1udWxsO2Z1bmN0aW9uIHhBKEEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQSl8fHMuaXNBcnJheShBKX1mdW5jdGlvbiBTZShBKXtyZXR1cm4gcy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBEZShBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG4sbyl7cmV0dXJuIG49U2UobiksIXQmJm8/IlsiK24rIl0iOm59KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIENyKEEpe3JldHVybiBzLmlzQXJyYXkoQSkmJiFBLnNvbWUoeEEpfXZhciBscj1zLnRvRmxhdE9iamVjdChzLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gRXIoQSxlLHQpe2lmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KFFBfHxGb3JtRGF0YSksdD1zLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oUSxmKXtyZXR1cm4hcy5pc1VuZGVmaW5lZChmW1FdKX0pO2xldCByPXQubWV0YVRva2VucyxuPXQudmlzaXRvcnx8SSxvPXQuZG90cyxpPXQuaW5kZXhlcyxsPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJnMuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighcy5pc0Z1bmN0aW9uKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gQyhFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihzLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFsJiZzLmlzQmxvYihFKSl0aHJvdyBuZXcgcCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gcy5pc0FycmF5QnVmZmVyKEUpfHxzLmlzVHlwZWRBcnJheShFKT9sJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gSShFLFEsZil7bGV0IGQ9RTtpZihFJiYhZiYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihzLmVuZHNXaXRoKFEsInt9IikpUT1yP1E6US5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYocy5pc0FycmF5KEUpJiZDcihFKXx8KHMuaXNGaWxlTGlzdChFKXx8cy5lbmRzV2l0aChRLCJbXSIpKSYmKGQ9cy50b0FycmF5KEUpKSlyZXR1cm4gUT1TZShRKSxkLmZvckVhY2goZnVuY3Rpb24oVSxFdCl7IShzLmlzVW5kZWZpbmVkKFUpfHxVPT09bnVsbCkmJmUuYXBwZW5kKGk9PT0hMD9EZShbUV0sRXQsbyk6aT09PW51bGw/UTpRKyJbXSIsQyhVKSl9KSwhMX1yZXR1cm4geEEoRSk/ITA6KGUuYXBwZW5kKERlKGYsUSxvKSxDKEUpKSwhMSl9bGV0IGE9W10sYz1PYmplY3QuYXNzaWduKGxyLHtkZWZhdWx0VmlzaXRvcjpJLGNvbnZlcnRWYWx1ZTpDLGlzVmlzaXRhYmxlOnhBfSk7ZnVuY3Rpb24gQihFLFEpe2lmKCFzLmlzVW5kZWZpbmVkKEUpKXtpZihhLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrUS5qb2luKCIuIikpO2EucHVzaChFKSxzLmZvckVhY2goRSxmdW5jdGlvbihkLEYpeyghKHMuaXNVbmRlZmluZWQoZCl8fGQ9PT1udWxsKSYmbi5jYWxsKGUsZCxzLmlzU3RyaW5nKEYpP0YudHJpbSgpOkYsUSxjKSk9PT0hMCYmQihkLFE/US5jb25jYXQoRik6W0ZdKX0pLGEucG9wKCl9fWlmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gQihBKSxlfXZhciBUPUVyO2Z1bmN0aW9uIGtlKEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gUmUoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZUKEEsdGhpcyxlKX12YXIgYmU9UmUucHJvdG90eXBlO2JlLmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtiZS50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLGtlKX06a2U7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChuWzBdKSsiPSIrdChuWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHVBPVJlO2Z1bmN0aW9uIGNyKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIEFBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8Y3Isbj10JiZ0LnNlcmlhbGl6ZSxvO2lmKG4/bz1uKGUsdCk6bz1zLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgdUEoZSx0KS50b1N0cmluZyhyKSxvKXtsZXQgaT1BLmluZGV4T2YoIiMiKTtpIT09LTEmJihBPUEuc2xpY2UoMCxpKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gQX12YXIgSkE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe3MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxIQT1KQTt2YXIgZkE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBGZT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6dUE7dmFyIFVlPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgTmU9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgR2U9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6RmUsRm9ybURhdGE6VWUsQmxvYjpOZX0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBNQT17fTtRdChNQSx7aGFzQnJvd3NlckVudjooKT0+TGUsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5RcixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PnVyfSk7dmFyIExlPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLFFyPShBPT5MZSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLHVyPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgeT17Li4uTUEsLi4uR2V9O2Z1bmN0aW9uIFlBKEEsZSl7cmV0dXJuIFQoQSxuZXcgeS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixuLG8pe3JldHVybiB5LmlzTm9kZSYmcy5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOm8uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZSkpfWZ1bmN0aW9uIGZyKEEpe3JldHVybiBzLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxBKS5tYXAoZT0+ZVswXT09PSJbXSI/IiI6ZVsxXXx8ZVswXSl9ZnVuY3Rpb24gcHIoQSl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhBKSxyLG49dC5sZW5ndGgsbztmb3Iocj0wO3I8bjtyKyspbz10W3JdLGVbb109QVtvXTtyZXR1cm4gZX1mdW5jdGlvbiBkcihBKXtmdW5jdGlvbiBlKHQscixuLG8pe2xldCBpPXRbbysrXTtpZihpPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IGc9TnVtYmVyLmlzRmluaXRlKCtpKSxsPW8+PXQubGVuZ3RoO3JldHVybiBpPSFpJiZzLmlzQXJyYXkobik/bi5sZW5ndGg6aSxsPyhzLmhhc093blByb3AobixpKT9uW2ldPVtuW2ldLHJdOm5baV09ciwhZyk6KCghbltpXXx8IXMuaXNPYmplY3QobltpXSkpJiYobltpXT1bXSksZSh0LHIsbltpXSxvKSYmcy5pc0FycmF5KG5baV0pJiYobltpXT1wcihuW2ldKSksIWcpfWlmKHMuaXNGb3JtRGF0YShBKSYmcy5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBzLmZvckVhY2hFbnRyeShBLChyLG4pPT57ZShmcihyKSxuLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBwQT1kcjtmdW5jdGlvbiBtcihBLGUsdCl7aWYocy5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKEEpLHMudHJpbShBKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgcUE9e3RyYW5zaXRpb25hbDpmQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixuPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG89cy5pc09iamVjdChlKTtpZihvJiZzLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSkscy5pc0Zvcm1EYXRhKGUpKXJldHVybiBuP0pTT04uc3RyaW5naWZ5KHBBKGUpKTplO2lmKHMuaXNBcnJheUJ1ZmZlcihlKXx8cy5pc0J1ZmZlcihlKXx8cy5pc1N0cmVhbShlKXx8cy5pc0ZpbGUoZSl8fHMuaXNCbG9iKGUpKXJldHVybiBlO2lmKHMuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKHMuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKG8pe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIFlBKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1zLmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGw9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBUKGc/eyJmaWxlc1tdIjplfTplLGwmJm5ldyBsLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8bj8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLG1yKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxxQS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG49dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoZSYmcy5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bikpe2xldCBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm47dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKGkpdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9wLmZyb20oZyxwLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp5LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp5LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e3FBLmhlYWRlcnNbQV09e319KTt2YXIgaj1xQTt2YXIgaHI9cy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxPZT1BPT57bGV0IGU9e30sdCxyLG47cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe249aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLG4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9aS5zdWJzdHJpbmcobisxKS50cmltKCksISghdHx8ZVt0XSYmaHJbdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgUGU9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGRBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAoZEEpOlN0cmluZyhBKX1mdW5jdGlvbiB5cihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgd3I9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gS0EoQSxlLHQscixuKXtpZihzLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYobiYmKGU9dCksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIERyKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIFNyKEEsZSl7bGV0IHQ9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxuLG8saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIHY9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgbj10aGlzO2Z1bmN0aW9uIG8oZyxsLEMpe2xldCBJPWVBKGwpO2lmKCFJKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgYT1zLmZpbmRLZXkobixJKTsoIWF8fG5bYV09PT12b2lkIDB8fEM9PT0hMHx8Qz09PXZvaWQgMCYmblthXSE9PSExKSYmKG5bYXx8bF09ZEEoZykpfWxldCBpPShnLGwpPT5zLmZvckVhY2goZywoQyxJKT0+byhDLEksbCkpO3JldHVybiBzLmlzUGxhaW5PYmplY3QoZSl8fGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2koZSx0KTpzLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiF3cihlKT9pKE9lKGUpLHQpOmUhPW51bGwmJm8odCxlLHIpLHRoaXN9Z2V0KGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgbj10aGlzW3JdO2lmKCF0KXJldHVybiBuO2lmKHQ9PT0hMClyZXR1cm4geXIobik7aWYocy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxuLHIpO2lmKHMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhuKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fEtBKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxuPSExO2Z1bmN0aW9uIG8oaSl7aWYoaT1lQShpKSxpKXtsZXQgZz1zLmZpbmRLZXkocixpKTtnJiYoIXR8fEtBKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLG49ITApfX1yZXR1cm4gcy5pc0FycmF5KGUpP2UuZm9yRWFjaChvKTpvKGUpLG59Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxuPSExO2Zvcig7ci0tOyl7bGV0IG89dFtyXTsoIWV8fEtBKHRoaXMsdGhpc1tvXSxvLGUsITApKSYmKGRlbGV0ZSB0aGlzW29dLG49ITApfXJldHVybiBufW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIHMuZm9yRWFjaCh0aGlzLChuLG8pPT57bGV0IGk9cy5maW5kS2V5KHIsbyk7aWYoaSl7dFtpXT1kQShuKSxkZWxldGUgdFtvXTtyZXR1cm59bGV0IGc9ZT9EcihvKTpTdHJpbmcobykudHJpbSgpO2chPT1vJiZkZWxldGUgdFtvXSx0W2ddPWRBKG4pLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKHIsbik9PntyIT1udWxsJiZyIT09ITEmJih0W25dPWUmJnMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG49PnIuc2V0KG4pKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1tQZV09dGhpc1tQZV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxuPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG8oaSl7bGV0IGc9ZUEoaSk7cltnXXx8KFNyKG4saSkscltnXT0hMCl9cmV0dXJuIHMuaXNBcnJheShlKT9lLmZvckVhY2gobyk6byhlKSx0aGlzfX07di5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7cy5yZWR1Y2VEZXNjcmlwdG9ycyh2LnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTtzLmZyZWV6ZU1ldGhvZHModik7dmFyIHc9djtmdW5jdGlvbiB0QShBLGUpe2xldCB0PXRoaXN8fGoscj1lfHx0LG49dy5mcm9tKHIuaGVhZGVycyksbz1yLmRhdGE7cmV0dXJuIHMuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe289Zy5jYWxsKHQsbyxuLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG4ubm9ybWFsaXplKCksb31mdW5jdGlvbiByQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFRlKEEsZSx0KXtwLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLHAuRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1zLmluaGVyaXRzKFRlLHAse19fQ0FOQ0VMX186ITB9KTt2YXIgeD1UZTtmdW5jdGlvbiBXQShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBwKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW3AuRVJSX0JBRF9SRVFVRVNULHAuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIHhlPXkuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLG4sbyl7bGV0IGk9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07cy5pc051bWJlcih0KSYmaS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSkscy5pc1N0cmluZyhyKSYmaS5wdXNoKCJwYXRoPSIrcikscy5pc1N0cmluZyhuKSYmaS5wdXNoKCJkb21haW49IituKSxvPT09ITAmJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIGpBKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gdkEoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIG5BKEEsZSl7cmV0dXJuIEEmJiFqQShlKT92QShBLGUpOmV9dmFyIEplPXkuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG4obyl7bGV0IGk9bztyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSxpPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihpKXtsZXQgZz1zLmlzU3RyaW5nKGkpP24oaSk6aTtyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gX0EoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIGtyKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksbj0wLG89MCxpO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24obCl7bGV0IEM9RGF0ZS5ub3coKSxJPXJbb107aXx8KGk9QyksdFtuXT1sLHJbbl09QztsZXQgYT1vLGM9MDtmb3IoO2EhPT1uOyljKz10W2ErK10sYT1hJUE7aWYobj0obisxKSVBLG49PT1vJiYobz0obysxKSVBKSxDLWk8ZSlyZXR1cm47bGV0IEI9SSYmQy1JO3JldHVybiBCP01hdGgucm91bmQoYyoxZTMvQik6dm9pZCAwfX12YXIgSGU9a3I7ZnVuY3Rpb24gTWUoQSxlKXtsZXQgdD0wLHI9SGUoNTAsMjUwKTtyZXR1cm4gbj0+e2xldCBvPW4ubG9hZGVkLGk9bi5sZW5ndGhDb21wdXRhYmxlP24udG90YWw6dm9pZCAwLGc9by10LGw9cihnKSxDPW88PWk7dD1vO2xldCBJPXtsb2FkZWQ6byx0b3RhbDppLHByb2dyZXNzOmk/by9pOnZvaWQgMCxieXRlczpnLHJhdGU6bHx8dm9pZCAwLGVzdGltYXRlZDpsJiZpJiZDPyhpLW8pL2w6dm9pZCAwLGV2ZW50Om59O0lbZT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKEkpfX12YXIgUnI9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixZZT1SciYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG49QS5kYXRhLG89dy5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTppLHdpdGhYU1JGVG9rZW46Z309QSxsO2Z1bmN0aW9uIEMoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbCl9bGV0IEk7aWYocy5pc0Zvcm1EYXRhKG4pKXtpZih5Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8eS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpby5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoST1vLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtRLC4uLmZdPUk/SS5zcGxpdCgiOyIpLm1hcChkPT5kLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO28uc2V0Q29udGVudFR5cGUoW1F8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5mXS5qb2luKCI7ICIpKX19bGV0IGE9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IFE9QS5hdXRoLnVzZXJuYW1lfHwiIixmPUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7by5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoUSsiOiIrZikpfWxldCBjPW5BKEEuYmFzZVVSTCxBLnVybCk7YS5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksQUEoYyxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxhLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIEIoKXtpZighYSlyZXR1cm47bGV0IFE9dy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYSYmYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksZD17ZGF0YTohaXx8aT09PSJ0ZXh0Inx8aT09PSJqc29uIj9hLnJlc3BvbnNlVGV4dDphLnJlc3BvbnNlLHN0YXR1czphLnN0YXR1cyxzdGF0dXNUZXh0OmEuc3RhdHVzVGV4dCxoZWFkZXJzOlEsY29uZmlnOkEscmVxdWVzdDphfTtXQShmdW5jdGlvbihVKXt0KFUpLEMoKX0sZnVuY3Rpb24oVSl7cihVKSxDKCl9LGQpLGE9bnVsbH1pZigib25sb2FkZW5kImluIGE/YS5vbmxvYWRlbmQ9QjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFhfHxhLnJlYWR5U3RhdGUhPT00fHxhLnN0YXR1cz09PTAmJiEoYS5yZXNwb25zZVVSTCYmYS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoQil9LGEub25hYm9ydD1mdW5jdGlvbigpe2EmJihyKG5ldyBwKCJSZXF1ZXN0IGFib3J0ZWQiLHAuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbCl9LGEub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IHAoIk5ldHdvcmsgRXJyb3IiLHAuRVJSX05FVFdPUkssQSxhKSksYT1udWxsfSxhLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBmPUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixkPUEudHJhbnNpdGlvbmFsfHxmQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihmPUEudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgcChmLGQuY2xhcmlmeVRpbWVvdXRFcnJvcj9wLkVUSU1FRE9VVDpwLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGx9LHkuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoZyYmcy5pc0Z1bmN0aW9uKGcpJiYoZz1nKEEpKSxnfHxnIT09ITEmJkplKGMpKSl7bGV0IFE9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmeGUucmVhZChBLnhzcmZDb29raWVOYW1lKTtRJiZvLnNldChBLnhzcmZIZWFkZXJOYW1lLFEpfW49PT12b2lkIDAmJm8uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYSYmcy5mb3JFYWNoKG8udG9KU09OKCksZnVuY3Rpb24oZixkKXthLnNldFJlcXVlc3RIZWFkZXIoZCxmKX0pLHMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoYS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksaSYmaSE9PSJqc29uIiYmKGEucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLE1lKEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS51cGxvYWQmJmEudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixNZShBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYobD1RPT57YSYmKHIoIVF8fFEudHlwZT9uZXcgeChudWxsLEEsYSk6USksYS5hYm9ydCgpLGE9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9sKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpKSk7bGV0IEU9X0EoYyk7aWYoRSYmeS5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtyKG5ldyBwKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLHAuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59YS5zZW5kKG58fG51bGwpfSl9O3ZhciB6QT17aHR0cDpRQSx4aHI6WWV9O3MuZm9yRWFjaCh6QSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBxZT1BPT5gLSAke0F9YCxicj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbUE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsbj17fTtmb3IobGV0IG89MDtvPGU7bysrKXt0PUFbb107bGV0IGk7aWYocj10LCFicih0KSYmKHI9ekFbKGk9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgcChgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHIpYnJlYWs7bltpfHwiIyIrb109cn1pZighcil7bGV0IG89T2JqZWN0LmVudHJpZXMobikubWFwKChbZyxsXSk9PmBhZGFwdGVyICR7Z30gYCsobD09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9vLmxlbmd0aD4xP2BzaW5jZSA6CmArby5tYXAocWUpLmpvaW4oYApgKToiICIrcWUob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgcCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczp6QX07ZnVuY3Rpb24gVkEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHgobnVsbCxBKX1mdW5jdGlvbiBoQShBKXtyZXR1cm4gVkEoQSksQS5oZWFkZXJzPXcuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fGouYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gVkEoQSksci5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz13LmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gckEocil8fChWQShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz13LmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIEtlPUE9PkEgaW5zdGFuY2VvZiB3P3suLi5BfTpBO2Z1bmN0aW9uIFAoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoQyxJLGEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQykmJnMuaXNQbGFpbk9iamVjdChJKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOmF9LEMsSSk6cy5pc1BsYWluT2JqZWN0KEkpP3MubWVyZ2Uoe30sSSk6cy5pc0FycmF5KEkpP0kuc2xpY2UoKTpJfWZ1bmN0aW9uIG4oQyxJLGEpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDLGEpfWVsc2UgcmV0dXJuIHIoQyxJLGEpfWZ1bmN0aW9uIG8oQyxJKXtpZighcy5pc1VuZGVmaW5lZChJKSlyZXR1cm4gcih2b2lkIDAsSSl9ZnVuY3Rpb24gaShDLEkpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDKX1lbHNlIHJldHVybiByKHZvaWQgMCxJKX1mdW5jdGlvbiBnKEMsSSxhKXtpZihhIGluIGUpcmV0dXJuIHIoQyxJKTtpZihhIGluIEEpcmV0dXJuIHIodm9pZCAwLEMpfWxldCBsPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooQyxJKT0+bihLZShDKSxLZShJKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihJKXtsZXQgYT1sW0ldfHxuLGM9YShBW0ldLGVbSV0sSSk7cy5pc1VuZGVmaW5lZChjKSYmYSE9PWd8fCh0W0ldPWMpfSksdH12YXIgeUE9IjEuNi44Ijt2YXIgWkE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57WkFbQV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIFdlPXt9O1pBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihvLGkpe3JldHVybiJbQXhpb3MgdiIreUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitpKyhyPyIuICIrcjoiIil9cmV0dXJuKG8saSxnKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgcChuKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLHAuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhV2VbaV0mJihXZVtpXT0hMCxjb25zb2xlLndhcm4obihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLGksZyk6ITB9fTtmdW5jdGlvbiBGcihBLGUsdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBwKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixwLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhBKSxuPXIubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IG89cltuXSxpPWVbb107aWYoaSl7bGV0IGc9QVtvXSxsPWc9PT12b2lkIDB8fGkoZyxvLEEpO2lmKGwhPT0hMCl0aHJvdyBuZXcgcCgib3B0aW9uICIrbysiIG11c3QgYmUgIitsLHAuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgcCgiVW5rbm93biBvcHRpb24gIitvLHAuRVJSX0JBRF9PUFRJT04pfX12YXIgd0E9e2Fzc2VydE9wdGlvbnM6RnIsdmFsaWRhdG9yczpaQX07dmFyIEo9d0EudmFsaWRhdG9ycyxfPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgSEEscmVzcG9uc2U6bmV3IEhBfX1hc3luYyByZXF1ZXN0KGUsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgbz1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP28mJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmArbyk6ci5zdGFjaz1vfXRocm93IHJ9fV9yZXF1ZXN0KGUsdCl7dHlwZW9mIGU9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPWUpOnQ9ZXx8e30sdD1QKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOm99PXQ7ciE9PXZvaWQgMCYmd0EuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkoudHJhbnNpdGlvbmFsKEouYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKHMuaXNGdW5jdGlvbihuKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTp3QS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpKLmZ1bmN0aW9uLHNlcmlhbGl6ZTpKLmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPW8mJnMubWVyZ2Uoby5jb21tb24sb1t0Lm1ldGhvZF0pO28mJnMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIG9bRV19KSx0LmhlYWRlcnM9dy5jb25jYXQoaSxvKTtsZXQgZz1bXSxsPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihRKXt0eXBlb2YgUS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZRLnJ1bldoZW4odCk9PT0hMXx8KGw9bCYmUS5zeW5jaHJvbm91cyxnLnVuc2hpZnQoUS5mdWxmaWxsZWQsUS5yZWplY3RlZCkpfSk7bGV0IEM9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihRKXtDLnB1c2goUS5mdWxmaWxsZWQsUS5yZWplY3RlZCl9KTtsZXQgSSxhPTAsYztpZighbCl7bGV0IEU9W2hBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsZyksRS5wdXNoLmFwcGx5KEUsQyksYz1FLmxlbmd0aCxJPVByb21pc2UucmVzb2x2ZSh0KTthPGM7KUk9SS50aGVuKEVbYSsrXSxFW2ErK10pO3JldHVybiBJfWM9Zy5sZW5ndGg7bGV0IEI9dDtmb3IoYT0wO2E8Yzspe2xldCBFPWdbYSsrXSxRPWdbYSsrXTt0cnl7Qj1FKEIpfWNhdGNoKGYpe1EuY2FsbCh0aGlzLGYpO2JyZWFrfX10cnl7ST1oQS5jYWxsKHRoaXMsQil9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihhPTAsYz1DLmxlbmd0aDthPGM7KUk9SS50aGVuKENbYSsrXSxDW2ErK10pO3JldHVybiBJfWdldFVyaShlKXtlPVAodGhpcy5kZWZhdWx0cyxlKTtsZXQgdD1uQShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBBQSh0LGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe18ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChQKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtzLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihvLGksZyl7cmV0dXJuIHRoaXMucmVxdWVzdChQKGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm8sZGF0YTppfSkpfX1fLnByb3RvdHlwZVtlXT10KCksXy5wcm90b3R5cGVbZSsiRm9ybSJdPXQoITApfSk7dmFyIG9BPV87dmFyIFhBPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihvKXt0PW99KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG49PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgbz1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7by0tID4wOylyLl9saXN0ZW5lcnNbb10obik7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1uPT57bGV0IG8saT1uZXcgUHJvbWlzZShnPT57ci5zdWJzY3JpYmUoZyksbz1nfSkudGhlbihuKTtyZXR1cm4gaS5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKG8pfSxpfSxlKGZ1bmN0aW9uKG8saSxnKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyB4KG8saSxnKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihuKXtlPW59KSxjYW5jZWw6ZX19fSxqZT1YQTtmdW5jdGlvbiAkQShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gQWUoQSl7cmV0dXJuIHMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIGVlPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhlZSkuZm9yRWFjaCgoW0EsZV0pPT57ZWVbZV09QX0pO3ZhciB2ZT1lZTtmdW5jdGlvbiBfZShBKXtsZXQgZT1uZXcgb0EoQSksdD1aKG9BLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiBzLmV4dGVuZCh0LG9BLnByb3RvdHlwZSxlLHthbGxPd25LZXlzOiEwfSkscy5leHRlbmQodCxlLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gX2UoUChBLG4pKX0sdH12YXIgbT1fZShqKTttLkF4aW9zPW9BO20uQ2FuY2VsZWRFcnJvcj14O20uQ2FuY2VsVG9rZW49amU7bS5pc0NhbmNlbD1yQTttLlZFUlNJT049eUE7bS50b0Zvcm1EYXRhPVQ7bS5BeGlvc0Vycm9yPXA7bS5DYW5jZWw9bS5DYW5jZWxlZEVycm9yO20uYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX07bS5zcHJlYWQ9JEE7bS5pc0F4aW9zRXJyb3I9QWU7bS5tZXJnZUNvbmZpZz1QO20uQXhpb3NIZWFkZXJzPXc7bS5mb3JtVG9KU09OPUE9PnBBKHMuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7bS5nZXRBZGFwdGVyPW1BLmdldEFkYXB0ZXI7bS5IdHRwU3RhdHVzQ29kZT12ZTttLmRlZmF1bHQ9bTt2YXIgej1tO3ZhcntBeGlvczpaaSxBeGlvc0Vycm9yOlhpLENhbmNlbGVkRXJyb3I6JGksaXNDYW5jZWw6QWEsQ2FuY2VsVG9rZW46ZWEsVkVSU0lPTjp0YSxhbGw6cmEsQ2FuY2VsOm5hLGlzQXhpb3NFcnJvcjpvYSxzcHJlYWQ6aWEsdG9Gb3JtRGF0YTphYSxBeGlvc0hlYWRlcnM6c2EsSHR0cFN0YXR1c0NvZGU6SWEsZm9ybVRvSlNPTjpnYSxnZXRBZGFwdGVyOkJhLG1lcmdlQ29uZmlnOkNhfT16O2FzeW5jIGZ1bmN0aW9uIFVyKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgbj1hd2FpdCB6LmdldCh0LHtyZXNwb25zZVR5cGU6ImJsb2IiLHBhcmFtczplfSksbz1VUkwuY3JlYXRlT2JqZWN0VVJMKG4uZGF0YSk7cj1uZXcgV29ya2VyKG8se3R5cGU6Im1vZHVsZSJ9KX1lbHNlIHI9bmV3IFdvcmtlcih0LHt0eXBlOiJtb2R1bGUifSk7cmV0dXJuIHJ9dmFyIGlBPVVyO2Z1bmN0aW9uIHplKEEpe2xldCBlPUdBKEEpLHQ9QTtyZXR1cm4gdC50ZXJtaW5hdGVkPSExLHQud29ya2VyUHJveHk9ZSx0Lm9yaWdpbmFsVGVybWluYXRlPXQudGVybWluYXRlLHQudGVybWluYXRlPSgpPT57dC50ZXJtaW5hdGVkPSEwLHQud29ya2VyUHJveHlbTkFdKCksdC5vcmlnaW5hbFRlcm1pbmF0ZSgpfSx7d29ya2VyUHJveHk6ZSx3b3JrZXI6dH19YXN5bmMgZnVuY3Rpb24gTnIoQSxlLHQpe2xldCByO2lmKEEhPW51bGwpe2xldCBvPUE7cmV0dXJuIG8ud29ya2VyUHJveHkhPT12b2lkIDA/KHI9by53b3JrZXJQcm94eSx7d29ya2VyUHJveHk6cix3b3JrZXI6b30pOnplKEEpfWxldCBuPWF3YWl0IGlBKGUsdCk7cmV0dXJuIHplKG4pfXZhciBWZT1Ocjthc3luYyBmdW5jdGlvbiBHcihBLGUsdCl7bGV0IHI9InVua25vd24iO3R5cGVvZiBBIT0ic3RyaW5nIj9yPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9yPUE6cj10eXBlb2YgZTwidSI/YCR7ZX0vJHtBfWA6QSxyLmVuZHNXaXRoKCIuanMiKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC0zKSksci5lbmRzV2l0aCgiLndhc20iKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC01KSk7bGV0IG49YCR7cn0ud2FzbWAsaT0oYXdhaXQgei5nZXQobix7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KSkuZGF0YTtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke3J9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6aX0pfXZhciBaZT1Hcjt2YXIgWGU9YXN5bmMoKT0+V2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNSwxLDk2LDAsMSwxMjMsMywyLDEsMCwxMCwxMCwxLDgsMCw2NSwwLDI1MywxNSwyNTMsOTgsMTFdKSk7dmFyIGV0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLCRlPW5ldyBUZXh0RW5jb2RlcixBdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gTHIoQSxlKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxyPUEuZnNfb3BlbihlLHQuZmxhZ3MpLG89QS5mc19zdGF0KGUpLnNpemUsaT1udWxsO2V0P2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKG8pOmk9bmV3IEFycmF5QnVmZmVyKG8pO2xldCBnPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBBLmZzX3JlYWQocixnLDAsbywwKSxBLmZzX2Nsb3NlKHIpLGd9ZnVuY3Rpb24gdHQoQSxlLHQpe2xldCByPW51bGw7ZXQ/cj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6cj1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IG49bmV3IFVpbnQ4QXJyYXkociksbz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZSx0KTtyZXR1cm4gbi5zZXQobyksbn1mdW5jdGlvbiBoKEEsZSx0LHIpe2xldCBuPTA7cmV0dXJuIGUhPT1udWxsJiYobj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LHIsZS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShlLmJ1ZmZlciksbikpLG59ZnVuY3Rpb24gTShBLGUsdCl7bGV0IHI9SlNPTi5zdHJpbmdpZnkoZSksbj1BLmxlbmd0aEJ5dGVzVVRGOChyKSsxLG89QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LG5dKTtBLnN0cmluZ1RvVVRGOChyLG8sbil9ZnVuY3Rpb24gRChBLGUsdCxyKXtsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxvPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLGk9dHQoQSxuLG8pO3JldHVybiBOKHIsaS5idWZmZXIpfWZ1bmN0aW9uIERBKEEsZSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxlXSkscj1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShyKX1mdW5jdGlvbiBPcihBLGUsdCxyKXtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oQyxJKXtzd2l0Y2goQy50eXBlKXtjYXNlIHUuVGV4dFN0cmVhbTp7bGV0IGE9JGUuZW5jb2RlKEMuZGF0YS5kYXRhKSxjPWgoQSxhLEksMCksQj17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O00oQSxCLEkpO2JyZWFrfWNhc2UgdS5Kc29uQ29tcGF0aWJsZTp7bGV0IGE9JGUuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEMuZGF0YSkpLGM9aChBLGEsSSwwKSxCPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07TShBLEIsSSk7YnJlYWt9Y2FzZSB1LkJpbmFyeVN0cmVhbTp7bGV0IGE9Qy5kYXRhLmRhdGEsYz1oKEEsYSxJLDApLEI9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsQixJKTticmVha31jYXNlIHUuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKEMuZGF0YS5wYXRoLEMuZGF0YS5kYXRhKTticmVha31jYXNlIHUuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoQy5kYXRhLnBhdGgsQy5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgdS5JbWFnZTp7bGV0IGE9Qy5kYXRhLGM9aChBLGEuZGF0YSxJLDApLEI9aChBLGEuZGlyZWN0aW9uLEksMSksRT10eXBlb2YgYS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShhLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sUT17aW1hZ2VUeXBlOmEuaW1hZ2VUeXBlLG5hbWU6YS5uYW1lLG9yaWdpbjphLm9yaWdpbixzcGFjaW5nOmEuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsc2l6ZTphLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxtZXRhZGF0YTpFfTtNKEEsUSxJKTticmVha31jYXNlIHUuTWVzaDp7bGV0IGE9Qy5kYXRhLGM9aChBLGEucG9pbnRzLEksMCksQj1oKEEsYS5jZWxscyxJLDEpLEU9aChBLGEucG9pbnREYXRhLEksMiksUT1oKEEsYS5jZWxsRGF0YSxJLDMpLGY9e21lc2hUeXBlOmEubWVzaFR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsbnVtYmVyT2ZDZWxsczphLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsY2VsbEJ1ZmZlclNpemU6YS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTtNKEEsZixJKTticmVha31jYXNlIHUuUG9pbnRTZXQ6e2xldCBhPUMuZGF0YSxjPWgoQSxhLnBvaW50cyxJLDApLEI9aChBLGEucG9pbnREYXRhLEksMSksRT17cG9pbnRTZXRUeXBlOmEucG9pbnRTZXRUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07TShBLEUsSSk7YnJlYWt9Y2FzZSB1LlBvbHlEYXRhOntsZXQgYT1DLmRhdGEsYz1oKEEsYS5wb2ludHMsSSwwKSxCPWgoQSxhLnZlcnRpY2VzLEksMSksRT1oKEEsYS5saW5lcyxJLDIpLFE9aChBLGEucG9seWdvbnMsSSwzKSxmPWgoQSxhLnRyaWFuZ2xlU3RyaXBzLEksNCksZD1oKEEsYS5wb2ludERhdGEsSSw1KSxGPWgoQSxhLnBvaW50RGF0YSxJLDYpLFU9e3BvbHlEYXRhVHlwZTphLnBvbHlEYXRhVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6YS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbGluZXNCdWZmZXJTaXplOmEubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTphLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6YS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0Z9YH07TShBLFUsSSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG49QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKEMpe3Rocm93IHR5cGVvZiBDPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKEMpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLEN9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShuKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLGc9QS5nZXRNb2R1bGVTdGRlcnIoKSxsPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZvPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKEMsSSl7bGV0IGE9bnVsbDtzd2l0Y2goQy50eXBlKXtjYXNlIHUuVGV4dFN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxRPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO2E9e2RhdGE6QXQuZGVjb2RlKFEpfTticmVha31jYXNlIHUuSnNvbkNvbXBhdGlibGU6e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksUT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTthPUpTT04ucGFyc2UoQXQuZGVjb2RlKFEpKTticmVha31jYXNlIHUuQmluYXJ5U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pO2E9e2RhdGE6dHQoQSxCLEUpfTticmVha31jYXNlIHUuVGV4dEZpbGU6e2E9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKEMuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSB1LkJpbmFyeUZpbGU6e2E9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpMcihBLEMuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSB1LkltYWdlOntsZXQgQj1EQShBLEkpO0IuZGF0YT1EKEEsSSwwLEIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEIuZGlyZWN0aW9uPUQoQSxJLDEsWS5GbG9hdDY0KSxCLm1ldGFkYXRhPW5ldyBNYXAoQi5tZXRhZGF0YSksYT1CO2JyZWFrfWNhc2UgdS5NZXNoOntsZXQgQj1EQShBLEkpO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1EKEEsSSwwLEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1OKEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxzPjA/Qi5jZWxscz1EKEEsSSwxLEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkIuY2VsbHM9TihCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RChBLEksMixCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1OKEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RChBLEksMyxCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9TihCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPUI7YnJlYWt9Y2FzZSB1LlBvaW50U2V0OntsZXQgQj1EQShBLEkpO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1EKEEsSSwwLEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9TihCLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1EKEEsSSwxLEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1OKEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1CO2JyZWFrfWNhc2UgdS5Qb2x5RGF0YTp7bGV0IEI9REEoQSxJKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RChBLEksMCxZLkZsb2F0MzIpOkIucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9CLnZlcnRpY2VzPUQoQSxJLDEsUy5VSW50MzIpOkIudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEIubGluZXNCdWZmZXJTaXplPjA/Qi5saW5lcz1EKEEsSSwyLFMuVUludDMyKTpCLmxpbmVzPW5ldyBVaW50MzJBcnJheSxCLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0IucG9seWdvbnM9RChBLEksMyxTLlVJbnQzMik6Qi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9CLnRyaWFuZ2xlU3RyaXBzPUQoQSxJLDQsUy5VSW50MzIpOkIudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUQoQSxJLDUsQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPU4oQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RChBLEksNixCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPU4oQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9QjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBjPXt0eXBlOkMudHlwZSxkYXRhOmF9O2wucHVzaChjKX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDppLHN0ZGVycjpnLG91dHB1dHM6bH19dmFyIHJ0PU9yO3ZhciBQcj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gVHIoQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8QS5sZW5ndGg7cisrKXtsZXQgbj14cihBW3JdLGUpO24hPT1udWxsJiZ0LnB1c2gobil9cmV0dXJuIHR9ZnVuY3Rpb24geHIoQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSxQciYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT90OnQuc2xpY2UoMCl9dmFyIG50PVRyO2Z1bmN0aW9uIEpyKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBvdD1KcjtmdW5jdGlvbiBIcihBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgaXQ9SHI7ZnVuY3Rpb24gTXIoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIGF0PU1yO3ZhciBZcjtmdW5jdGlvbiBTQSgpe3JldHVybiBZcn12YXIgcXI7ZnVuY3Rpb24gc3QoKXtyZXR1cm4gcXJ9dmFyIEtyO2Z1bmN0aW9uIGtBKCl7cmV0dXJuIEtyfXZhciB0ZT1uZXcgTWFwO2Z1bmN0aW9uIFdyKCl7bGV0IEE9a0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIEl0KCl7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gUkEoKXtsZXQgQT1zdCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIGpyKEEsZSx0KXtsZXQgcj1BLG49QTtpZih0eXBlb2YgQSE9InN0cmluZyImJihyPW5ldyBVUkwoQS5ocmVmKSxuPXIuaHJlZiksdGUuaGFzKG4pKXJldHVybiB0ZS5nZXQobik7e2xldCBvPWF3YWl0IFplKEEsZT8udG9TdHJpbmcoKT8/SXQoKSx0Pz9SQSgpKTtyZXR1cm4gdGUuc2V0KG4sbyksb319YXN5bmMgZnVuY3Rpb24gdnIoQSxlLHQscixuKXtpZighYXdhaXQgWGUoKSl7bGV0IGY9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KGYpLG5ldyBFcnJvcihmKX1sZXQgbz1uPy53ZWJXb3JrZXI/P251bGw7aWYobz09PSExKXtsZXQgZj1hd2FpdCBqcihBLnRvU3RyaW5nKCksbj8ucGlwZWxpbmVCYXNlVXJsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1JBKCkpO3JldHVybiBydChmLGUsdCxyKX1sZXQgaT1vLGc9bj8ucGlwZWxpbmVXb3JrZXJVcmw/P1dyKCksbD10eXBlb2YgZyE9InN0cmluZyImJnR5cGVvZiBnPy5ocmVmPCJ1Ij9nLmhyZWY6Zyx7d29ya2VyUHJveHk6Qyx3b3JrZXI6SX09YXdhaXQgVmUoaSxsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1JBKCkpO2k9STtsZXQgYT1bXTtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oZil7aWYoZi50eXBlPT09dS5CaW5hcnlTdHJlYW0pe2xldCBkPWYuZGF0YS5kYXRhO2EucHVzaChkKX1lbHNlIGlmKGYudHlwZT09PXUuQmluYXJ5RmlsZSl7bGV0IGQ9Zi5kYXRhLmRhdGE7YS5wdXNoKGQpfWVsc2UgaWYoZi50eXBlPT09dS5JbWFnZSl7bGV0IGQ9Zi5kYXRhO2QuZGF0YSE9PW51bGwmJmEucHVzaCguLi5vdChkKSl9ZWxzZSBpZihmLnR5cGU9PT11Lk1lc2gpe2xldCBkPWYuZGF0YTthLnB1c2goLi4uaXQoZCkpfWVsc2UgaWYoZi50eXBlPT09dS5Qb2x5RGF0YSl7bGV0IGQ9Zi5kYXRhO2EucHVzaCguLi5hdChkKSl9fSk7bGV0IGM9bj8ucGlwZWxpbmVCYXNlVXJsPz9JdCgpLEI9dHlwZW9mIGMhPSJzdHJpbmciJiZ0eXBlb2YgYz8uaHJlZjwidSI/Yy5ocmVmOmMsRT1yIT1udWxsP0xBKHIsbnQoYSxuPy5ub0NvcHkpKTpudWxsLFE9YXdhaXQgQy5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCksQixlLHQsRSxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9SQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6US5yZXR1cm5WYWx1ZSxzdGRvdXQ6US5zdGRvdXQsc3RkZXJyOlEuc3RkZXJyLG91dHB1dHM6US5vdXRwdXRzLHdlYldvcmtlcjppfX12YXIgYj12cjt2YXIgX3I9bnVsbDtmdW5jdGlvbiBndCgpe3JldHVybiBfcn12YXIgcmUsenI9YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGl0ay13YXNtL2Rvd25zYW1wbGVAJHtiQX0vZGlzdC9waXBlbGluZXNgO2Z1bmN0aW9uIHRzKEEpe3JlPUF9ZnVuY3Rpb24gTCgpe2lmKHR5cGVvZiByZTwidSIpcmV0dXJuIHJlO2xldCBBPVNBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOnpyfXZhciBuZSxWcj1udWxsO2Z1bmN0aW9uIEJ0KEEpe25lPUF9ZnVuY3Rpb24gUigpe2lmKHR5cGVvZiBuZTwidSIpcmV0dXJuIG5lO2xldCBBPWtBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOlZyfXZhciBWPW51bGw7YXN5bmMgZnVuY3Rpb24gQ3QoKXtsZXQgQT1SKCksZT10eXBlb2YgQSE9InN0cmluZyImJnR5cGVvZiBBPy5ocmVmPCJ1Ij9BLmhyZWY6QTtWPWF3YWl0IGlBKGUpfWZ1bmN0aW9uIElzKEEpe1Y9QX1hc3luYyBmdW5jdGlvbiBPKCl7aWYoViE9PW51bGwpcmV0dXJuIFYudGVybWluYXRlZCYmYXdhaXQgQ3QoKSxWO2xldCBBPWd0KCk7cmV0dXJuIEEhPT1udWxsP0E6KGF3YWl0IEN0KCksVil9YXN5bmMgZnVuY3Rpb24gWnIoQSxlPXtzaHJpbmtGYWN0b3JzOlsyLDJdfSl7bGV0IHQ9W3t0eXBlOnUuSW1hZ2V9XSxyPVt7dHlwZTp1LkltYWdlLGRhdGE6QX1dLG49W107aWYobi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUuc2hyaW5rRmFjdG9ycyl7aWYoZS5zaHJpbmtGYWN0b3JzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignInNocmluay1mYWN0b3JzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1zaHJpbmstZmFjdG9ycyIpLGF3YWl0IFByb21pc2UuYWxsKGUuc2hyaW5rRmFjdG9ycy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmbi5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgZz0iZG93bnNhbXBsZS1iaW4tc2hyaW5rIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBPKCkpO2xldHt3ZWJXb3JrZXI6QyxyZXR1cm5WYWx1ZTpJLHN0ZGVycjphLG91dHB1dHM6Y309YXdhaXQgYihnLG4sdCxyLHtwaXBlbGluZUJhc2VVcmw6TCgpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoSSE9PTAmJmEhPT0iIil0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpDLGRvd25zYW1wbGVkOmNbMF0/LmRhdGF9fXZhciBYcj1acjthc3luYyBmdW5jdGlvbiAkcihBLGU9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgdD1be3R5cGU6dS5JbWFnZX1dLHI9W3t0eXBlOnUuSW1hZ2UsZGF0YTpBfV0sbj1bXTtpZihuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5zaHJpbmtGYWN0b3JzKXtpZihlLnNocmlua0ZhY3RvcnMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCcic2hyaW5rLWZhY3RvcnMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLXNocmluay1mYWN0b3JzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5zaHJpbmtGYWN0b3JzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9aWYoZS5jcm9wUmFkaXVzKXtpZihlLmNyb3BSYWRpdXMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCciY3JvcC1yYWRpdXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLWNyb3AtcmFkaXVzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5jcm9wUmFkaXVzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9bGV0IGc9ImRvd25zYW1wbGUtbGFiZWwtaW1hZ2UiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IE8oKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOkksc3RkZXJyOmEsb3V0cHV0czpjfT1hd2FpdCBiKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpMKCkscGlwZWxpbmVXb3JrZXJVcmw6UigpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihJIT09MCYmYSE9PSIiKXRocm93IG5ldyBFcnJvcihhKTtyZXR1cm57d2ViV29ya2VyOkMsZG93bnNhbXBsZWQ6Y1swXT8uZGF0YX19dmFyIEFuPSRyO2FzeW5jIGZ1bmN0aW9uIGVuKEE9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgZT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX1dLHQ9W10scj1bXTtpZihyLnB1c2goIjAiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdHlwZW9mIEEuc2hyaW5rRmFjdG9yczwidSIpe2lmKEEuc2hyaW5rRmFjdG9ycy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzaHJpbmstZmFjdG9ycyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtyLnB1c2goIi0tc2hyaW5rLWZhY3RvcnMiKSxhd2FpdCBQcm9taXNlLmFsbChBLnNocmlua0ZhY3RvcnMubWFwKGFzeW5jIGM9PntyLnB1c2goYy50b1N0cmluZygpKX0pKX1sZXQgbz0iZG93bnNhbXBsZS1zaWdtYSIsaT1BPy53ZWJXb3JrZXI7aT09PXZvaWQgMCYmKGk9YXdhaXQgTygpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6bCxzdGRlcnI6QyxvdXRwdXRzOkl9PWF3YWl0IGIobyxyLGUsdCx7cGlwZWxpbmVCYXNlVXJsOkwoKSxwaXBlbGluZVdvcmtlclVybDpSKCksd2ViV29ya2VyOmksbm9Db3B5OkE/Lm5vQ29weX0pO2lmKGwhPT0wJiZDIT09IiIpdGhyb3cgbmV3IEVycm9yKEMpO3JldHVybnt3ZWJXb3JrZXI6ZyxzaWdtYTpJWzBdPy5kYXRhfX12YXIgdG49ZW47YXN5bmMgZnVuY3Rpb24gcm4oQSxlPXtzaHJpbmtGYWN0b3JzOlsyLDJdfSl7bGV0IHQ9W3t0eXBlOnUuSW1hZ2V9XSxyPVt7dHlwZTp1LkltYWdlLGRhdGE6QX1dLG49W107aWYobi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUuc2hyaW5rRmFjdG9ycyl7aWYoZS5zaHJpbmtGYWN0b3JzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignInNocmluay1mYWN0b3JzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1zaHJpbmstZmFjdG9ycyIpLGF3YWl0IFByb21pc2UuYWxsKGUuc2hyaW5rRmFjdG9ycy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWlmKGUuY3JvcFJhZGl1cyl7aWYoZS5jcm9wUmFkaXVzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignImNyb3AtcmFkaXVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1jcm9wLXJhZGl1cyIpLGF3YWl0IFByb21pc2UuYWxsKGUuY3JvcFJhZGl1cy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWxldCBnPSJkb3duc2FtcGxlIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBPKCkpO2xldHt3ZWJXb3JrZXI6QyxyZXR1cm5WYWx1ZTpJLHN0ZGVycjphLG91dHB1dHM6Y309YXdhaXQgYihnLG4sdCxyLHtwaXBlbGluZUJhc2VVcmw6TCgpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoSSE9PTAmJmEhPT0iIil0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpDLGRvd25zYW1wbGVkOmNbMF0/LmRhdGF9fXZhciBubj1ybjthc3luYyBmdW5jdGlvbiBvbihBPXtzaXplOlsxLDFdLHNpZ21hOlsxLDFdfSl7bGV0IGU9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9XSx0PVtdLHI9W107aWYoci5wdXNoKCIwIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLHR5cGVvZiBBLnNpemU8InUiKXtpZihBLnNpemUubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcic2l6ZSIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtyLnB1c2goIi0tc2l6ZSIpLGF3YWl0IFByb21pc2UuYWxsKEEuc2l6ZS5tYXAoYXN5bmMgYz0+e3IucHVzaChjLnRvU3RyaW5nKCkpfSkpfWlmKHR5cGVvZiBBLnNpZ21hPCJ1Iil7aWYoQS5zaWdtYS5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzaWdtYSIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtyLnB1c2goIi0tc2lnbWEiKSxhd2FpdCBQcm9taXNlLmFsbChBLnNpZ21hLm1hcChhc3luYyBjPT57ci5wdXNoKGMudG9TdHJpbmcoKSl9KSl9dHlwZW9mIEEubWF4S2VybmVsV2lkdGg8InUiJiZyLnB1c2goIi0tbWF4LWtlcm5lbC13aWR0aCIsQS5tYXhLZXJuZWxXaWR0aC50b1N0cmluZygpKSx0eXBlb2YgQS5tYXhLZXJuZWxFcnJvcjwidSImJnIucHVzaCgiLS1tYXgta2VybmVsLWVycm9yIixBLm1heEtlcm5lbEVycm9yLnRvU3RyaW5nKCkpO2xldCBvPSJnYXVzc2lhbi1rZXJuZWwtcmFkaXVzIixpPUE/LndlYldvcmtlcjtpPT09dm9pZCAwJiYoaT1hd2FpdCBPKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTpsLHN0ZGVycjpDLG91dHB1dHM6SX09YXdhaXQgYihvLHIsZSx0LHtwaXBlbGluZUJhc2VVcmw6TCgpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6aSxub0NvcHk6QT8ubm9Db3B5fSk7aWYobCE9PTAmJkMhPT0iIil0aHJvdyBuZXcgRXJyb3IoQyk7cmV0dXJue3dlYldvcmtlcjpnLHJhZGl1czpJWzBdPy5kYXRhfX12YXIgYW49b247dmFyIGx0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciBJST1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGVJPShBLHQpPT57Zm9yKHZhciBJIGluIHQpSUkoQSxJLHtnZXQ6dFtJXSxlbnVtZXJhYmxlOiEwfSl9O3ZhciB2QT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxnST1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxyST1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IikscEE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGVBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSwkQT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixvST17Y2FuSGFuZGxlOkE9PiRBKEEpJiZBW3ZBXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOnQscG9ydDI6SX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBpQShBLHQpLFtJLFtJXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksbkkoQSl9fSxpST17Y2FuSGFuZGxlOkE9PiRBKEEpJiZlQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCB0O3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/dD17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OnQ9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW3QsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sQXQ9bmV3IE1hcChbWyJwcm94eSIsb0ldLFsidGhyb3ciLGlJXV0pO2Z1bmN0aW9uIENJKEEsdCl7Zm9yKGxldCBJIG9mIEEpaWYodD09PUl8fEk9PT0iKiJ8fEkgaW5zdGFuY2VvZiBSZWdFeHAmJkkudGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpQShBLHQ9Z2xvYmFsVGhpcyxJPVsiKiJdKXt0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGUoZyl7aWYoIWd8fCFnLmRhdGEpcmV0dXJuO2lmKCFDSShJLGcub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7Zy5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOnIsdHlwZTpvLHBhdGg6bn09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sZy5kYXRhKSxhPShnLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKGIpLFE7dHJ5e2xldCBCPW4uc2xpY2UoMCwtMSkucmVkdWNlKChmLHMpPT5mW3NdLEEpLGk9bi5yZWR1Y2UoKGYscyk9PmZbc10sQSk7c3dpdGNoKG8pe2Nhc2UiR0VUIjpRPWk7YnJlYWs7Y2FzZSJTRVQiOkJbbi5zbGljZSgtMSlbMF1dPWIoZy5kYXRhLnZhbHVlKSxRPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOlE9aS5hcHBseShCLGEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IGkoLi4uYSk7UT1hSShmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6c309bmV3IE1lc3NhZ2VDaGFubmVsO2lBKEEscyksUT1GQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpRPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goQil7UT17dmFsdWU6QixbZUFdOjB9fVByb21pc2UucmVzb2x2ZShRKS5jYXRjaChCPT4oe3ZhbHVlOkIsW2VBXTowfSkpLnRoZW4oQj0+e2xldFtpLGZdPW9BKEIpO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZiksbz09PSJSRUxFQVNFIiYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZSksdHQodCkscEEgaW4gQSYmdHlwZW9mIEFbcEFdPT0iZnVuY3Rpb24iJiZBW3BBXSgpKX0pLmNhdGNoKEI9PntsZXRbaSxmXT1vQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2VBXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse2lkOnJ9KSxmKX0pfSksdC5zdGFydCYmdC5zdGFydCgpfWZ1bmN0aW9uIEJJKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIHR0KEEpe0JJKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gbkkoQSx0KXtyZXR1cm4gU0EoQSxbXSx0KX1mdW5jdGlvbiBJQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gSXQoQSl7cmV0dXJuIHEoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57dHQoQSl9KX12YXIgZ0E9bmV3IFdlYWtNYXAsckE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IHQ9KGdBLmdldChBKXx8MCktMTtnQS5zZXQoQSx0KSx0PT09MCYmSXQoQSl9KTtmdW5jdGlvbiBzSShBLHQpe2xldCBJPShnQS5nZXQodCl8fDApKzE7Z0Euc2V0KHQsSSksckEmJnJBLnJlZ2lzdGVyKEEsdCxBKX1mdW5jdGlvbiBRSShBKXtyQSYmckEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBTQShBLHQ9W10sST1mdW5jdGlvbigpe30pe2xldCBlPSExLGc9bmV3IFByb3h5KEkse2dldChyLG8pe2lmKElBKGUpLG89PT1ySSlyZXR1cm4oKT0+e1FJKGcpLEl0KEEpLGU9ITB9O2lmKG89PT0idGhlbiIpe2lmKHQubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+Z307bGV0IG49cShBLHt0eXBlOiJHRVQiLHBhdGg6dC5tYXAoYT0+YS50b1N0cmluZygpKX0pLnRoZW4oYik7cmV0dXJuIG4udGhlbi5iaW5kKG4pfXJldHVybiBTQShBLFsuLi50LG9dKX0sc2V0KHIsbyxuKXtJQShlKTtsZXRbYSxRXT1vQShuKTtyZXR1cm4gcShBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnQsb10ubWFwKEI9PkIudG9TdHJpbmcoKSksdmFsdWU6YX0sUSkudGhlbihiKX0sYXBwbHkocixvLG4pe0lBKGUpO2xldCBhPXRbdC5sZW5ndGgtMV07aWYoYT09PWdJKXJldHVybiBxKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oYik7aWYoYT09PSJiaW5kIilyZXR1cm4gU0EoQSx0LnNsaWNlKDAsLTEpKTtsZXRbUSxCXT1fQShuKTtyZXR1cm4gcShBLHt0eXBlOiJBUFBMWSIscGF0aDp0Lm1hcChpPT5pLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpRfSxCKS50aGVuKGIpfSxjb25zdHJ1Y3QocixvKXtJQShlKTtsZXRbbixhXT1fQShvKTtyZXR1cm4gcShBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6dC5tYXAoUT0+US50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6bn0sYSkudGhlbihiKX19KTtyZXR1cm4gc0koZyxBKSxnfWZ1bmN0aW9uIEVJKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIF9BKEEpe2xldCB0PUEubWFwKG9BKTtyZXR1cm5bdC5tYXAoST0+SVswXSksRUkodC5tYXAoST0+SVsxXSkpXX12YXIgZXQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRkEoQSx0KXtyZXR1cm4gZXQuc2V0KEEsdCksQX1mdW5jdGlvbiBhSShBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbdkFdOiEwfSl9ZnVuY3Rpb24gb0EoQSl7Zm9yKGxldFt0LEldb2YgQXQpaWYoSS5jYW5IYW5kbGUoQSkpe2xldFtlLGddPUkuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTp0LHZhbHVlOmV9LGddfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxldC5nZXQoQSl8fFtdXX1mdW5jdGlvbiBiKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEF0LmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gcShBLHQsSSl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntsZXQgZz1jSSgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihvKXshby5kYXRhfHwhby5kYXRhLmlkfHxvLmRhdGEuaWQhPT1nfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxlKG8uZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6Z30sdCksSSl9KX1mdW5jdGlvbiBjSSgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gVyhBLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOmZJfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpVQX09T2JqZWN0LEJBPShBPT50PT57bGV0IEk9ZkkuY2FsbCh0KTtyZXR1cm4gQVtJXXx8KEFbSV09SS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLFU9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLHQ9PkJBKHQpPT09QSksbkE9QT0+dD0+dHlwZW9mIHQ9PT1BLHtpc0FycmF5Okt9PUFycmF5LFo9bkEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGxJKEEpe3JldHVybiBBIT09bnVsbCYmIVooQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWihBLmNvbnN0cnVjdG9yKSYmRihBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgaXQ9VSgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBESShBKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOnQ9QSYmQS5idWZmZXImJml0KEEuYnVmZmVyKSx0fXZhciB1ST1uQSgic3RyaW5nIiksRj1uQSgiZnVuY3Rpb24iKSxDdD1uQSgibnVtYmVyIiksc0E9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixoST1BPT5BPT09ITB8fEE9PT0hMSxDQT1BPT57aWYoQkEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1VQShBKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxkST1VKCJEYXRlIikseUk9VSgiRmlsZSIpLHdJPVUoIkJsb2IiKSxtST1VKCJGaWxlTGlzdCIpLHBJPUE9PnNBKEEpJiZGKEEucGlwZSksU0k9QT0+e2xldCB0O3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fEYoQS5hcHBlbmQpJiYoKHQ9QkEoQSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZGKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LEZJPVUoIlVSTFNlYXJjaFBhcmFtcyIpLFJJPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBWKEEsdCx7YWxsT3duS2V5czpJPSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IGUsZztpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSksSyhBKSlmb3IoZT0wLGc9QS5sZW5ndGg7ZTxnO2UrKyl0LmNhbGwobnVsbCxBW2VdLGUsQSk7ZWxzZXtsZXQgcj1JP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG89ci5sZW5ndGgsbjtmb3IoZT0wO2U8bztlKyspbj1yW2VdLHQuY2FsbChudWxsLEFbbl0sbixBKX19ZnVuY3Rpb24gQnQoQSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgST1PYmplY3Qua2V5cyhBKSxlPUkubGVuZ3RoLGc7Zm9yKDtlLS0gPjA7KWlmKGc9SVtlXSx0PT09Zy50b0xvd2VyQ2FzZSgpKXJldHVybiBnO3JldHVybiBudWxsfXZhciBudD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLHN0PUE9PiFaKEEpJiZBIT09bnQ7ZnVuY3Rpb24gTkEoKXtsZXR7Y2FzZWxlc3M6QX09c3QodGhpcykmJnRoaXN8fHt9LHQ9e30sST0oZSxnKT0+e2xldCByPUEmJkJ0KHQsZyl8fGc7Q0EodFtyXSkmJkNBKGUpP3Rbcl09TkEodFtyXSxlKTpDQShlKT90W3JdPU5BKHt9LGUpOksoZSk/dFtyXT1lLnNsaWNlKCk6dFtyXT1lfTtmb3IobGV0IGU9MCxnPWFyZ3VtZW50cy5sZW5ndGg7ZTxnO2UrKylhcmd1bWVudHNbZV0mJlYoYXJndW1lbnRzW2VdLEkpO3JldHVybiB0fXZhciBOST0oQSx0LEkse2FsbE93bktleXM6ZX09e30pPT4oVih0LChnLHIpPT57SSYmRihnKT9BW3JdPVcoZyxJKTpBW3JdPWd9LHthbGxPd25LZXlzOmV9KSxBKSxVST1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLEdJPShBLHQsSSxlKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsZSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTp0LnByb3RvdHlwZX0pLEkmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsSSl9LGtJPShBLHQsSSxlKT0+e2xldCBnLHIsbyxuPXt9O2lmKHQ9dHx8e30sQT09bnVsbClyZXR1cm4gdDtkb3tmb3IoZz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxyPWcubGVuZ3RoO3ItLSA+MDspbz1nW3JdLCghZXx8ZShvLEEsdCkpJiYhbltvXSYmKHRbb109QVtvXSxuW29dPSEwKTtBPUkhPT0hMSYmVUEoQSl9d2hpbGUoQSYmKCFJfHxJKEEsdCkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LExJPShBLHQsSSk9PntBPVN0cmluZyhBKSwoST09PXZvaWQgMHx8ST5BLmxlbmd0aCkmJihJPUEubGVuZ3RoKSxJLT10Lmxlbmd0aDtsZXQgZT1BLmluZGV4T2YodCxJKTtyZXR1cm4gZSE9PS0xJiZlPT09SX0sSkk9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKEsoQSkpcmV0dXJuIEE7bGV0IHQ9QS5sZW5ndGg7aWYoIUN0KHQpKXJldHVybiBudWxsO2xldCBJPW5ldyBBcnJheSh0KTtmb3IoO3QtLSA+MDspSVt0XT1BW3RdO3JldHVybiBJfSxIST0oQT0+dD0+QSYmdCBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmVUEoVWludDhBcnJheSkpLFlJPShBLHQpPT57bGV0IGU9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxnO2Zvcig7KGc9ZS5uZXh0KCkpJiYhZy5kb25lOyl7bGV0IHI9Zy52YWx1ZTt0LmNhbGwoQSxyWzBdLHJbMV0pfX0sYkk9KEEsdCk9PntsZXQgSSxlPVtdO2Zvcig7KEk9QS5leGVjKHQpKSE9PW51bGw7KWUucHVzaChJKTtyZXR1cm4gZX0sTUk9VSgiSFRNTEZvcm1FbGVtZW50IikscUk9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24oSSxlLGcpe3JldHVybiBlLnRvVXBwZXJDYXNlKCkrZ30pLHJ0PSgoe2hhc093blByb3BlcnR5OkF9KT0+KHQsSSk9PkEuY2FsbCh0LEkpKShPYmplY3QucHJvdG90eXBlKSxLST1VKCJSZWdFeHAiKSxRdD0oQSx0KT0+e2xldCBJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLGU9e307VihJLChnLHIpPT57bGV0IG87KG89dChnLHIsQSkpIT09ITEmJihlW3JdPW98fGcpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxlKX0sT0k9QT0+e1F0KEEsKHQsSSk9PntpZihGKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoSSkhPT0tMSlyZXR1cm4hMTtsZXQgZT1BW0ldO2lmKEYoZSkpe2lmKHQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdCl7dC53cml0YWJsZT0hMTtyZXR1cm59dC5zZXR8fCh0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrSSsiXCciKX0pfX0pfSxUST0oQSx0KT0+e2xldCBJPXt9LGU9Zz0+e2cuZm9yRWFjaChyPT57SVtyXT0hMH0pfTtyZXR1cm4gSyhBKT9lKEEpOmUoU3RyaW5nKEEpLnNwbGl0KHQpKSxJfSxQST0oKT0+e30seEk9KEEsdCk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOnQpLFJBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsb3Q9IjAxMjM0NTY3ODkiLEV0PXtESUdJVDpvdCxBTFBIQTpSQSxBTFBIQV9ESUdJVDpSQStSQS50b1VwcGVyQ2FzZSgpK290fSxqST0oQT0xNix0PUV0LkFMUEhBX0RJR0lUKT0+e2xldCBJPSIiLHtsZW5ndGg6ZX09dDtmb3IoO0EtLTspSSs9dFtNYXRoLnJhbmRvbSgpKmV8MF07cmV0dXJuIEl9O2Z1bmN0aW9uIFdJKEEpe3JldHVybiEhKEEmJkYoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBaST1BPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxJPShlLGcpPT57aWYoc0EoZSkpe2lmKHQuaW5kZXhPZihlKT49MClyZXR1cm47aWYoISgidG9KU09OImluIGUpKXt0W2ddPWU7bGV0IHI9SyhlKT9bXTp7fTtyZXR1cm4gVihlLChvLG4pPT57bGV0IGE9SShvLGcrMSk7IVooYSkmJihyW25dPWEpfSksdFtnXT12b2lkIDAscn19cmV0dXJuIGV9O3JldHVybiBJKEEsMCl9LFZJPVUoIkFzeW5jRnVuY3Rpb24iKSxYST1BPT5BJiYoc0EoQSl8fEYoQSkpJiZGKEEudGhlbikmJkYoQS5jYXRjaCksQz17aXNBcnJheTpLLGlzQXJyYXlCdWZmZXI6aXQsaXNCdWZmZXI6bEksaXNGb3JtRGF0YTpTSSxpc0FycmF5QnVmZmVyVmlldzpESSxpc1N0cmluZzp1SSxpc051bWJlcjpDdCxpc0Jvb2xlYW46aEksaXNPYmplY3Q6c0EsaXNQbGFpbk9iamVjdDpDQSxpc1VuZGVmaW5lZDpaLGlzRGF0ZTpkSSxpc0ZpbGU6eUksaXNCbG9iOndJLGlzUmVnRXhwOktJLGlzRnVuY3Rpb246Rixpc1N0cmVhbTpwSSxpc1VSTFNlYXJjaFBhcmFtczpGSSxpc1R5cGVkQXJyYXk6SEksaXNGaWxlTGlzdDptSSxmb3JFYWNoOlYsbWVyZ2U6TkEsZXh0ZW5kOk5JLHRyaW06Ukksc3RyaXBCT006VUksaW5oZXJpdHM6R0ksdG9GbGF0T2JqZWN0OmtJLGtpbmRPZjpCQSxraW5kT2ZUZXN0OlUsZW5kc1dpdGg6TEksdG9BcnJheTpKSSxmb3JFYWNoRW50cnk6WUksbWF0Y2hBbGw6YkksaXNIVE1MRm9ybTpNSSxoYXNPd25Qcm9wZXJ0eTpydCxoYXNPd25Qcm9wOnJ0LHJlZHVjZURlc2NyaXB0b3JzOlF0LGZyZWV6ZU1ldGhvZHM6T0ksdG9PYmplY3RTZXQ6VEksdG9DYW1lbENhc2U6cUksbm9vcDpQSSx0b0Zpbml0ZU51bWJlcjp4SSxmaW5kS2V5OkJ0LGdsb2JhbDpudCxpc0NvbnRleHREZWZpbmVkOnN0LEFMUEhBQkVUOkV0LGdlbmVyYXRlU3RyaW5nOmpJLGlzU3BlY0NvbXBsaWFudEZvcm06V0ksdG9KU09OT2JqZWN0OlpJLGlzQXN5bmNGbjpWSSxpc1RoZW5hYmxlOlhJfTtmdW5jdGlvbiBPKEEsdCxJLGUsZyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIix0JiYodGhpcy5jb2RlPXQpLEkmJih0aGlzLmNvbmZpZz1JKSxlJiYodGhpcy5yZXF1ZXN0PWUpLGcmJih0aGlzLnJlc3BvbnNlPWcpfUMuaW5oZXJpdHMoTyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGF0PU8ucHJvdG90eXBlLGN0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e2N0W0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sY3QpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtPLmZyb209KEEsdCxJLGUsZyxyKT0+e2xldCBvPU9iamVjdC5jcmVhdGUoYXQpO3JldHVybiBDLnRvRmxhdE9iamVjdChBLG8sZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1FcnJvci5wcm90b3R5cGV9LG49Pm4hPT0iaXNBeGlvc0Vycm9yIiksTy5jYWxsKG8sQS5tZXNzYWdlLHQsSSxlLGcpLG8uY2F1c2U9QSxvLm5hbWU9QS5uYW1lLHImJk9iamVjdC5hc3NpZ24obyxyKSxvfTt2YXIgbD1PO3ZhciBRQT1udWxsO2Z1bmN0aW9uIEdBKEEpe3JldHVybiBDLmlzUGxhaW5PYmplY3QoQSl8fEMuaXNBcnJheShBKX1mdW5jdGlvbiBsdChBKXtyZXR1cm4gQy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBmdChBLHQsSSl7cmV0dXJuIEE/QS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKGcscil7cmV0dXJuIGc9bHQoZyksIUkmJnI/IlsiK2crIl0iOmd9KS5qb2luKEk/Ii4iOiIiKTp0fWZ1bmN0aW9uIHpJKEEpe3JldHVybiBDLmlzQXJyYXkoQSkmJiFBLnNvbWUoR0EpfXZhciBfST1DLnRvRmxhdE9iamVjdChDLHt9LG51bGwsZnVuY3Rpb24odCl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KHQpfSk7ZnVuY3Rpb24gdkkoQSx0LEkpe2lmKCFDLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9dHx8bmV3KFFBfHxGb3JtRGF0YSksST1DLnRvRmxhdE9iamVjdChJLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyx1KXtyZXR1cm4hQy5pc1VuZGVmaW5lZCh1W2NdKX0pO2xldCBlPUkubWV0YVRva2VucyxnPUkudmlzaXRvcnx8QixyPUkuZG90cyxvPUkuaW5kZXhlcyxhPShJLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkMuaXNTcGVjQ29tcGxpYW50Rm9ybSh0KTtpZighQy5pc0Z1bmN0aW9uKGcpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gUShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihDLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFhJiZDLmlzQmxvYihFKSl0aHJvdyBuZXcgbCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gQy5pc0FycmF5QnVmZmVyKEUpfHxDLmlzVHlwZWRBcnJheShFKT9hJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gQihFLGMsdSl7bGV0IHk9RTtpZihFJiYhdSYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihDLmVuZHNXaXRoKGMsInt9IikpYz1lP2M6Yy5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoQy5pc0FycmF5KEUpJiZ6SShFKXx8KEMuaXNGaWxlTGlzdChFKXx8Qy5lbmRzV2l0aChjLCJbXSIpKSYmKHk9Qy50b0FycmF5KEUpKSlyZXR1cm4gYz1sdChjKSx5LmZvckVhY2goZnVuY3Rpb24oTix0SSl7IShDLmlzVW5kZWZpbmVkKE4pfHxOPT09bnVsbCkmJnQuYXBwZW5kKG89PT0hMD9mdChbY10sdEkscik6bz09PW51bGw/YzpjKyJbXSIsUShOKSl9KSwhMX1yZXR1cm4gR0EoRSk/ITA6KHQuYXBwZW5kKGZ0KHUsYyxyKSxRKEUpKSwhMSl9bGV0IGk9W10sZj1PYmplY3QuYXNzaWduKF9JLHtkZWZhdWx0VmlzaXRvcjpCLGNvbnZlcnRWYWx1ZTpRLGlzVmlzaXRhYmxlOkdBfSk7ZnVuY3Rpb24gcyhFLGMpe2lmKCFDLmlzVW5kZWZpbmVkKEUpKXtpZihpLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO2kucHVzaChFKSxDLmZvckVhY2goRSxmdW5jdGlvbih5LFIpeyghKEMuaXNVbmRlZmluZWQoeSl8fHk9PT1udWxsKSYmZy5jYWxsKHQseSxDLmlzU3RyaW5nKFIpP1IudHJpbSgpOlIsYyxmKSk9PT0hMCYmcyh5LGM/Yy5jb25jYXQoUik6W1JdKX0pLGkucG9wKCl9fWlmKCFDLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gcyhBKSx0fXZhciBKPXZJO2Z1bmN0aW9uIER0KEEpe2xldCB0PXsiISI6IiUyNTIxIiwiXCciOiIlMjUyNyIsIigiOiIlMjUyOCIsIikiOiIlMjUyOSIsIn4iOiIlMjU3RSIsIiUyNTIwIjoiKyIsIiUyNTAwIjoiXFwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIVwnKCl+XXwlMjUyMHwlMjUwMC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gdXQoQSx0KXt0aGlzLl9wYWlycz1bXSxBJiZKKEEsdGhpcyx0KX12YXIgaHQ9dXQucHJvdG90eXBlO2h0LmFwcGVuZD1mdW5jdGlvbih0LEkpe3RoaXMuX3BhaXJzLnB1c2goW3QsSV0pfTtodC50b1N0cmluZz1mdW5jdGlvbih0KXtsZXQgST10P2Z1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcyxlLER0KX06RHQ7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihnKXtyZXR1cm4gSShnWzBdKSsiPSIrSShnWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIEVBPXV0O2Z1bmN0aW9uICRJKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTI1M0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjUyNC9nLCIkIikucmVwbGFjZSgvJTI1MkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjUyMC9nLCIrIikucmVwbGFjZSgvJTI1NUIvZ2ksIlsiKS5yZXBsYWNlKC8lMjU1RC9naSwiXSIpfWZ1bmN0aW9uIFgoQSx0LEkpe2lmKCF0KXJldHVybiBBO2xldCBlPUkmJkkuZW5jb2RlfHwkSSxnPUkmJkkuc2VyaWFsaXplLHI7aWYoZz9yPWcodCxJKTpyPUMuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyBFQSh0LEkpLnRvU3RyaW5nKGUpLHIpe2xldCBvPUEuaW5kZXhPZigiJTIzIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK3J9cmV0dXJuIEF9dmFyIGtBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UodCxJLGUpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDp0LHJlamVjdGVkOkksc3luY2hyb25vdXM6ZT9lLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ZT9lLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QodCl7dGhpcy5oYW5kbGVyc1t0XSYmKHRoaXMuaGFuZGxlcnNbdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh0KXtDLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihlKXtlIT09bnVsbCYmdChlKX0pfX0sTEE9a0E7dmFyIGFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgZHQ9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOkVBO3ZhciB5dD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIHd0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIG10PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOmR0LEZvcm1EYXRhOnl0LEJsb2I6d3R9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgSkE9e307ZUkoSkEse2hhc0Jyb3dzZXJFbnY6KCk9PnB0LGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+QWUsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT50ZX0pO3ZhciBwdD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixBZT0oQT0+cHQmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSx0ZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHc9ey4uLkpBLC4uLm10fTtmdW5jdGlvbiBIQShBLHQpe3JldHVybiBKKEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihJLGUsZyxyKXtyZXR1cm4gdy5pc05vZGUmJkMuaXNCdWZmZXIoSSk/KHRoaXMuYXBwZW5kKGUsSS50b1N0cmluZygiYmFzZTY0IikpLCExKTpyLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHQpKX1mdW5jdGlvbiBJZShBKXtyZXR1cm4gQy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csQSkubWFwKHQ9PnRbMF09PT0iW10iPyIiOnRbMV18fHRbMF0pfWZ1bmN0aW9uIGVlKEEpe2xldCB0PXt9LEk9T2JqZWN0LmtleXMoQSksZSxnPUkubGVuZ3RoLHI7Zm9yKGU9MDtlPGc7ZSsrKXI9SVtlXSx0W3JdPUFbcl07cmV0dXJuIHR9ZnVuY3Rpb24gZ2UoQSl7ZnVuY3Rpb24gdChJLGUsZyxyKXtsZXQgbz1JW3IrK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBuPU51bWJlci5pc0Zpbml0ZSgrbyksYT1yPj1JLmxlbmd0aDtyZXR1cm4gbz0hbyYmQy5pc0FycmF5KGcpP2cubGVuZ3RoOm8sYT8oQy5oYXNPd25Qcm9wKGcsbyk/Z1tvXT1bZ1tvXSxlXTpnW29dPWUsIW4pOigoIWdbb118fCFDLmlzT2JqZWN0KGdbb10pKSYmKGdbb109W10pLHQoSSxlLGdbb10scikmJkMuaXNBcnJheShnW29dKSYmKGdbb109ZWUoZ1tvXSkpLCFuKX1pZihDLmlzRm9ybURhdGEoQSkmJkMuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgST17fTtyZXR1cm4gQy5mb3JFYWNoRW50cnkoQSwoZSxnKT0+e3QoSWUoZSksZyxJLDApfSksSX1yZXR1cm4gbnVsbH12YXIgY0E9Z2U7ZnVuY3Rpb24gcmUoQSx0LEkpe2lmKEMuaXNTdHJpbmcoQSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShBKSxDLnRyaW0oQSl9Y2F0Y2goZSl7aWYoZS5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBlfXJldHVybihJfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIFlBPXt0cmFuc2l0aW9uYWw6YUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbih0LEkpe2xldCBlPUkuZ2V0Q29udGVudFR5cGUoKXx8IiIsZz1lLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxyPUMuaXNPYmplY3QodCk7aWYociYmQy5pc0hUTUxGb3JtKHQpJiYodD1uZXcgRm9ybURhdGEodCkpLEMuaXNGb3JtRGF0YSh0KSlyZXR1cm4gZz9KU09OLnN0cmluZ2lmeShjQSh0KSk6dDtpZihDLmlzQXJyYXlCdWZmZXIodCl8fEMuaXNCdWZmZXIodCl8fEMuaXNTdHJlYW0odCl8fEMuaXNGaWxlKHQpfHxDLmlzQmxvYih0KSlyZXR1cm4gdDtpZihDLmlzQXJyYXlCdWZmZXJWaWV3KHQpKXJldHVybiB0LmJ1ZmZlcjtpZihDLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLHQudG9TdHJpbmcoKTtsZXQgbjtpZihyKXtpZihlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBIQSh0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKG49Qy5pc0ZpbGVMaXN0KHQpKXx8ZS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBhPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gSihuP3siZmlsZXNbXSI6dH06dCxhJiZuZXcgYSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIHJ8fGc/KEkuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxyZSh0KSk6dH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbih0KXtsZXQgST10aGlzLnRyYW5zaXRpb25hbHx8WUEudHJhbnNpdGlvbmFsLGU9SSYmSS5mb3JjZWRKU09OUGFyc2luZyxnPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKHQmJkMuaXNTdHJpbmcodCkmJihlJiYhdGhpcy5yZXNwb25zZVR5cGV8fGcpKXtsZXQgbz0hKEkmJkkuc2lsZW50SlNPTlBhcnNpbmcpJiZnO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChuKXtpZihvKXRocm93IG4ubmFtZT09PSJTeW50YXhFcnJvciI/bC5mcm9tKG4sbC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpufX1yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Qy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntZQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFQ9WUE7dmFyIG9lPUMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksU3Q9QT0+e2xldCB0PXt9LEksZSxnO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2c9by5pbmRleE9mKCI6IiksST1vLnN1YnN0cmluZygwLGcpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGU9by5zdWJzdHJpbmcoZysxKS50cmltKCksISghSXx8dFtJXSYmb2VbSV0pJiYoST09PSJzZXQtY29va2llIj90W0ldP3RbSV0ucHVzaChlKTp0W0ldPVtlXTp0W0ldPXRbSV0/dFtJXSsiLCAiK2U6ZSl9KSx0fTt2YXIgRnQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiB6KEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOkMuaXNBcnJheShBKT9BLm1hcChmQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIGllKEEpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCksST0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLGU7Zm9yKDtlPUkuZXhlYyhBKTspdFtlWzFdXT1lWzJdO3JldHVybiB0fXZhciBDZT1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBiQShBLHQsSSxlLGcpe2lmKEMuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMsdCxJKTtpZihnJiYodD1JKSwhIUMuaXNTdHJpbmcodCkpe2lmKEMuaXNTdHJpbmcoZSkpcmV0dXJuIHQuaW5kZXhPZihlKSE9PS0xO2lmKEMuaXNSZWdFeHAoZSkpcmV0dXJuIGUudGVzdCh0KX19ZnVuY3Rpb24gQmUoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCh0LEksZSk9PkkudG9VcHBlckNhc2UoKStlKX1mdW5jdGlvbiBuZShBLHQpe2xldCBJPUMudG9DYW1lbENhc2UoIiAiK3QpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChlPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsZStJLHt2YWx1ZTpmdW5jdGlvbihnLHIsbyl7cmV0dXJuIHRoaXNbZV0uY2FsbCh0aGlzLHQsZyxyLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3QmJnRoaXMuc2V0KHQpfXNldCh0LEksZSl7bGV0IGc9dGhpcztmdW5jdGlvbiByKG4sYSxRKXtsZXQgQj16KGEpO2lmKCFCKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgaT1DLmZpbmRLZXkoZyxCKTsoIWl8fGdbaV09PT12b2lkIDB8fFE9PT0hMHx8UT09PXZvaWQgMCYmZ1tpXSE9PSExKSYmKGdbaXx8YV09ZkEobikpfWxldCBvPShuLGEpPT5DLmZvckVhY2gobiwoUSxCKT0+cihRLEIsYSkpO3JldHVybiBDLmlzUGxhaW5PYmplY3QodCl8fHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP28odCxJKTpDLmlzU3RyaW5nKHQpJiYodD10LnRyaW0oKSkmJiFDZSh0KT9vKFN0KHQpLEkpOnQhPW51bGwmJnIoSSx0LGUpLHRoaXN9Z2V0KHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO2lmKGUpe2xldCBnPXRoaXNbZV07aWYoIUkpcmV0dXJuIGc7aWYoST09PSEwKXJldHVybiBpZShnKTtpZihDLmlzRnVuY3Rpb24oSSkpcmV0dXJuIEkuY2FsbCh0aGlzLGcsZSk7aWYoQy5pc1JlZ0V4cChJKSlyZXR1cm4gSS5leGVjKGcpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXModCxJKXtpZih0PXoodCksdCl7bGV0IGU9Qy5maW5kS2V5KHRoaXMsdCk7cmV0dXJuISEoZSYmdGhpc1tlXSE9PXZvaWQgMCYmKCFJfHxiQSh0aGlzLHRoaXNbZV0sZSxJKSkpfXJldHVybiExfWRlbGV0ZSh0LEkpe2xldCBlPXRoaXMsZz0hMTtmdW5jdGlvbiByKG8pe2lmKG89eihvKSxvKXtsZXQgbj1DLmZpbmRLZXkoZSxvKTtuJiYoIUl8fGJBKGUsZVtuXSxuLEkpKSYmKGRlbGV0ZSBlW25dLGc9ITApfX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLGd9Y2xlYXIodCl7bGV0IEk9T2JqZWN0LmtleXModGhpcyksZT1JLmxlbmd0aCxnPSExO2Zvcig7ZS0tOyl7bGV0IHI9SVtlXTsoIXR8fGJBKHRoaXMsdGhpc1tyXSxyLHQsITApKSYmKGRlbGV0ZSB0aGlzW3JdLGc9ITApfXJldHVybiBnfW5vcm1hbGl6ZSh0KXtsZXQgST10aGlzLGU9e307cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChnLHIpPT57bGV0IG89Qy5maW5kS2V5KGUscik7aWYobyl7SVtvXT1mQShnKSxkZWxldGUgSVtyXTtyZXR1cm59bGV0IG49dD9CZShyKTpTdHJpbmcocikudHJpbSgpO24hPT1yJiZkZWxldGUgSVtyXSxJW25dPWZBKGcpLGVbbl09ITB9KSx0aGlzfWNvbmNhdCguLi50KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi50KX10b0pTT04odCl7bGV0IEk9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gQy5mb3JFYWNoKHRoaXMsKGUsZyk9PntlIT1udWxsJiZlIT09ITEmJihJW2ddPXQmJkMuaXNBcnJheShlKT9lLmpvaW4oIiwgIik6ZSl9KSxJfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFt0LEldKT0+dCsiOiAiK0kpLmpvaW4oYCUwQWApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzP3Q6bmV3IHRoaXModCl9c3RhdGljIGNvbmNhdCh0LC4uLkkpe2xldCBlPW5ldyB0aGlzKHQpO3JldHVybiBJLmZvckVhY2goZz0+ZS5zZXQoZykpLGV9c3RhdGljIGFjY2Vzc29yKHQpe2xldCBlPSh0aGlzW0Z0XT10aGlzW0Z0XT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLGc9dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gcihvKXtsZXQgbj16KG8pO2Vbbl18fChuZShnLG8pLGVbbl09ITApfXJldHVybiBDLmlzQXJyYXkodCk/dC5mb3JFYWNoKHIpOnIodCksdGhpc319O1AuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO0MucmVkdWNlRGVzY3JpcHRvcnMoUC5wcm90b3R5cGUsKHt2YWx1ZTpBfSx0KT0+e2xldCBJPXRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KGUpe3RoaXNbSV09ZX19fSk7Qy5mcmVlemVNZXRob2RzKFApO3ZhciBtPVA7ZnVuY3Rpb24gXyhBLHQpe2xldCBJPXRoaXN8fFQsZT10fHxJLGc9bS5mcm9tKGUuaGVhZGVycykscj1lLmRhdGE7cmV0dXJuIEMuZm9yRWFjaChBLGZ1bmN0aW9uKG4pe3I9bi5jYWxsKEkscixnLm5vcm1hbGl6ZSgpLHQ/dC5zdGF0dXM6dm9pZCAwKX0pLGcubm9ybWFsaXplKCkscn1mdW5jdGlvbiB2KEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gUnQoQSx0LEkpe2wuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsbC5FUlJfQ0FOQ0VMRUQsdCxJKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifUMuaW5oZXJpdHMoUnQsbCx7X19DQU5DRUxfXzohMH0pO3ZhciBIPVJ0O2Z1bmN0aW9uIE1BKEEsdCxJKXtsZXQgZT1JLmNvbmZpZy52YWxpZGF0ZVN0YXR1czshSS5zdGF0dXN8fCFlfHxlKEkuc3RhdHVzKT9BKEkpOnQobmV3IGwoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIitJLnN0YXR1cyxbbC5FUlJfQkFEX1JFUVVFU1QsbC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKEkuc3RhdHVzLzEwMCktNF0sSS5jb25maWcsSS5yZXF1ZXN0LEkpKX12YXIgTnQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsdCxJLGUsZyxyKXtsZXQgbz1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpXTtDLmlzTnVtYmVyKEkpJiZvLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShJKS50b0dNVFN0cmluZygpKSxDLmlzU3RyaW5nKGUpJiZvLnB1c2goInBhdGg9IitlKSxDLmlzU3RyaW5nKGcpJiZvLnB1c2goImRvbWFpbj0iK2cpLHI9PT0hMCYmby5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9by5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBxQShBKXtyZXR1cm4vXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdChBKX1mdW5jdGlvbiBLQShBLHQpe3JldHVybiB0P0EucmVwbGFjZSgvXFwvP1xcLyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXFwvKy8sIiIpOkF9ZnVuY3Rpb24gJChBLHQpe3JldHVybiBBJiYhcUEodCk/S0EoQSx0KTp0fXZhciBVdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksST1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksZTtmdW5jdGlvbiBnKHIpe2xldCBvPXI7cmV0dXJuIHQmJihJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz1JLmhyZWYpLEkuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjpJLmhyZWYscHJvdG9jb2w6SS5wcm90b2NvbD9JLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpJLmhvc3Qsc2VhcmNoOkkuc2VhcmNoP0kuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOkkuaGFzaD9JLmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOkkuaG9zdG5hbWUscG9ydDpJLnBvcnQscGF0aG5hbWU6SS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/SS5wYXRobmFtZToiLyIrSS5wYXRobmFtZX19cmV0dXJuIGU9Zyh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IG49Qy5pc1N0cmluZyhvKT9nKG8pOm87cmV0dXJuIG4ucHJvdG9jb2w9PT1lLnByb3RvY29sJiZuLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIE9BKEEpe2xldCB0PS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiB0JiZ0WzFdfHwiIn1mdW5jdGlvbiBzZShBLHQpe0E9QXx8MTA7bGV0IEk9bmV3IEFycmF5KEEpLGU9bmV3IEFycmF5KEEpLGc9MCxyPTAsbztyZXR1cm4gdD10IT09dm9pZCAwP3Q6MWUzLGZ1bmN0aW9uKGEpe2xldCBRPURhdGUubm93KCksQj1lW3JdO298fChvPVEpLElbZ109YSxlW2ddPVE7bGV0IGk9cixmPTA7Zm9yKDtpIT09ZzspZis9SVtpKytdLGk9aSVBO2lmKGc9KGcrMSklQSxnPT09ciYmKHI9KHIrMSklQSksUS1vPHQpcmV0dXJuO2xldCBzPUImJlEtQjtyZXR1cm4gcz9NYXRoLnJvdW5kKGYqMWUzL3MpOnZvaWQgMH19dmFyIEd0PXNlO2Z1bmN0aW9uIGt0KEEsdCl7bGV0IEk9MCxlPUd0KDUwLDI1MCk7cmV0dXJuIGc9PntsZXQgcj1nLmxvYWRlZCxvPWcubGVuZ3RoQ29tcHV0YWJsZT9nLnRvdGFsOnZvaWQgMCxuPXItSSxhPWUobiksUT1yPD1vO0k9cjtsZXQgQj17bG9hZGVkOnIsdG90YWw6byxwcm9ncmVzczpvP3Ivbzp2b2lkIDAsYnl0ZXM6bixyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmbyYmUT8oby1yKS9hOnZvaWQgMCxldmVudDpnfTtCW3Q/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShCKX19dmFyIFFlPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsTHQ9UWUmJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihJLGUpe2xldCBnPUEuZGF0YSxyPW0uZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOm59PUEsYTtmdW5jdGlvbiBRKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpfWxldCBCO2lmKEMuaXNGb3JtRGF0YShnKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXIuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEI9ci5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1CP0Iuc3BsaXQoIjsiKS5tYXAoeT0+eS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtyLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO3Iuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgZj0kKEEuYmFzZVVSTCxBLnVybCk7aS5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksWChmLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksITApLGkudGltZW91dD1BLnRpbWVvdXQ7ZnVuY3Rpb24gcygpe2lmKCFpKXJldHVybjtsZXQgYz1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBpJiZpLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSx5PXtkYXRhOiFvfHxvPT09InRleHQifHxvPT09Impzb24iP2kucmVzcG9uc2VUZXh0OmkucmVzcG9uc2Usc3RhdHVzOmkuc3RhdHVzLHN0YXR1c1RleHQ6aS5zdGF0dXNUZXh0LGhlYWRlcnM6Yyxjb25maWc6QSxyZXF1ZXN0Oml9O01BKGZ1bmN0aW9uKE4pe0koTiksUSgpfSxmdW5jdGlvbihOKXtlKE4pLFEoKX0seSksaT1udWxsfWlmKCJvbmxvYWRlbmQiaW4gaT9pLm9ubG9hZGVuZD1zOmkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWl8fGkucmVhZHlTdGF0ZSE9PTR8fGkuc3RhdHVzPT09MCYmIShpLnJlc3BvbnNlVVJMJiZpLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChzKX0saS5vbmFib3J0PWZ1bmN0aW9uKCl7aSYmKGUobmV3IGwoIlJlcXVlc3QgYWJvcnRlZCIsbC5FQ09OTkFCT1JURUQsQSxpKSksaT1udWxsKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgbCgiTmV0d29yayBFcnJvciIsbC5FUlJfTkVUV09SSyxBLGkpKSxpPW51bGx9LGkub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IHU9QS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrQS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHk9QS50cmFuc2l0aW9uYWx8fGFBO0EudGltZW91dEVycm9yTWVzc2FnZSYmKHU9QS50aW1lb3V0RXJyb3JNZXNzYWdlKSxlKG5ldyBsKHUseS5jbGFyaWZ5VGltZW91dEVycm9yP2wuRVRJTUVET1VUOmwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbH0sdy5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihuJiZDLmlzRnVuY3Rpb24obikmJihuPW4oQSkpLG58fG4hPT0hMSYmVXQoZikpKXtsZXQgYz1BLnhzcmZIZWFkZXJOYW1lJiZBLnhzcmZDb29raWVOYW1lJiZOdC5yZWFkKEEueHNyZkNvb2tpZU5hbWUpO2MmJnIuc2V0KEEueHNyZkhlYWRlck5hbWUsYyl9Zz09PXZvaWQgMCYmci5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBpJiZDLmZvckVhY2goci50b0pTT04oKSxmdW5jdGlvbih1LHkpe2kuc2V0UmVxdWVzdEhlYWRlcih5LHUpfSksQy5pc1VuZGVmaW5lZChBLndpdGhDcmVkZW50aWFscyl8fChpLndpdGhDcmVkZW50aWFscz0hIUEud2l0aENyZWRlbnRpYWxzKSxvJiZvIT09Impzb24iJiYoaS5yZXNwb25zZVR5cGU9QS5yZXNwb25zZVR5cGUpLHR5cGVvZiBBLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa3QoQS5vbkRvd25sb2FkUHJvZ3Jlc3MsITApKSx0eXBlb2YgQS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZpLnVwbG9hZCYmaS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25VcGxvYWRQcm9ncmVzcykpLChBLmNhbmNlbFRva2VufHxBLnNpZ25hbCkmJihhPWM9PntpJiYoZSghY3x8Yy50eXBlP25ldyBIKG51bGwsQSxpKTpjKSxpLmFib3J0KCksaT1udWxsKX0sQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYSksQS5zaWduYWwmJihBLnNpZ25hbC5hYm9ydGVkP2EoKTpBLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYSkpKTtsZXQgRT1PQShmKTtpZihFJiZ3LnByb3RvY29scy5pbmRleE9mKEUpPT09LTEpe2UobmV3IGwoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrRSsiOiIsbC5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1pLnNlbmQoZ3x8bnVsbCl9KX07dmFyIFRBPXtodHRwOlFBLHhocjpMdH07Qy5mb3JFYWNoKFRBLChBLHQpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6dH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTp0fSl9fSk7dmFyIEp0PUE9PmAtICR7QX1gLEVlPUE9PkMuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxsQT17Z2V0QWRhcHRlcjpBPT57QT1DLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDp0fT1BLEksZSxnPXt9O2ZvcihsZXQgcj0wO3I8dDtyKyspe0k9QVtyXTtsZXQgbztpZihlPUksIUVlKEkpJiYoZT1UQVsobz1TdHJpbmcoSSkpLnRvTG93ZXJDYXNlKCldLGU9PT12b2lkIDApKXRocm93IG5ldyBsKGBVbmtub3duIGFkYXB0ZXIgXCcke299XCdgKTtpZihlKWJyZWFrO2dbb3x8IiUyMyIrcl09ZX1pZighZSl7bGV0IHI9T2JqZWN0LmVudHJpZXMoZykubWFwKChbbixhXSk9PmBhZGFwdGVyICR7bn0gYCsoYT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLG89dD9yLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtyLm1hcChKdCkuam9pbihgJTBBYCk6IiAiK0p0KHJbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IGwoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gZX0sYWRhcHRlcnM6VEF9O2Z1bmN0aW9uIFBBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBIKG51bGwsQSl9ZnVuY3Rpb24gREEoQSl7cmV0dXJuIFBBKEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFQuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gUEEoQSksZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZSksZS5oZWFkZXJzPW0uZnJvbShlLmhlYWRlcnMpLGV9LGZ1bmN0aW9uKGUpe3JldHVybiB2KGUpfHwoUEEoQSksZSYmZS5yZXNwb25zZSYmKGUucmVzcG9uc2UuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUucmVzcG9uc2UpLGUucmVzcG9uc2UuaGVhZGVycz1tLmZyb20oZS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KGUpfSl9dmFyIEh0PUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIGsoQSx0KXt0PXR8fHt9O2xldCBJPXt9O2Z1bmN0aW9uIGUoUSxCLGkpe3JldHVybiBDLmlzUGxhaW5PYmplY3QoUSkmJkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOml9LFEsQik6Qy5pc1BsYWluT2JqZWN0KEIpP0MubWVyZ2Uoe30sQik6Qy5pc0FycmF5KEIpP0Iuc2xpY2UoKTpCfWZ1bmN0aW9uIGcoUSxCLGkpe2lmKEMuaXNVbmRlZmluZWQoQikpe2lmKCFDLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRLGkpfWVsc2UgcmV0dXJuIGUoUSxCLGkpfWZ1bmN0aW9uIHIoUSxCKXtpZighQy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbyhRLEIpe2lmKEMuaXNVbmRlZmluZWQoQikpe2lmKCFDLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRKX1lbHNlIHJldHVybiBlKHZvaWQgMCxCKX1mdW5jdGlvbiBuKFEsQixpKXtpZihpIGluIHQpcmV0dXJuIGUoUSxCKTtpZihpIGluIEEpcmV0dXJuIGUodm9pZCAwLFEpfWxldCBhPXt1cmw6cixtZXRob2Q6cixkYXRhOnIsYmFzZVVSTDpvLHRyYW5zZm9ybVJlcXVlc3Q6byx0cmFuc2Zvcm1SZXNwb25zZTpvLHBhcmFtc1NlcmlhbGl6ZXI6byx0aW1lb3V0Om8sdGltZW91dE1lc3NhZ2U6byx3aXRoQ3JlZGVudGlhbHM6byx3aXRoWFNSRlRva2VuOm8sYWRhcHRlcjpvLHJlc3BvbnNlVHlwZTpvLHhzcmZDb29raWVOYW1lOm8seHNyZkhlYWRlck5hbWU6byxvblVwbG9hZFByb2dyZXNzOm8sb25Eb3dubG9hZFByb2dyZXNzOm8sZGVjb21wcmVzczpvLG1heENvbnRlbnRMZW5ndGg6byxtYXhCb2R5TGVuZ3RoOm8sYmVmb3JlUmVkaXJlY3Q6byx0cmFuc3BvcnQ6byxodHRwQWdlbnQ6byxodHRwc0FnZW50Om8sY2FuY2VsVG9rZW46byxzb2NrZXRQYXRoOm8scmVzcG9uc2VFbmNvZGluZzpvLHZhbGlkYXRlU3RhdHVzOm4saGVhZGVyczooUSxCKT0+ZyhIdChRKSxIdChCKSwhMCl9O3JldHVybiBDLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLHQpKSxmdW5jdGlvbihCKXtsZXQgaT1hW0JdfHxnLGY9aShBW0JdLHRbQl0sQik7Qy5pc1VuZGVmaW5lZChmKSYmaSE9PW58fChJW0JdPWYpfSksSX12YXIgdUE9IjEuNi44Ijt2YXIgeEE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLHQpPT57eEFbQV09ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT09QXx8ImEiKyh0PDE/Im4gIjoiICIpK0F9fSk7dmFyIFl0PXt9O3hBLnRyYW5zaXRpb25hbD1mdW5jdGlvbih0LEksZSl7ZnVuY3Rpb24gZyhyLG8pe3JldHVybiJbQXhpb3MgdiIrdUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrcisiXCciK28rKGU/Ii4gIitlOiIiKX1yZXR1cm4ocixvLG4pPT57aWYodD09PSExKXRocm93IG5ldyBsKGcobywiIGhhcyBiZWVuIHJlbW92ZWQiKyhJPyIgaW4gIitJOiIiKSksbC5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIEkmJiFZdFtvXSYmKFl0W29dPSEwLGNvbnNvbGUud2FybihnKG8sIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK0krIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksdD90KHIsbyxuKTohMH19O2Z1bmN0aW9uIGFlKEEsdCxJKXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IGwoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBlPU9iamVjdC5rZXlzKEEpLGc9ZS5sZW5ndGg7Zm9yKDtnLS0gPjA7KXtsZXQgcj1lW2ddLG89dFtyXTtpZihvKXtsZXQgbj1BW3JdLGE9bj09PXZvaWQgMHx8byhuLHIsQSk7aWYoYSE9PSEwKXRocm93IG5ldyBsKCJvcHRpb24gIityKyIgbXVzdCBiZSAiK2EsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYoSSE9PSEwKXRocm93IG5ldyBsKCJVbmtub3duIG9wdGlvbiAiK3IsbC5FUlJfQkFEX09QVElPTil9fXZhciBoQT17YXNzZXJ0T3B0aW9uczphZSx2YWxpZGF0b3JzOnhBfTt2YXIgWT1oQS52YWxpZGF0b3JzLHg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBMQSxyZXNwb25zZTpuZXcgTEF9fWFzeW5jIHJlcXVlc3QodCxJKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxJKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBnO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGc9e30pOmc9bmV3IEVycm9yO2xldCByPWcuc3RhY2s/Zy5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjtlLnN0YWNrP3ImJiFTdHJpbmcoZS5zdGFjaykuZW5kc1dpdGgoci5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKGUuc3RhY2srPWAlMEFgK3IpOmUuc3RhY2s9cn10aHJvdyBlfX1fcmVxdWVzdCh0LEkpe3R5cGVvZiB0PT0ic3RyaW5nIj8oST1JfHx7fSxJLnVybD10KTpJPXR8fHt9LEk9ayh0aGlzLmRlZmF1bHRzLEkpO2xldHt0cmFuc2l0aW9uYWw6ZSxwYXJhbXNTZXJpYWxpemVyOmcsaGVhZGVyczpyfT1JO2UhPT12b2lkIDAmJmhBLmFzc2VydE9wdGlvbnMoZSx7c2lsZW50SlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKX0sITEpLGchPW51bGwmJihDLmlzRnVuY3Rpb24oZyk/SS5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6Z306aEEuYXNzZXJ0T3B0aW9ucyhnLHtlbmNvZGU6WS5mdW5jdGlvbixzZXJpYWxpemU6WS5mdW5jdGlvbn0sITApKSxJLm1ldGhvZD0oSS5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1yJiZDLm1lcmdlKHIuY29tbW9uLHJbSS5tZXRob2RdKTtyJiZDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSByW0VdfSksSS5oZWFkZXJzPW0uY29uY2F0KG8scik7bGV0IG49W10sYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKEkpPT09ITF8fChhPWEmJmMuc3luY2hyb25vdXMsbi51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBRPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7US5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IEIsaT0wLGY7aWYoIWEpe2xldCBFPVtEQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLG4pLEUucHVzaC5hcHBseShFLFEpLGY9RS5sZW5ndGgsQj1Qcm9taXNlLnJlc29sdmUoSSk7aTxmOylCPUIudGhlbihFW2krK10sRVtpKytdKTtyZXR1cm4gQn1mPW4ubGVuZ3RoO2xldCBzPUk7Zm9yKGk9MDtpPGY7KXtsZXQgRT1uW2krK10sYz1uW2krK107dHJ5e3M9RShzKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e0I9REEuY2FsbCh0aGlzLHMpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3IoaT0wLGY9US5sZW5ndGg7aTxmOylCPUIudGhlbihRW2krK10sUVtpKytdKTtyZXR1cm4gQn1nZXRVcmkodCl7dD1rKHRoaXMuZGVmYXVsdHMsdCk7bGV0IEk9JCh0LmJhc2VVUkwsdC51cmwpO3JldHVybiBYKEksdC5wYXJhbXMsdC5wYXJhbXNTZXJpYWxpemVyKX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24odCl7eC5wcm90b3R5cGVbdF09ZnVuY3Rpb24oSSxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsoZXx8e30se21ldGhvZDp0LHVybDpJLGRhdGE6KGV8fHt9KS5kYXRhfSkpfX0pO0MuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIEkoZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbyxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsobnx8e30se21ldGhvZDp0LGhlYWRlcnM6ZT97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6cixkYXRhOm99KSl9fXgucHJvdG90eXBlW3RdPUkoKSx4LnByb3RvdHlwZVt0KyJGb3JtIl09SSghMCl9KTt2YXIgQUE9eDt2YXIgakE9Y2xhc3MgQXtjb25zdHJ1Y3Rvcih0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IEk7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe0k9cn0pO2xldCBlPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZz0+e2lmKCFlLl9saXN0ZW5lcnMpcmV0dXJuO2xldCByPWUuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtyLS0gPjA7KWUuX2xpc3RlbmVyc1tyXShnKTtlLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPWc9PntsZXQgcixvPW5ldyBQcm9taXNlKG49PntlLnN1YnNjcmliZShuKSxyPW59KS50aGVuKGcpO3JldHVybiBvLmNhbmNlbD1mdW5jdGlvbigpe2UudW5zdWJzY3JpYmUocil9LG99LHQoZnVuY3Rpb24ocixvLG4pe2UucmVhc29ufHwoZS5yZWFzb249bmV3IEgocixvLG4pLEkoZS5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUodCl7aWYodGhpcy5yZWFzb24pe3QodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2godCk6dGhpcy5fbGlzdGVuZXJzPVt0XX11bnN1YnNjcmliZSh0KXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgST10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZih0KTtJIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoSSwxKX1zdGF0aWMgc291cmNlKCl7bGV0IHQ7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKGcpe3Q9Z30pLGNhbmNlbDp0fX19LGJ0PWpBO2Z1bmN0aW9uIFdBKEEpe3JldHVybiBmdW5jdGlvbihJKXtyZXR1cm4gQS5hcHBseShudWxsLEkpfX1mdW5jdGlvbiBaQShBKXtyZXR1cm4gQy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgVkE9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKFZBKS5mb3JFYWNoKChbQSx0XSk9PntWQVt0XT1BfSk7dmFyIE10PVZBO2Z1bmN0aW9uIHF0KEEpe2xldCB0PW5ldyBBQShBKSxJPVcoQUEucHJvdG90eXBlLnJlcXVlc3QsdCk7cmV0dXJuIEMuZXh0ZW5kKEksQUEucHJvdG90eXBlLHQse2FsbE93bktleXM6ITB9KSxDLmV4dGVuZChJLHQsbnVsbCx7YWxsT3duS2V5czohMH0pLEkuY3JlYXRlPWZ1bmN0aW9uKGcpe3JldHVybiBxdChrKEEsZykpfSxJfXZhciBoPXF0KFQpO2guQXhpb3M9QUE7aC5DYW5jZWxlZEVycm9yPUg7aC5DYW5jZWxUb2tlbj1idDtoLmlzQ2FuY2VsPXY7aC5WRVJTSU9OPXVBO2gudG9Gb3JtRGF0YT1KO2guQXhpb3NFcnJvcj1sO2guQ2FuY2VsPWguQ2FuY2VsZWRFcnJvcjtoLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodCl9O2guc3ByZWFkPVdBO2guaXNBeGlvc0Vycm9yPVpBO2gubWVyZ2VDb25maWc9aztoLkF4aW9zSGVhZGVycz1tO2guZm9ybVRvSlNPTj1BPT5jQShDLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2guZ2V0QWRhcHRlcj1sQS5nZXRBZGFwdGVyO2guSHR0cFN0YXR1c0NvZGU9TXQ7aC5kZWZhdWx0PWg7dmFyIGRBPWg7dmFye0F4aW9zOmlvLEF4aW9zRXJyb3I6Q28sQ2FuY2VsZWRFcnJvcjpCbyxpc0NhbmNlbDpubyxDYW5jZWxUb2tlbjpzbyxWRVJTSU9OOlFvLGFsbDpFbyxDYW5jZWw6YW8saXNBeGlvc0Vycm9yOmNvLHNwcmVhZDpmbyx0b0Zvcm1EYXRhOmxvLEF4aW9zSGVhZGVyczpEbyxIdHRwU3RhdHVzQ29kZTp1byxmb3JtVG9KU09OOmhvLGdldEFkYXB0ZXI6eW8sbWVyZ2VDb25maWc6d299PWRBO3ZhciB0QSxMLHpBLFhBPXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7ekE9bmV3IFVpbnQ4QXJyYXkoTC5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LHlBPWNsYXNze2luaXQoKXtyZXR1cm4gdEF8fCh0eXBlb2YgZmV0Y2g8InUiP3RBPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrS3QpLnRoZW4odD0+dC5hcnJheUJ1ZmZlcigpKS50aGVuKHQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsWEEpKS50aGVuKHRoaXMuX2luaXQpOnRBPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKEt0LCJiYXNlNjQiKSxYQSkudGhlbih0aGlzLl9pbml0KSx0QSl9X2luaXQodCl7TD10Lmluc3RhbmNlLFhBLmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZSh0LEk9MCl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IGU9dC5ieXRlTGVuZ3RoLGc9TC5leHBvcnRzLm1hbGxvYyhlKTt6QS5zZXQodCxnKSxJPUl8fE51bWJlcihMLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShnLGUpKTtsZXQgcj1MLmV4cG9ydHMubWFsbG9jKEkpLG89TC5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhyLEksZyxlKSxuPXpBLnNsaWNlKHIscitvKTtyZXR1cm4gTC5leHBvcnRzLmZyZWUoZyksTC5leHBvcnRzLmZyZWUociksbn19LEt0PSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIE90PW5ldyB5QSxUdD0hMTthc3luYyBmdW5jdGlvbiBjZShBLHQsSSl7bGV0IGU9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ZT1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ZT1BOmU9YCR7dH0vJHtBfWAsZS5lbmRzV2l0aCgiLmpzIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMykpLGUuZW5kc1dpdGgoIi53YXNtIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtNSkpO2xldCBnPWAke2V9Lndhc21gLHI9YXdhaXQgZEEuZ2V0KGAke2d9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczpJfSk7VHR8fChhd2FpdCBPdC5pbml0KCksVHQ9ITApO2xldCBuPU90LmRlY29kZShuZXcgVWludDhBcnJheShyLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtlfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om59KX12YXIgUHQ9Y2U7dmFyIHdBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gZmUoQSx0LEkpe2xldCBlPUEsZz1BLHI9bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoZT1uZXcgVVJMKEEuaHJlZiksZz1lLmhyZWYpLHdBLmhhcyhnKT9yPWF3YWl0IHdBLmdldChnKTood0Euc2V0KGcsUHQoZSx0LEkpKSxyPWF3YWl0IHdBLmdldChnKSkscn12YXIgeHQ9ZmU7dmFyIGxlPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sRD1sZTt2YXIgRGU9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxTPURlO3ZhciB1ZT17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0saj11ZTtmdW5jdGlvbiBoZShBLHQpe2xldCBJPW51bGw7c3dpdGNoKEEpe2Nhc2UgUy5VSW50ODp7ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFMuSW50ODp7ST1uZXcgSW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50MTY6e0k9bmV3IFVpbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQxNjp7ST1uZXcgSW50MTZBcnJheSh0KTticmVha31jYXNlIFMuVUludDMyOntJPW5ldyBVaW50MzJBcnJheSh0KTticmVha31jYXNlIFMuSW50MzI6e0k9bmV3IEludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/ST1uZXcgQmlnVWludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFMuSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/ST1uZXcgQmlnSW50NjRBcnJheSh0KTpJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDMyOntJPW5ldyBGbG9hdDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBqLkZsb2F0NjQ6e0k9bmV3IEZsb2F0NjRBcnJheSh0KTticmVha31jYXNlIm51bGwiOntJPW51bGw7YnJlYWt9Y2FzZSBudWxsOntJPW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gSX12YXIgRz1oZTt2YXIgWnQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsanQ9bmV3IFRleHRFbmNvZGVyLFd0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBkZShBLHQpe2xldCBJPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LGU9QS5mc19vcGVuKHQsSS5mbGFncykscj1BLmZzX3N0YXQodCkuc2l6ZSxvPW51bGw7WnQ/bz1uZXcgU2hhcmVkQXJyYXlCdWZmZXIocik6bz1uZXcgQXJyYXlCdWZmZXIocik7bGV0IG49bmV3IFVpbnQ4QXJyYXkobyk7cmV0dXJuIEEuZnNfcmVhZChlLG4sMCxyLDApLEEuZnNfY2xvc2UoZSksbn1mdW5jdGlvbiBWdChBLHQsSSl7bGV0IGU9bnVsbDtadD9lPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihJKTplPW5ldyBBcnJheUJ1ZmZlcihJKTtsZXQgZz1uZXcgVWludDhBcnJheShlKSxyPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcix0LEkpO3JldHVybiBnLnNldChyKSxnfWZ1bmN0aW9uIGQoQSx0LEksZSl7bGV0IGc9MDtyZXR1cm4gdCE9PW51bGwmJihnPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksZSx0LmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxnKSksZ31mdW5jdGlvbiBNKEEsdCxJKXtsZXQgZT1KU09OLnN0cmluZ2lmeSh0KSxnPUEubGVuZ3RoQnl0ZXNVVEY4KGUpKzEscj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksZ10pO0Euc3RyaW5nVG9VVEY4KGUscixnKX1mdW5jdGlvbiBwKEEsdCxJLGUpe2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxJXSksbz1WdChBLGcscik7cmV0dXJuIEcoZSxvLmJ1ZmZlcil9ZnVuY3Rpb24gbUEoQSx0KXtsZXQgST1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLHRdKSxlPUEuVVRGOFRvU3RyaW5nKEkpO3JldHVybiBKU09OLnBhcnNlKGUpfWZ1bmN0aW9uIHllKEEsdCxJLGUpe2UhPW51bGwmJmUubGVuZ3RoPjAmJmUuZm9yRWFjaChmdW5jdGlvbihRLEIpe3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgaT1qdC5lbmNvZGUoUS5kYXRhLmRhdGEpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgaT1qdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoUS5kYXRhKSksZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgaT1RLmRhdGEuZGF0YSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5kYXRhLEIsMCkscz1kKEEsaS5kaXJlY3Rpb24sQiwxKSxFPXR5cGVvZiBpLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGkubWV0YWRhdGEuZW50cmllcygpKTpbXSxjPXtpbWFnZVR5cGU6aS5pbWFnZVR5cGUsbmFtZTppLm5hbWUsb3JpZ2luOmkub3JpZ2luLHNwYWNpbmc6aS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxzaXplOmkuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOkV9O00oQSxjLEIpO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLmNlbGxzLEIsMSksRT1kKEEsaS5wb2ludERhdGEsQiwyKSxjPWQoQSxpLmNlbGxEYXRhLEIsMyksdT17bWVzaFR5cGU6aS5tZXNoVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOmkubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxjZWxsQnVmZmVyU2l6ZTppLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZkNlbGxQaXhlbHM6aS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O00oQSx1LEIpO2JyZWFrfWNhc2UgRC5Qb2ludFNldDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5wb2ludERhdGEsQiwxKSxFPXtwb2ludFNldFR5cGU6aS5wb2ludFNldFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gfTtNKEEsRSxCKTticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkudmVydGljZXMsQiwxKSxFPWQoQSxpLmxpbmVzLEIsMiksYz1kKEEsaS5wb2x5Z29ucyxCLDMpLHU9ZChBLGkudHJpYW5nbGVTdHJpcHMsQiw0KSx5PWQoQSxpLnBvaW50RGF0YSxCLDUpLFI9ZChBLGkucG9pbnREYXRhLEIsNiksTj17cG9seURhdGFUeXBlOmkucG9seURhdGFUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTppLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxsaW5lc0J1ZmZlclNpemU6aS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOmkucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTppLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5fWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtNKEEsTixCKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgZz1BLnN0YWNrU2F2ZSgpLHI9MDt0cnl7cj1BLmNhbGxNYWluKHQuc2xpY2UoKSl9Y2F0Y2goUSl7dGhyb3cgdHlwZW9mIFE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoUSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksUX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKGcpfWxldCBvPUEuZ2V0TW9kdWxlU3Rkb3V0KCksbj1BLmdldE1vZHVsZVN0ZGVycigpLGE9W107cmV0dXJuIEkhPW51bGwmJkkubGVuZ3RoPjAmJnI9PT0wJiZJLmZvckVhY2goZnVuY3Rpb24oUSxCKXtsZXQgaT1udWxsO3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHMsRSk7aT17ZGF0YTpXdC5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9SlNPTi5wYXJzZShXdC5kZWNvZGUoYykpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSk7aT17ZGF0YTpWdChBLHMsRSl9O2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7aT17cGF0aDpRLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoUS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7aT17cGF0aDpRLmRhdGEucGF0aCxkYXRhOmRlKEEsUS5kYXRhLnBhdGgpfTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBzPW1BKEEsQik7cy5kYXRhPXAoQSxCLDAscy5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSkscy5kaXJlY3Rpb249cChBLEIsMSxqLkZsb2F0NjQpLHMubWV0YWRhdGE9bmV3IE1hcChzLm1ldGFkYXRhKSxpPXM7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAscy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOnMucG9pbnRzPUcocy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbHM+MD9zLmNlbGxzPXAoQSxCLDEscy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6cy5jZWxscz1HKHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwyLHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/cy5jZWxsRGF0YT1wKEEsQiwzLHMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6cy5jZWxsRGF0YT1HKHMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAscy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDEscy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLGouRmxvYXQzMik6cy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxzLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP3MudmVydGljZXM9cChBLEIsMSxTLlVJbnQzMik6cy52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXkscy5saW5lc0J1ZmZlclNpemU+MD9zLmxpbmVzPXAoQSxCLDIsUy5VSW50MzIpOnMubGluZXM9bmV3IFVpbnQzMkFycmF5LHMucG9seWdvbnNCdWZmZXJTaXplPjA/cy5wb2x5Z29ucz1wKEEsQiwzLFMuVUludDMyKTpzLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP3MudHJpYW5nbGVTdHJpcHM9cChBLEIsNCxTLlVJbnQzMik6cy50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsNSxzLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/cy5jZWxsRGF0YT1wKEEsQiw2LHMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6US50eXBlLGRhdGE6aX07YS5wdXNoKGYpfSkse3JldHVyblZhbHVlOnIsc3Rkb3V0Om8sc3RkZXJyOm4sb3V0cHV0czphfX12YXIgWHQ9eWU7dmFyIHdlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBtZShBLHQpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IEk9W107Zm9yKGxldCBlPTA7ZTxBLmxlbmd0aDtlKyspe2xldCBnPXBlKEFbZV0sdCk7ZyE9PW51bGwmJkkucHVzaChnKX1yZXR1cm4gSX1mdW5jdGlvbiBwZShBLHQpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IEk9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/ST1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihJPUEpLHdlJiZJIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDp0P0k6SS5zbGljZSgwKX12YXIgenQ9bWU7ZnVuY3Rpb24gU2UoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIF90PVNlO2Z1bmN0aW9uIEZlKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciB2dD1GZTtmdW5jdGlvbiBSZShBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgJHQ9UmU7YXN5bmMgZnVuY3Rpb24gTmUoQSx0LEksZSl7bGV0IGc9WHQoQSx0LEksZSkscj1bXTtyZXR1cm4gZy5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24obyl7aWYoby50eXBlPT09RC5CaW5hcnlTdHJlYW18fG8udHlwZT09PUQuQmluYXJ5RmlsZSl7bGV0IG49by5kYXRhO3IucHVzaChuKX1lbHNlIGlmKG8udHlwZT09PUQuSW1hZ2Upe2xldCBuPW8uZGF0YTtyLnB1c2goLi4uX3QobikpfWVsc2UgaWYoby50eXBlPT09RC5NZXNoKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLnZ0KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuUG9seURhdGEpe2xldCBuPW8uZGF0YTtyLnB1c2goLi4uJHQobikpfX0pLEZBKGcsenQociwhMCkpfXZhciBBST1OZTt2YXIgVWU9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsdCxJLGUsZyxyKXtsZXQgbz1hd2FpdCB4dChBLHQscik7cmV0dXJuIGF3YWl0IEFJKG8sSSxlLGcpfX07aUEoVWUpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7QnQobHQpO2V4cG9ydHtubiBhcyBkb3duc2FtcGxlLFhyIGFzIGRvd25zYW1wbGVCaW5TaHJpbmssQW4gYXMgZG93bnNhbXBsZUxhYmVsSW1hZ2UsdG4gYXMgZG93bnNhbXBsZVNpZ21hLGFuIGFzIGdhdXNzaWFuS2VybmVsUmFkaXVzLE8gYXMgZ2V0RGVmYXVsdFdlYldvcmtlcixSIGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLEwgYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCxJcyBhcyBzZXREZWZhdWx0V2ViV29ya2VyLEJ0IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLHRzIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsYkEgYXMgdmVyc2lvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" +default_js_module = """data:text/javascript;base64,dmFyIGN0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgUXQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSljdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHV0PSIxLjQuMyIsYkE9dXQ7dmFyIGZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1mdDt2YXIgcHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFk9cHQ7ZnVuY3Rpb24gZHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIFMuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIFMuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIFkuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgWS5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIE49ZHQ7dmFyIG10PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sdT1tdDt2YXIgaWU9U3ltYm9sKCJDb21saW5rLnByb3h5IiksaHQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksTkE9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLEZBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxzQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksYWU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIseXQ9e2NhbkhhbmRsZTpBPT5hZShBKSYmQVtpZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gSWUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLEdBKEEpfX0sd3Q9e2NhbkhhbmRsZTpBPT5hZShBKSYmc0EgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LHNlPW5ldyBNYXAoW1sicHJveHkiLHl0XSxbInRocm93Iix3dF1dKTtmdW5jdGlvbiBEdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gSWUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG4pe2lmKCFufHwhbi5kYXRhKXJldHVybjtpZighRHQodCxuLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7bi5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6byx0eXBlOmkscGF0aDpnfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxuLmRhdGEpLGw9KG4uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoSCksQzt0cnl7bGV0IEk9Zy5zbGljZSgwLC0xKS5yZWR1Y2UoKGMsQik9PmNbQl0sQSksYT1nLnJlZHVjZSgoYyxCKT0+Y1tCXSxBKTtzd2l0Y2goaSl7Y2FzZSJHRVQiOkM9YTticmVhaztjYXNlIlNFVCI6SVtnLnNsaWNlKC0xKVswXV09SChuLmRhdGEudmFsdWUpLEM9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6Qz1hLmFwcGx5KEksbCk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgYz1uZXcgYSguLi5sKTtDPUZ0KGMpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Yyxwb3J0MjpCfT1uZXcgTWVzc2FnZUNoYW5uZWw7SWUoQSxCKSxDPUxBKGMsW2NdKX1icmVhaztjYXNlIlJFTEVBU0UiOkM9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChJKXtDPXt2YWx1ZTpJLFtzQV06MH19UHJvbWlzZS5yZXNvbHZlKEMpLmNhdGNoKEk9Pih7dmFsdWU6SSxbc0FdOjB9KSkudGhlbihJPT57bGV0W2EsY109QkEoSSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOm99KSxjKSxpPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxnZShlKSxGQSBpbiBBJiZ0eXBlb2YgQVtGQV09PSJmdW5jdGlvbiImJkFbRkFdKCkpfSkuY2F0Y2goST0+e2xldFthLGNdPUJBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbc0FdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6b30pLGMpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gU3QoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gZ2UoQSl7U3QoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBHQShBLGUpe3JldHVybiBVQShBLFtdLGUpfWZ1bmN0aW9uIGFBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBCZShBKXtyZXR1cm4gcShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntnZShBKX0pfXZhciBJQT1uZXcgV2Vha01hcCxnQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oSUEuZ2V0KEEpfHwwKS0xO0lBLnNldChBLGUpLGU9PT0wJiZCZShBKX0pO2Z1bmN0aW9uIGt0KEEsZSl7bGV0IHQ9KElBLmdldChlKXx8MCkrMTtJQS5zZXQoZSx0KSxnQSYmZ0EucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIFJ0KEEpe2dBJiZnQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIFVBKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbj1uZXcgUHJveHkodCx7Z2V0KG8saSl7aWYoYUEociksaT09PU5BKXJldHVybigpPT57UnQobiksQmUoQSkscj0hMH07aWYoaT09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5ufTtsZXQgZz1xKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChsPT5sLnRvU3RyaW5nKCkpfSkudGhlbihIKTtyZXR1cm4gZy50aGVuLmJpbmQoZyl9cmV0dXJuIFVBKEEsWy4uLmUsaV0pfSxzZXQobyxpLGcpe2FBKHIpO2xldFtsLENdPUJBKGcpO3JldHVybiBxKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxpXS5tYXAoST0+SS50b1N0cmluZygpKSx2YWx1ZTpsfSxDKS50aGVuKEgpfSxhcHBseShvLGksZyl7YUEocik7bGV0IGw9ZVtlLmxlbmd0aC0xXTtpZihsPT09aHQpcmV0dXJuIHEoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihIKTtpZihsPT09ImJpbmQiKXJldHVybiBVQShBLGUuc2xpY2UoMCwtMSkpO2xldFtDLEldPW9lKGcpO3JldHVybiBxKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkN9LEkpLnRoZW4oSCl9LGNvbnN0cnVjdChvLGkpe2FBKHIpO2xldFtnLGxdPW9lKGkpO3JldHVybiBxKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChDPT5DLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpnfSxsKS50aGVuKEgpfX0pO3JldHVybiBrdChuLEEpLG59ZnVuY3Rpb24gYnQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gb2UoQSl7bGV0IGU9QS5tYXAoQkEpO3JldHVybltlLm1hcCh0PT50WzBdKSxidChlLm1hcCh0PT50WzFdKSldfXZhciBDZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBMQShBLGUpe3JldHVybiBDZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIEZ0KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tpZV06ITB9KX1mdW5jdGlvbiBCQShBKXtmb3IobGV0W2UsdF1vZiBzZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isbl09dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sbl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LENlLmdldChBKXx8W11dfWZ1bmN0aW9uIEgoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gc2UuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBxKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBuPVV0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBvKGkpeyFpLmRhdGF8fCFpLmRhdGEuaWR8fGkuZGF0YS5pZCE9PW58fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHIoaS5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpufSxlKSx0KX0pfWZ1bmN0aW9uIFV0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBaKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6TnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOlRBfT1PYmplY3QsbEE9KEE9PmU9PntsZXQgdD1OdC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksRz1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+bEEoZSk9PT1BKSxFQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6S309QXJyYXksWD1FQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gR3QoQSl7cmV0dXJuIEEhPT1udWxsJiYhWChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFYKEEuY29uc3RydWN0b3IpJiZrKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBRZT1HKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIEx0KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmUWUoQS5idWZmZXIpLGV9dmFyIE90PUVBKCJzdHJpbmciKSxrPUVBKCJmdW5jdGlvbiIpLHVlPUVBKCJudW1iZXIiKSxjQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLFB0PUE9PkE9PT0hMHx8QT09PSExLENBPUE9PntpZihsQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPVRBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LFR0PUcoIkRhdGUiKSx4dD1HKCJGaWxlIiksSnQ9RygiQmxvYiIpLEh0PUcoIkZpbGVMaXN0IiksTXQ9QT0+Y0EoQSkmJmsoQS5waXBlKSxZdD1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8ayhBLmFwcGVuZCkmJigoZT1sQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJmsoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0scXQ9RygiVVJMU2VhcmNoUGFyYW1zIiksS3Q9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uICQoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixuO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxLKEEpKWZvcihyPTAsbj1BLmxlbmd0aDtyPG47cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBvPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksaT1vLmxlbmd0aCxnO2ZvcihyPTA7cjxpO3IrKylnPW9bcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBmZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsbjtmb3IoO3ItLSA+MDspaWYobj10W3JdLGU9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG47cmV0dXJuIG51bGx9dmFyIHBlPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsZGU9QT0+IVgoQSkmJkEhPT1wZTtmdW5jdGlvbiBQQSgpe2xldHtjYXNlbGVzczpBfT1kZSh0aGlzKSYmdGhpc3x8e30sZT17fSx0PShyLG4pPT57bGV0IG89QSYmZmUoZSxuKXx8bjtDQShlW29dKSYmQ0Eocik/ZVtvXT1QQShlW29dLHIpOkNBKHIpP2Vbb109UEEoe30scik6SyhyKT9lW29dPXIuc2xpY2UoKTplW29dPXJ9O2ZvcihsZXQgcj0wLG49YXJndW1lbnRzLmxlbmd0aDtyPG47cisrKWFyZ3VtZW50c1tyXSYmJChhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIFd0PShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PigkKGUsKG4sbyk9Pnt0JiZrKG4pP0Fbb109WihuLHQpOkFbb109bn0se2FsbE93bktleXM6cn0pLEEpLGp0PUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksdnQ9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sX3Q9KEEsZSx0LHIpPT57bGV0IG4sbyxpLGc9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLG89bi5sZW5ndGg7by0tID4wOylpPW5bb10sKCFyfHxyKGksQSxlKSkmJiFnW2ldJiYoZVtpXT1BW2ldLGdbaV09ITApO0E9dCE9PSExJiZUQShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0senQ9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxWdD1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoSyhBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighdWUoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LFp0PShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZUQShVaW50OEFycmF5KSksWHQ9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG47Zm9yKDsobj1yLm5leHQoKSkmJiFuLmRvbmU7KXtsZXQgbz1uLnZhbHVlO2UuY2FsbChBLG9bMF0sb1sxXSl9fSwkdD0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxBcj1HKCJIVE1MRm9ybUVsZW1lbnQiKSxlcj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbil7cmV0dXJuIHIudG9VcHBlckNhc2UoKStufSksRWU9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLHRyPUcoIlJlZ0V4cCIpLG1lPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTskKHQsKG4sbyk9PntsZXQgaTsoaT1lKG4sbyxBKSkhPT0hMSYmKHJbb109aXx8bil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxycj1BPT57bWUoQSwoZSx0KT0+e2lmKGsoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoayhyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxucj0oQSxlKT0+e2xldCB0PXt9LHI9bj0+e24uZm9yRWFjaChvPT57dFtvXT0hMH0pfTtyZXR1cm4gSyhBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxvcj0oKT0+e30saXI9KEEsZSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOmUpLE9BPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsY2U9IjAxMjM0NTY3ODkiLGhlPXtESUdJVDpjZSxBTFBIQTpPQSxBTFBIQV9ESUdJVDpPQStPQS50b1VwcGVyQ2FzZSgpK2NlfSxhcj0oQT0xNixlPWhlLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6cn09ZTtmb3IoO0EtLTspdCs9ZVtNYXRoLnJhbmRvbSgpKnJ8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIHNyKEEpe3JldHVybiEhKEEmJmsoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBJcj1BPT57bGV0IGU9bmV3IEFycmF5KDEwKSx0PShyLG4pPT57aWYoY0Eocikpe2lmKGUuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXtlW25dPXI7bGV0IG89SyhyKT9bXTp7fTtyZXR1cm4gJChyLChpLGcpPT57bGV0IGw9dChpLG4rMSk7IVgobCkmJihvW2ddPWwpfSksZVtuXT12b2lkIDAsb319cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LGdyPUcoIkFzeW5jRnVuY3Rpb24iKSxCcj1BPT5BJiYoY0EoQSl8fGsoQSkpJiZrKEEudGhlbikmJmsoQS5jYXRjaCkscz17aXNBcnJheTpLLGlzQXJyYXlCdWZmZXI6UWUsaXNCdWZmZXI6R3QsaXNGb3JtRGF0YTpZdCxpc0FycmF5QnVmZmVyVmlldzpMdCxpc1N0cmluZzpPdCxpc051bWJlcjp1ZSxpc0Jvb2xlYW46UHQsaXNPYmplY3Q6Y0EsaXNQbGFpbk9iamVjdDpDQSxpc1VuZGVmaW5lZDpYLGlzRGF0ZTpUdCxpc0ZpbGU6eHQsaXNCbG9iOkp0LGlzUmVnRXhwOnRyLGlzRnVuY3Rpb246ayxpc1N0cmVhbTpNdCxpc1VSTFNlYXJjaFBhcmFtczpxdCxpc1R5cGVkQXJyYXk6WnQsaXNGaWxlTGlzdDpIdCxmb3JFYWNoOiQsbWVyZ2U6UEEsZXh0ZW5kOld0LHRyaW06S3Qsc3RyaXBCT006anQsaW5oZXJpdHM6dnQsdG9GbGF0T2JqZWN0Ol90LGtpbmRPZjpsQSxraW5kT2ZUZXN0OkcsZW5kc1dpdGg6enQsdG9BcnJheTpWdCxmb3JFYWNoRW50cnk6WHQsbWF0Y2hBbGw6JHQsaXNIVE1MRm9ybTpBcixoYXNPd25Qcm9wZXJ0eTpFZSxoYXNPd25Qcm9wOkVlLHJlZHVjZURlc2NyaXB0b3JzOm1lLGZyZWV6ZU1ldGhvZHM6cnIsdG9PYmplY3RTZXQ6bnIsdG9DYW1lbENhc2U6ZXIsbm9vcDpvcix0b0Zpbml0ZU51bWJlcjppcixmaW5kS2V5OmZlLGdsb2JhbDpwZSxpc0NvbnRleHREZWZpbmVkOmRlLEFMUEhBQkVUOmhlLGdlbmVyYXRlU3RyaW5nOmFyLGlzU3BlY0NvbXBsaWFudEZvcm06c3IsdG9KU09OT2JqZWN0OklyLGlzQXN5bmNGbjpncixpc1RoZW5hYmxlOkJyfTtmdW5jdGlvbiBXKEEsZSx0LHIsbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG4mJih0aGlzLnJlc3BvbnNlPW4pfXMuaW5oZXJpdHMoVyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIHllPVcucHJvdG90eXBlLHdlPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e3dlW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFcsd2UpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5ZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtXLmZyb209KEEsZSx0LHIsbixvKT0+e2xldCBpPU9iamVjdC5jcmVhdGUoeWUpO3JldHVybiBzLnRvRmxhdE9iamVjdChBLGksZnVuY3Rpb24obCl7cmV0dXJuIGwhPT1FcnJvci5wcm90b3R5cGV9LGc9PmchPT0iaXNBeGlvc0Vycm9yIiksVy5jYWxsKGksQS5tZXNzYWdlLGUsdCxyLG4pLGkuY2F1c2U9QSxpLm5hbWU9QS5uYW1lLG8mJk9iamVjdC5hc3NpZ24oaSxvKSxpfTt2YXIgcD1XO3ZhciBRQT1udWxsO2Z1bmN0aW9uIHhBKEEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQSl8fHMuaXNBcnJheShBKX1mdW5jdGlvbiBTZShBKXtyZXR1cm4gcy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBEZShBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG4sbyl7cmV0dXJuIG49U2UobiksIXQmJm8/IlsiK24rIl0iOm59KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIENyKEEpe3JldHVybiBzLmlzQXJyYXkoQSkmJiFBLnNvbWUoeEEpfXZhciBscj1zLnRvRmxhdE9iamVjdChzLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gRXIoQSxlLHQpe2lmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KFFBfHxGb3JtRGF0YSksdD1zLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oUSxmKXtyZXR1cm4hcy5pc1VuZGVmaW5lZChmW1FdKX0pO2xldCByPXQubWV0YVRva2VucyxuPXQudmlzaXRvcnx8SSxvPXQuZG90cyxpPXQuaW5kZXhlcyxsPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJnMuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighcy5pc0Z1bmN0aW9uKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gQyhFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihzLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFsJiZzLmlzQmxvYihFKSl0aHJvdyBuZXcgcCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gcy5pc0FycmF5QnVmZmVyKEUpfHxzLmlzVHlwZWRBcnJheShFKT9sJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gSShFLFEsZil7bGV0IGQ9RTtpZihFJiYhZiYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihzLmVuZHNXaXRoKFEsInt9IikpUT1yP1E6US5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYocy5pc0FycmF5KEUpJiZDcihFKXx8KHMuaXNGaWxlTGlzdChFKXx8cy5lbmRzV2l0aChRLCJbXSIpKSYmKGQ9cy50b0FycmF5KEUpKSlyZXR1cm4gUT1TZShRKSxkLmZvckVhY2goZnVuY3Rpb24oVSxFdCl7IShzLmlzVW5kZWZpbmVkKFUpfHxVPT09bnVsbCkmJmUuYXBwZW5kKGk9PT0hMD9EZShbUV0sRXQsbyk6aT09PW51bGw/UTpRKyJbXSIsQyhVKSl9KSwhMX1yZXR1cm4geEEoRSk/ITA6KGUuYXBwZW5kKERlKGYsUSxvKSxDKEUpKSwhMSl9bGV0IGE9W10sYz1PYmplY3QuYXNzaWduKGxyLHtkZWZhdWx0VmlzaXRvcjpJLGNvbnZlcnRWYWx1ZTpDLGlzVmlzaXRhYmxlOnhBfSk7ZnVuY3Rpb24gQihFLFEpe2lmKCFzLmlzVW5kZWZpbmVkKEUpKXtpZihhLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrUS5qb2luKCIuIikpO2EucHVzaChFKSxzLmZvckVhY2goRSxmdW5jdGlvbihkLEYpeyghKHMuaXNVbmRlZmluZWQoZCl8fGQ9PT1udWxsKSYmbi5jYWxsKGUsZCxzLmlzU3RyaW5nKEYpP0YudHJpbSgpOkYsUSxjKSk9PT0hMCYmQihkLFE/US5jb25jYXQoRik6W0ZdKX0pLGEucG9wKCl9fWlmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gQihBKSxlfXZhciBUPUVyO2Z1bmN0aW9uIGtlKEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gUmUoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZUKEEsdGhpcyxlKX12YXIgYmU9UmUucHJvdG90eXBlO2JlLmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtiZS50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLGtlKX06a2U7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChuWzBdKSsiPSIrdChuWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHVBPVJlO2Z1bmN0aW9uIGNyKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIEFBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8Y3Isbj10JiZ0LnNlcmlhbGl6ZSxvO2lmKG4/bz1uKGUsdCk6bz1zLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgdUEoZSx0KS50b1N0cmluZyhyKSxvKXtsZXQgaT1BLmluZGV4T2YoIiMiKTtpIT09LTEmJihBPUEuc2xpY2UoMCxpKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gQX12YXIgSkE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe3MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxIQT1KQTt2YXIgZkE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBGZT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6dUE7dmFyIFVlPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgTmU9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgR2U9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6RmUsRm9ybURhdGE6VWUsQmxvYjpOZX0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBNQT17fTtRdChNQSx7aGFzQnJvd3NlckVudjooKT0+TGUsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5RcixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PnVyfSk7dmFyIExlPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLFFyPShBPT5MZSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLHVyPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgeT17Li4uTUEsLi4uR2V9O2Z1bmN0aW9uIFlBKEEsZSl7cmV0dXJuIFQoQSxuZXcgeS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixuLG8pe3JldHVybiB5LmlzTm9kZSYmcy5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOm8uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZSkpfWZ1bmN0aW9uIGZyKEEpe3JldHVybiBzLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxBKS5tYXAoZT0+ZVswXT09PSJbXSI/IiI6ZVsxXXx8ZVswXSl9ZnVuY3Rpb24gcHIoQSl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhBKSxyLG49dC5sZW5ndGgsbztmb3Iocj0wO3I8bjtyKyspbz10W3JdLGVbb109QVtvXTtyZXR1cm4gZX1mdW5jdGlvbiBkcihBKXtmdW5jdGlvbiBlKHQscixuLG8pe2xldCBpPXRbbysrXTtpZihpPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IGc9TnVtYmVyLmlzRmluaXRlKCtpKSxsPW8+PXQubGVuZ3RoO3JldHVybiBpPSFpJiZzLmlzQXJyYXkobik/bi5sZW5ndGg6aSxsPyhzLmhhc093blByb3AobixpKT9uW2ldPVtuW2ldLHJdOm5baV09ciwhZyk6KCghbltpXXx8IXMuaXNPYmplY3QobltpXSkpJiYobltpXT1bXSksZSh0LHIsbltpXSxvKSYmcy5pc0FycmF5KG5baV0pJiYobltpXT1wcihuW2ldKSksIWcpfWlmKHMuaXNGb3JtRGF0YShBKSYmcy5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBzLmZvckVhY2hFbnRyeShBLChyLG4pPT57ZShmcihyKSxuLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBwQT1kcjtmdW5jdGlvbiBtcihBLGUsdCl7aWYocy5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKEEpLHMudHJpbShBKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgcUE9e3RyYW5zaXRpb25hbDpmQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixuPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG89cy5pc09iamVjdChlKTtpZihvJiZzLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSkscy5pc0Zvcm1EYXRhKGUpKXJldHVybiBuP0pTT04uc3RyaW5naWZ5KHBBKGUpKTplO2lmKHMuaXNBcnJheUJ1ZmZlcihlKXx8cy5pc0J1ZmZlcihlKXx8cy5pc1N0cmVhbShlKXx8cy5pc0ZpbGUoZSl8fHMuaXNCbG9iKGUpKXJldHVybiBlO2lmKHMuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKHMuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKG8pe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIFlBKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1zLmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGw9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBUKGc/eyJmaWxlc1tdIjplfTplLGwmJm5ldyBsLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8bj8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLG1yKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxxQS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG49dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoZSYmcy5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bikpe2xldCBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm47dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKGkpdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9wLmZyb20oZyxwLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp5LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp5LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e3FBLmhlYWRlcnNbQV09e319KTt2YXIgaj1xQTt2YXIgaHI9cy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxPZT1BPT57bGV0IGU9e30sdCxyLG47cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe249aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLG4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9aS5zdWJzdHJpbmcobisxKS50cmltKCksISghdHx8ZVt0XSYmaHJbdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgUGU9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGRBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAoZEEpOlN0cmluZyhBKX1mdW5jdGlvbiB5cihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgd3I9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gS0EoQSxlLHQscixuKXtpZihzLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYobiYmKGU9dCksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIERyKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIFNyKEEsZSl7bGV0IHQ9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxuLG8saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIHY9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgbj10aGlzO2Z1bmN0aW9uIG8oZyxsLEMpe2xldCBJPWVBKGwpO2lmKCFJKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgYT1zLmZpbmRLZXkobixJKTsoIWF8fG5bYV09PT12b2lkIDB8fEM9PT0hMHx8Qz09PXZvaWQgMCYmblthXSE9PSExKSYmKG5bYXx8bF09ZEEoZykpfWxldCBpPShnLGwpPT5zLmZvckVhY2goZywoQyxJKT0+byhDLEksbCkpO3JldHVybiBzLmlzUGxhaW5PYmplY3QoZSl8fGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2koZSx0KTpzLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiF3cihlKT9pKE9lKGUpLHQpOmUhPW51bGwmJm8odCxlLHIpLHRoaXN9Z2V0KGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgbj10aGlzW3JdO2lmKCF0KXJldHVybiBuO2lmKHQ9PT0hMClyZXR1cm4geXIobik7aWYocy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxuLHIpO2lmKHMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhuKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fEtBKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxuPSExO2Z1bmN0aW9uIG8oaSl7aWYoaT1lQShpKSxpKXtsZXQgZz1zLmZpbmRLZXkocixpKTtnJiYoIXR8fEtBKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLG49ITApfX1yZXR1cm4gcy5pc0FycmF5KGUpP2UuZm9yRWFjaChvKTpvKGUpLG59Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxuPSExO2Zvcig7ci0tOyl7bGV0IG89dFtyXTsoIWV8fEtBKHRoaXMsdGhpc1tvXSxvLGUsITApKSYmKGRlbGV0ZSB0aGlzW29dLG49ITApfXJldHVybiBufW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIHMuZm9yRWFjaCh0aGlzLChuLG8pPT57bGV0IGk9cy5maW5kS2V5KHIsbyk7aWYoaSl7dFtpXT1kQShuKSxkZWxldGUgdFtvXTtyZXR1cm59bGV0IGc9ZT9EcihvKTpTdHJpbmcobykudHJpbSgpO2chPT1vJiZkZWxldGUgdFtvXSx0W2ddPWRBKG4pLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKHIsbik9PntyIT1udWxsJiZyIT09ITEmJih0W25dPWUmJnMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG49PnIuc2V0KG4pKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1tQZV09dGhpc1tQZV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxuPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG8oaSl7bGV0IGc9ZUEoaSk7cltnXXx8KFNyKG4saSkscltnXT0hMCl9cmV0dXJuIHMuaXNBcnJheShlKT9lLmZvckVhY2gobyk6byhlKSx0aGlzfX07di5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7cy5yZWR1Y2VEZXNjcmlwdG9ycyh2LnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTtzLmZyZWV6ZU1ldGhvZHModik7dmFyIHc9djtmdW5jdGlvbiB0QShBLGUpe2xldCB0PXRoaXN8fGoscj1lfHx0LG49dy5mcm9tKHIuaGVhZGVycyksbz1yLmRhdGE7cmV0dXJuIHMuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe289Zy5jYWxsKHQsbyxuLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG4ubm9ybWFsaXplKCksb31mdW5jdGlvbiByQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFRlKEEsZSx0KXtwLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLHAuRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1zLmluaGVyaXRzKFRlLHAse19fQ0FOQ0VMX186ITB9KTt2YXIgeD1UZTtmdW5jdGlvbiBXQShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBwKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW3AuRVJSX0JBRF9SRVFVRVNULHAuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIHhlPXkuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLG4sbyl7bGV0IGk9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07cy5pc051bWJlcih0KSYmaS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSkscy5pc1N0cmluZyhyKSYmaS5wdXNoKCJwYXRoPSIrcikscy5pc1N0cmluZyhuKSYmaS5wdXNoKCJkb21haW49IituKSxvPT09ITAmJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIGpBKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gdkEoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIG5BKEEsZSl7cmV0dXJuIEEmJiFqQShlKT92QShBLGUpOmV9dmFyIEplPXkuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG4obyl7bGV0IGk9bztyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSxpPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihpKXtsZXQgZz1zLmlzU3RyaW5nKGkpP24oaSk6aTtyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gX0EoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIGtyKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksbj0wLG89MCxpO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24obCl7bGV0IEM9RGF0ZS5ub3coKSxJPXJbb107aXx8KGk9QyksdFtuXT1sLHJbbl09QztsZXQgYT1vLGM9MDtmb3IoO2EhPT1uOyljKz10W2ErK10sYT1hJUE7aWYobj0obisxKSVBLG49PT1vJiYobz0obysxKSVBKSxDLWk8ZSlyZXR1cm47bGV0IEI9SSYmQy1JO3JldHVybiBCP01hdGgucm91bmQoYyoxZTMvQik6dm9pZCAwfX12YXIgSGU9a3I7ZnVuY3Rpb24gTWUoQSxlKXtsZXQgdD0wLHI9SGUoNTAsMjUwKTtyZXR1cm4gbj0+e2xldCBvPW4ubG9hZGVkLGk9bi5sZW5ndGhDb21wdXRhYmxlP24udG90YWw6dm9pZCAwLGc9by10LGw9cihnKSxDPW88PWk7dD1vO2xldCBJPXtsb2FkZWQ6byx0b3RhbDppLHByb2dyZXNzOmk/by9pOnZvaWQgMCxieXRlczpnLHJhdGU6bHx8dm9pZCAwLGVzdGltYXRlZDpsJiZpJiZDPyhpLW8pL2w6dm9pZCAwLGV2ZW50Om59O0lbZT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKEkpfX12YXIgUnI9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixZZT1SciYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG49QS5kYXRhLG89dy5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTppLHdpdGhYU1JGVG9rZW46Z309QSxsO2Z1bmN0aW9uIEMoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbCl9bGV0IEk7aWYocy5pc0Zvcm1EYXRhKG4pKXtpZih5Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8eS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpby5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoST1vLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtRLC4uLmZdPUk/SS5zcGxpdCgiOyIpLm1hcChkPT5kLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO28uc2V0Q29udGVudFR5cGUoW1F8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5mXS5qb2luKCI7ICIpKX19bGV0IGE9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IFE9QS5hdXRoLnVzZXJuYW1lfHwiIixmPUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7by5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoUSsiOiIrZikpfWxldCBjPW5BKEEuYmFzZVVSTCxBLnVybCk7YS5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksQUEoYyxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxhLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIEIoKXtpZighYSlyZXR1cm47bGV0IFE9dy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYSYmYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksZD17ZGF0YTohaXx8aT09PSJ0ZXh0Inx8aT09PSJqc29uIj9hLnJlc3BvbnNlVGV4dDphLnJlc3BvbnNlLHN0YXR1czphLnN0YXR1cyxzdGF0dXNUZXh0OmEuc3RhdHVzVGV4dCxoZWFkZXJzOlEsY29uZmlnOkEscmVxdWVzdDphfTtXQShmdW5jdGlvbihVKXt0KFUpLEMoKX0sZnVuY3Rpb24oVSl7cihVKSxDKCl9LGQpLGE9bnVsbH1pZigib25sb2FkZW5kImluIGE/YS5vbmxvYWRlbmQ9QjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFhfHxhLnJlYWR5U3RhdGUhPT00fHxhLnN0YXR1cz09PTAmJiEoYS5yZXNwb25zZVVSTCYmYS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoQil9LGEub25hYm9ydD1mdW5jdGlvbigpe2EmJihyKG5ldyBwKCJSZXF1ZXN0IGFib3J0ZWQiLHAuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbCl9LGEub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IHAoIk5ldHdvcmsgRXJyb3IiLHAuRVJSX05FVFdPUkssQSxhKSksYT1udWxsfSxhLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBmPUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixkPUEudHJhbnNpdGlvbmFsfHxmQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihmPUEudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgcChmLGQuY2xhcmlmeVRpbWVvdXRFcnJvcj9wLkVUSU1FRE9VVDpwLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGx9LHkuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoZyYmcy5pc0Z1bmN0aW9uKGcpJiYoZz1nKEEpKSxnfHxnIT09ITEmJkplKGMpKSl7bGV0IFE9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmeGUucmVhZChBLnhzcmZDb29raWVOYW1lKTtRJiZvLnNldChBLnhzcmZIZWFkZXJOYW1lLFEpfW49PT12b2lkIDAmJm8uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYSYmcy5mb3JFYWNoKG8udG9KU09OKCksZnVuY3Rpb24oZixkKXthLnNldFJlcXVlc3RIZWFkZXIoZCxmKX0pLHMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoYS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksaSYmaSE9PSJqc29uIiYmKGEucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLE1lKEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS51cGxvYWQmJmEudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixNZShBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYobD1RPT57YSYmKHIoIVF8fFEudHlwZT9uZXcgeChudWxsLEEsYSk6USksYS5hYm9ydCgpLGE9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9sKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpKSk7bGV0IEU9X0EoYyk7aWYoRSYmeS5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtyKG5ldyBwKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLHAuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59YS5zZW5kKG58fG51bGwpfSl9O3ZhciB6QT17aHR0cDpRQSx4aHI6WWV9O3MuZm9yRWFjaCh6QSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBxZT1BPT5gLSAke0F9YCxicj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbUE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsbj17fTtmb3IobGV0IG89MDtvPGU7bysrKXt0PUFbb107bGV0IGk7aWYocj10LCFicih0KSYmKHI9ekFbKGk9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgcChgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHIpYnJlYWs7bltpfHwiIyIrb109cn1pZighcil7bGV0IG89T2JqZWN0LmVudHJpZXMobikubWFwKChbZyxsXSk9PmBhZGFwdGVyICR7Z30gYCsobD09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9vLmxlbmd0aD4xP2BzaW5jZSA6CmArby5tYXAocWUpLmpvaW4oYApgKToiICIrcWUob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgcCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczp6QX07ZnVuY3Rpb24gVkEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHgobnVsbCxBKX1mdW5jdGlvbiBoQShBKXtyZXR1cm4gVkEoQSksQS5oZWFkZXJzPXcuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fGouYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gVkEoQSksci5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz13LmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gckEocil8fChWQShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz13LmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIEtlPUE9PkEgaW5zdGFuY2VvZiB3P3suLi5BfTpBO2Z1bmN0aW9uIFAoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoQyxJLGEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQykmJnMuaXNQbGFpbk9iamVjdChJKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOmF9LEMsSSk6cy5pc1BsYWluT2JqZWN0KEkpP3MubWVyZ2Uoe30sSSk6cy5pc0FycmF5KEkpP0kuc2xpY2UoKTpJfWZ1bmN0aW9uIG4oQyxJLGEpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDLGEpfWVsc2UgcmV0dXJuIHIoQyxJLGEpfWZ1bmN0aW9uIG8oQyxJKXtpZighcy5pc1VuZGVmaW5lZChJKSlyZXR1cm4gcih2b2lkIDAsSSl9ZnVuY3Rpb24gaShDLEkpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDKX1lbHNlIHJldHVybiByKHZvaWQgMCxJKX1mdW5jdGlvbiBnKEMsSSxhKXtpZihhIGluIGUpcmV0dXJuIHIoQyxJKTtpZihhIGluIEEpcmV0dXJuIHIodm9pZCAwLEMpfWxldCBsPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooQyxJKT0+bihLZShDKSxLZShJKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihJKXtsZXQgYT1sW0ldfHxuLGM9YShBW0ldLGVbSV0sSSk7cy5pc1VuZGVmaW5lZChjKSYmYSE9PWd8fCh0W0ldPWMpfSksdH12YXIgeUE9IjEuNi44Ijt2YXIgWkE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57WkFbQV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIFdlPXt9O1pBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihvLGkpe3JldHVybiJbQXhpb3MgdiIreUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitpKyhyPyIuICIrcjoiIil9cmV0dXJuKG8saSxnKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgcChuKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLHAuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhV2VbaV0mJihXZVtpXT0hMCxjb25zb2xlLndhcm4obihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLGksZyk6ITB9fTtmdW5jdGlvbiBGcihBLGUsdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBwKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixwLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhBKSxuPXIubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IG89cltuXSxpPWVbb107aWYoaSl7bGV0IGc9QVtvXSxsPWc9PT12b2lkIDB8fGkoZyxvLEEpO2lmKGwhPT0hMCl0aHJvdyBuZXcgcCgib3B0aW9uICIrbysiIG11c3QgYmUgIitsLHAuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgcCgiVW5rbm93biBvcHRpb24gIitvLHAuRVJSX0JBRF9PUFRJT04pfX12YXIgd0E9e2Fzc2VydE9wdGlvbnM6RnIsdmFsaWRhdG9yczpaQX07dmFyIEo9d0EudmFsaWRhdG9ycyxfPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgSEEscmVzcG9uc2U6bmV3IEhBfX1hc3luYyByZXF1ZXN0KGUsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgbz1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP28mJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmArbyk6ci5zdGFjaz1vfXRocm93IHJ9fV9yZXF1ZXN0KGUsdCl7dHlwZW9mIGU9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPWUpOnQ9ZXx8e30sdD1QKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOm99PXQ7ciE9PXZvaWQgMCYmd0EuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkoudHJhbnNpdGlvbmFsKEouYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKHMuaXNGdW5jdGlvbihuKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTp3QS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpKLmZ1bmN0aW9uLHNlcmlhbGl6ZTpKLmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPW8mJnMubWVyZ2Uoby5jb21tb24sb1t0Lm1ldGhvZF0pO28mJnMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIG9bRV19KSx0LmhlYWRlcnM9dy5jb25jYXQoaSxvKTtsZXQgZz1bXSxsPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihRKXt0eXBlb2YgUS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZRLnJ1bldoZW4odCk9PT0hMXx8KGw9bCYmUS5zeW5jaHJvbm91cyxnLnVuc2hpZnQoUS5mdWxmaWxsZWQsUS5yZWplY3RlZCkpfSk7bGV0IEM9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihRKXtDLnB1c2goUS5mdWxmaWxsZWQsUS5yZWplY3RlZCl9KTtsZXQgSSxhPTAsYztpZighbCl7bGV0IEU9W2hBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsZyksRS5wdXNoLmFwcGx5KEUsQyksYz1FLmxlbmd0aCxJPVByb21pc2UucmVzb2x2ZSh0KTthPGM7KUk9SS50aGVuKEVbYSsrXSxFW2ErK10pO3JldHVybiBJfWM9Zy5sZW5ndGg7bGV0IEI9dDtmb3IoYT0wO2E8Yzspe2xldCBFPWdbYSsrXSxRPWdbYSsrXTt0cnl7Qj1FKEIpfWNhdGNoKGYpe1EuY2FsbCh0aGlzLGYpO2JyZWFrfX10cnl7ST1oQS5jYWxsKHRoaXMsQil9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihhPTAsYz1DLmxlbmd0aDthPGM7KUk9SS50aGVuKENbYSsrXSxDW2ErK10pO3JldHVybiBJfWdldFVyaShlKXtlPVAodGhpcy5kZWZhdWx0cyxlKTtsZXQgdD1uQShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBBQSh0LGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe18ucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChQKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtzLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihvLGksZyl7cmV0dXJuIHRoaXMucmVxdWVzdChQKGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm8sZGF0YTppfSkpfX1fLnByb3RvdHlwZVtlXT10KCksXy5wcm90b3R5cGVbZSsiRm9ybSJdPXQoITApfSk7dmFyIG9BPV87dmFyIFhBPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihvKXt0PW99KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG49PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgbz1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7by0tID4wOylyLl9saXN0ZW5lcnNbb10obik7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1uPT57bGV0IG8saT1uZXcgUHJvbWlzZShnPT57ci5zdWJzY3JpYmUoZyksbz1nfSkudGhlbihuKTtyZXR1cm4gaS5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKG8pfSxpfSxlKGZ1bmN0aW9uKG8saSxnKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyB4KG8saSxnKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihuKXtlPW59KSxjYW5jZWw6ZX19fSxqZT1YQTtmdW5jdGlvbiAkQShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gQWUoQSl7cmV0dXJuIHMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIGVlPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhlZSkuZm9yRWFjaCgoW0EsZV0pPT57ZWVbZV09QX0pO3ZhciB2ZT1lZTtmdW5jdGlvbiBfZShBKXtsZXQgZT1uZXcgb0EoQSksdD1aKG9BLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiBzLmV4dGVuZCh0LG9BLnByb3RvdHlwZSxlLHthbGxPd25LZXlzOiEwfSkscy5leHRlbmQodCxlLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gX2UoUChBLG4pKX0sdH12YXIgbT1fZShqKTttLkF4aW9zPW9BO20uQ2FuY2VsZWRFcnJvcj14O20uQ2FuY2VsVG9rZW49amU7bS5pc0NhbmNlbD1yQTttLlZFUlNJT049eUE7bS50b0Zvcm1EYXRhPVQ7bS5BeGlvc0Vycm9yPXA7bS5DYW5jZWw9bS5DYW5jZWxlZEVycm9yO20uYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX07bS5zcHJlYWQ9JEE7bS5pc0F4aW9zRXJyb3I9QWU7bS5tZXJnZUNvbmZpZz1QO20uQXhpb3NIZWFkZXJzPXc7bS5mb3JtVG9KU09OPUE9PnBBKHMuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7bS5nZXRBZGFwdGVyPW1BLmdldEFkYXB0ZXI7bS5IdHRwU3RhdHVzQ29kZT12ZTttLmRlZmF1bHQ9bTt2YXIgej1tO3ZhcntBeGlvczpaaSxBeGlvc0Vycm9yOlhpLENhbmNlbGVkRXJyb3I6JGksaXNDYW5jZWw6QWEsQ2FuY2VsVG9rZW46ZWEsVkVSU0lPTjp0YSxhbGw6cmEsQ2FuY2VsOm5hLGlzQXhpb3NFcnJvcjpvYSxzcHJlYWQ6aWEsdG9Gb3JtRGF0YTphYSxBeGlvc0hlYWRlcnM6c2EsSHR0cFN0YXR1c0NvZGU6SWEsZm9ybVRvSlNPTjpnYSxnZXRBZGFwdGVyOkJhLG1lcmdlQ29uZmlnOkNhfT16O2FzeW5jIGZ1bmN0aW9uIFVyKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgbj1hd2FpdCB6LmdldCh0LHtyZXNwb25zZVR5cGU6ImJsb2IiLHBhcmFtczplfSksbz1VUkwuY3JlYXRlT2JqZWN0VVJMKG4uZGF0YSk7cj1uZXcgV29ya2VyKG8se3R5cGU6Im1vZHVsZSJ9KX1lbHNlIHI9bmV3IFdvcmtlcih0LHt0eXBlOiJtb2R1bGUifSk7cmV0dXJuIHJ9dmFyIGlBPVVyO2Z1bmN0aW9uIHplKEEpe2xldCBlPUdBKEEpLHQ9QTtyZXR1cm4gdC50ZXJtaW5hdGVkPSExLHQud29ya2VyUHJveHk9ZSx0Lm9yaWdpbmFsVGVybWluYXRlPXQudGVybWluYXRlLHQudGVybWluYXRlPSgpPT57dC50ZXJtaW5hdGVkPSEwLHQud29ya2VyUHJveHlbTkFdKCksdC5vcmlnaW5hbFRlcm1pbmF0ZSgpfSx7d29ya2VyUHJveHk6ZSx3b3JrZXI6dH19YXN5bmMgZnVuY3Rpb24gTnIoQSxlLHQpe2xldCByO2lmKEEhPW51bGwpe2xldCBvPUE7cmV0dXJuIG8ud29ya2VyUHJveHkhPT12b2lkIDA/KHI9by53b3JrZXJQcm94eSx7d29ya2VyUHJveHk6cix3b3JrZXI6b30pOnplKEEpfWxldCBuPWF3YWl0IGlBKGUsdCk7cmV0dXJuIHplKG4pfXZhciBWZT1Ocjthc3luYyBmdW5jdGlvbiBHcihBLGUsdCl7bGV0IHI9InVua25vd24iO3R5cGVvZiBBIT0ic3RyaW5nIj9yPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9yPUE6cj10eXBlb2YgZTwidSI/YCR7ZX0vJHtBfWA6QSxyLmVuZHNXaXRoKCIuanMiKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC0zKSksci5lbmRzV2l0aCgiLndhc20iKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC01KSk7bGV0IG49YCR7cn0ud2FzbWAsaT0oYXdhaXQgei5nZXQobix7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KSkuZGF0YTtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke3J9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6aX0pfXZhciBaZT1Hcjt2YXIgWGU9YXN5bmMoKT0+V2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNSwxLDk2LDAsMSwxMjMsMywyLDEsMCwxMCwxMCwxLDgsMCw2NSwwLDI1MywxNSwyNTMsOTgsMTFdKSk7dmFyIGV0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLCRlPW5ldyBUZXh0RW5jb2RlcixBdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gTHIoQSxlKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxyPUEuZnNfb3BlbihlLHQuZmxhZ3MpLG89QS5mc19zdGF0KGUpLnNpemUsaT1udWxsO2V0P2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKG8pOmk9bmV3IEFycmF5QnVmZmVyKG8pO2xldCBnPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBBLmZzX3JlYWQocixnLDAsbywwKSxBLmZzX2Nsb3NlKHIpLGd9ZnVuY3Rpb24gdHQoQSxlLHQpe2xldCByPW51bGw7ZXQ/cj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6cj1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IG49bmV3IFVpbnQ4QXJyYXkociksbz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZSx0KTtyZXR1cm4gbi5zZXQobyksbn1mdW5jdGlvbiBoKEEsZSx0LHIpe2xldCBuPTA7cmV0dXJuIGUhPT1udWxsJiYobj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LHIsZS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShlLmJ1ZmZlciksbikpLG59ZnVuY3Rpb24gTShBLGUsdCl7bGV0IHI9SlNPTi5zdHJpbmdpZnkoZSksbj1BLmxlbmd0aEJ5dGVzVVRGOChyKSsxLG89QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LG5dKTtBLnN0cmluZ1RvVVRGOChyLG8sbil9ZnVuY3Rpb24gRChBLGUsdCxyKXtsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxvPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLGk9dHQoQSxuLG8pO3JldHVybiBOKHIsaS5idWZmZXIpfWZ1bmN0aW9uIERBKEEsZSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxlXSkscj1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShyKX1mdW5jdGlvbiBPcihBLGUsdCxyKXtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oQyxJKXtzd2l0Y2goQy50eXBlKXtjYXNlIHUuVGV4dFN0cmVhbTp7bGV0IGE9JGUuZW5jb2RlKEMuZGF0YS5kYXRhKSxjPWgoQSxhLEksMCksQj17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O00oQSxCLEkpO2JyZWFrfWNhc2UgdS5Kc29uQ29tcGF0aWJsZTp7bGV0IGE9JGUuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEMuZGF0YSkpLGM9aChBLGEsSSwwKSxCPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07TShBLEIsSSk7YnJlYWt9Y2FzZSB1LkJpbmFyeVN0cmVhbTp7bGV0IGE9Qy5kYXRhLmRhdGEsYz1oKEEsYSxJLDApLEI9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsQixJKTticmVha31jYXNlIHUuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKEMuZGF0YS5wYXRoLEMuZGF0YS5kYXRhKTticmVha31jYXNlIHUuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoQy5kYXRhLnBhdGgsQy5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgdS5JbWFnZTp7bGV0IGE9Qy5kYXRhLGM9aChBLGEuZGF0YSxJLDApLEI9aChBLGEuZGlyZWN0aW9uLEksMSksRT10eXBlb2YgYS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShhLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sUT17aW1hZ2VUeXBlOmEuaW1hZ2VUeXBlLG5hbWU6YS5uYW1lLG9yaWdpbjphLm9yaWdpbixzcGFjaW5nOmEuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsc2l6ZTphLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxtZXRhZGF0YTpFfTtNKEEsUSxJKTticmVha31jYXNlIHUuTWVzaDp7bGV0IGE9Qy5kYXRhLGM9aChBLGEucG9pbnRzLEksMCksQj1oKEEsYS5jZWxscyxJLDEpLEU9aChBLGEucG9pbnREYXRhLEksMiksUT1oKEEsYS5jZWxsRGF0YSxJLDMpLGY9e21lc2hUeXBlOmEubWVzaFR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsbnVtYmVyT2ZDZWxsczphLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsY2VsbEJ1ZmZlclNpemU6YS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTtNKEEsZixJKTticmVha31jYXNlIHUuUG9pbnRTZXQ6e2xldCBhPUMuZGF0YSxjPWgoQSxhLnBvaW50cyxJLDApLEI9aChBLGEucG9pbnREYXRhLEksMSksRT17cG9pbnRTZXRUeXBlOmEucG9pbnRTZXRUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07TShBLEUsSSk7YnJlYWt9Y2FzZSB1LlBvbHlEYXRhOntsZXQgYT1DLmRhdGEsYz1oKEEsYS5wb2ludHMsSSwwKSxCPWgoQSxhLnZlcnRpY2VzLEksMSksRT1oKEEsYS5saW5lcyxJLDIpLFE9aChBLGEucG9seWdvbnMsSSwzKSxmPWgoQSxhLnRyaWFuZ2xlU3RyaXBzLEksNCksZD1oKEEsYS5wb2ludERhdGEsSSw1KSxGPWgoQSxhLnBvaW50RGF0YSxJLDYpLFU9e3BvbHlEYXRhVHlwZTphLnBvbHlEYXRhVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6YS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbGluZXNCdWZmZXJTaXplOmEubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTphLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6YS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0Z9YH07TShBLFUsSSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG49QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKEMpe3Rocm93IHR5cGVvZiBDPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKEMpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLEN9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShuKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLGc9QS5nZXRNb2R1bGVTdGRlcnIoKSxsPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZvPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKEMsSSl7bGV0IGE9bnVsbDtzd2l0Y2goQy50eXBlKXtjYXNlIHUuVGV4dFN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxRPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO2E9e2RhdGE6QXQuZGVjb2RlKFEpfTticmVha31jYXNlIHUuSnNvbkNvbXBhdGlibGU6e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksUT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTthPUpTT04ucGFyc2UoQXQuZGVjb2RlKFEpKTticmVha31jYXNlIHUuQmluYXJ5U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pO2E9e2RhdGE6dHQoQSxCLEUpfTticmVha31jYXNlIHUuVGV4dEZpbGU6e2E9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKEMuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSB1LkJpbmFyeUZpbGU6e2E9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpMcihBLEMuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSB1LkltYWdlOntsZXQgQj1EQShBLEkpO0IuZGF0YT1EKEEsSSwwLEIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEIuZGlyZWN0aW9uPUQoQSxJLDEsWS5GbG9hdDY0KSxCLm1ldGFkYXRhPW5ldyBNYXAoQi5tZXRhZGF0YSksYT1CO2JyZWFrfWNhc2UgdS5NZXNoOntsZXQgQj1EQShBLEkpO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1EKEEsSSwwLEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1OKEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxzPjA/Qi5jZWxscz1EKEEsSSwxLEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkIuY2VsbHM9TihCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RChBLEksMixCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1OKEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RChBLEksMyxCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9TihCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPUI7YnJlYWt9Y2FzZSB1LlBvaW50U2V0OntsZXQgQj1EQShBLEkpO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1EKEEsSSwwLEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9TihCLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1EKEEsSSwxLEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1OKEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1CO2JyZWFrfWNhc2UgdS5Qb2x5RGF0YTp7bGV0IEI9REEoQSxJKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RChBLEksMCxZLkZsb2F0MzIpOkIucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9CLnZlcnRpY2VzPUQoQSxJLDEsUy5VSW50MzIpOkIudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEIubGluZXNCdWZmZXJTaXplPjA/Qi5saW5lcz1EKEEsSSwyLFMuVUludDMyKTpCLmxpbmVzPW5ldyBVaW50MzJBcnJheSxCLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0IucG9seWdvbnM9RChBLEksMyxTLlVJbnQzMik6Qi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9CLnRyaWFuZ2xlU3RyaXBzPUQoQSxJLDQsUy5VSW50MzIpOkIudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUQoQSxJLDUsQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPU4oQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RChBLEksNixCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPU4oQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9QjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBjPXt0eXBlOkMudHlwZSxkYXRhOmF9O2wucHVzaChjKX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDppLHN0ZGVycjpnLG91dHB1dHM6bH19dmFyIHJ0PU9yO3ZhciBQcj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gVHIoQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8QS5sZW5ndGg7cisrKXtsZXQgbj14cihBW3JdLGUpO24hPT1udWxsJiZ0LnB1c2gobil9cmV0dXJuIHR9ZnVuY3Rpb24geHIoQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSxQciYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT90OnQuc2xpY2UoMCl9dmFyIG50PVRyO2Z1bmN0aW9uIEpyKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBvdD1KcjtmdW5jdGlvbiBIcihBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgaXQ9SHI7ZnVuY3Rpb24gTXIoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIGF0PU1yO3ZhciBZcjtmdW5jdGlvbiBTQSgpe3JldHVybiBZcn12YXIgcXI7ZnVuY3Rpb24gc3QoKXtyZXR1cm4gcXJ9dmFyIEtyO2Z1bmN0aW9uIGtBKCl7cmV0dXJuIEtyfXZhciB0ZT1uZXcgTWFwO2Z1bmN0aW9uIFdyKCl7bGV0IEE9a0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIEl0KCl7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gUkEoKXtsZXQgQT1zdCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIGpyKEEsZSx0KXtsZXQgcj1BLG49QTtpZih0eXBlb2YgQSE9InN0cmluZyImJihyPW5ldyBVUkwoQS5ocmVmKSxuPXIuaHJlZiksdGUuaGFzKG4pKXJldHVybiB0ZS5nZXQobik7e2xldCBvPWF3YWl0IFplKEEsZT8udG9TdHJpbmcoKT8/SXQoKSx0Pz9SQSgpKTtyZXR1cm4gdGUuc2V0KG4sbyksb319YXN5bmMgZnVuY3Rpb24gdnIoQSxlLHQscixuKXtpZighYXdhaXQgWGUoKSl7bGV0IGY9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KGYpLG5ldyBFcnJvcihmKX1sZXQgbz1uPy53ZWJXb3JrZXI/P251bGw7aWYobz09PSExKXtsZXQgZj1hd2FpdCBqcihBLnRvU3RyaW5nKCksbj8ucGlwZWxpbmVCYXNlVXJsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1JBKCkpO3JldHVybiBydChmLGUsdCxyKX1sZXQgaT1vLGc9bj8ucGlwZWxpbmVXb3JrZXJVcmw/P1dyKCksbD10eXBlb2YgZyE9InN0cmluZyImJnR5cGVvZiBnPy5ocmVmPCJ1Ij9nLmhyZWY6Zyx7d29ya2VyUHJveHk6Qyx3b3JrZXI6SX09YXdhaXQgVmUoaSxsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1JBKCkpO2k9STtsZXQgYT1bXTtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oZil7aWYoZi50eXBlPT09dS5CaW5hcnlTdHJlYW0pe2xldCBkPWYuZGF0YS5kYXRhO2EucHVzaChkKX1lbHNlIGlmKGYudHlwZT09PXUuQmluYXJ5RmlsZSl7bGV0IGQ9Zi5kYXRhLmRhdGE7YS5wdXNoKGQpfWVsc2UgaWYoZi50eXBlPT09dS5JbWFnZSl7bGV0IGQ9Zi5kYXRhO2QuZGF0YSE9PW51bGwmJmEucHVzaCguLi5vdChkKSl9ZWxzZSBpZihmLnR5cGU9PT11Lk1lc2gpe2xldCBkPWYuZGF0YTthLnB1c2goLi4uaXQoZCkpfWVsc2UgaWYoZi50eXBlPT09dS5Qb2x5RGF0YSl7bGV0IGQ9Zi5kYXRhO2EucHVzaCguLi5hdChkKSl9fSk7bGV0IGM9bj8ucGlwZWxpbmVCYXNlVXJsPz9JdCgpLEI9dHlwZW9mIGMhPSJzdHJpbmciJiZ0eXBlb2YgYz8uaHJlZjwidSI/Yy5ocmVmOmMsRT1yIT1udWxsP0xBKHIsbnQoYSxuPy5ub0NvcHkpKTpudWxsLFE9YXdhaXQgQy5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCksQixlLHQsRSxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9SQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6US5yZXR1cm5WYWx1ZSxzdGRvdXQ6US5zdGRvdXQsc3RkZXJyOlEuc3RkZXJyLG91dHB1dHM6US5vdXRwdXRzLHdlYldvcmtlcjppfX12YXIgYj12cjt2YXIgX3I9bnVsbDtmdW5jdGlvbiBndCgpe3JldHVybiBfcn12YXIgcmUsenI9YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGl0ay13YXNtL2Rvd25zYW1wbGVAJHtiQX0vZGlzdC9waXBlbGluZXNgO2Z1bmN0aW9uIHRzKEEpe3JlPUF9ZnVuY3Rpb24gTCgpe2lmKHR5cGVvZiByZTwidSIpcmV0dXJuIHJlO2xldCBBPVNBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOnpyfXZhciBuZSxWcj1udWxsO2Z1bmN0aW9uIEJ0KEEpe25lPUF9ZnVuY3Rpb24gUigpe2lmKHR5cGVvZiBuZTwidSIpcmV0dXJuIG5lO2xldCBBPWtBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOlZyfXZhciBWPW51bGw7YXN5bmMgZnVuY3Rpb24gQ3QoKXtsZXQgQT1SKCksZT10eXBlb2YgQSE9InN0cmluZyImJnR5cGVvZiBBPy5ocmVmPCJ1Ij9BLmhyZWY6QTtWPWF3YWl0IGlBKGUpfWZ1bmN0aW9uIElzKEEpe1Y9QX1hc3luYyBmdW5jdGlvbiBPKCl7aWYoViE9PW51bGwpcmV0dXJuIFYudGVybWluYXRlZCYmYXdhaXQgQ3QoKSxWO2xldCBBPWd0KCk7cmV0dXJuIEEhPT1udWxsP0E6KGF3YWl0IEN0KCksVil9YXN5bmMgZnVuY3Rpb24gWnIoQSxlPXtzaHJpbmtGYWN0b3JzOlsyLDJdfSl7bGV0IHQ9W3t0eXBlOnUuSW1hZ2V9XSxyPVt7dHlwZTp1LkltYWdlLGRhdGE6QX1dLG49W107aWYobi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUuc2hyaW5rRmFjdG9ycyl7aWYoZS5zaHJpbmtGYWN0b3JzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignInNocmluay1mYWN0b3JzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1zaHJpbmstZmFjdG9ycyIpLGF3YWl0IFByb21pc2UuYWxsKGUuc2hyaW5rRmFjdG9ycy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmbi5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgZz0iZG93bnNhbXBsZS1iaW4tc2hyaW5rIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBPKCkpO2xldHt3ZWJXb3JrZXI6QyxyZXR1cm5WYWx1ZTpJLHN0ZGVycjphLG91dHB1dHM6Y309YXdhaXQgYihnLG4sdCxyLHtwaXBlbGluZUJhc2VVcmw6TCgpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoSSE9PTAmJmEhPT0iIil0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpDLGRvd25zYW1wbGVkOmNbMF0/LmRhdGF9fXZhciBYcj1acjthc3luYyBmdW5jdGlvbiAkcihBLGU9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgdD1be3R5cGU6dS5JbWFnZX1dLHI9W3t0eXBlOnUuSW1hZ2UsZGF0YTpBfV0sbj1bXTtpZihuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5zaHJpbmtGYWN0b3JzKXtpZihlLnNocmlua0ZhY3RvcnMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCcic2hyaW5rLWZhY3RvcnMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLXNocmluay1mYWN0b3JzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5zaHJpbmtGYWN0b3JzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9aWYoZS5jcm9wUmFkaXVzKXtpZihlLmNyb3BSYWRpdXMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCciY3JvcC1yYWRpdXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLWNyb3AtcmFkaXVzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5jcm9wUmFkaXVzLm1hcChhc3luYyBFPT57bi5wdXNoKEUudG9TdHJpbmcoKSl9KSl9bGV0IGc9ImRvd25zYW1wbGUtbGFiZWwtaW1hZ2UiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IE8oKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOkksc3RkZXJyOmEsb3V0cHV0czpjfT1hd2FpdCBiKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpMKCkscGlwZWxpbmVXb3JrZXJVcmw6UigpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihJIT09MCYmYSE9PSIiKXRocm93IG5ldyBFcnJvcihhKTtyZXR1cm57d2ViV29ya2VyOkMsZG93bnNhbXBsZWQ6Y1swXT8uZGF0YX19dmFyIEFuPSRyO2FzeW5jIGZ1bmN0aW9uIGVuKEE9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgZT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX1dLHQ9W10scj1bXTtpZihyLnB1c2goIjAiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdHlwZW9mIEEuc2hyaW5rRmFjdG9yczwidSIpe2lmKEEuc2hyaW5rRmFjdG9ycy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzaHJpbmstZmFjdG9ycyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtyLnB1c2goIi0tc2hyaW5rLWZhY3RvcnMiKSxhd2FpdCBQcm9taXNlLmFsbChBLnNocmlua0ZhY3RvcnMubWFwKGFzeW5jIGM9PntyLnB1c2goYy50b1N0cmluZygpKX0pKX1sZXQgbz0iZG93bnNhbXBsZS1zaWdtYSIsaT1BPy53ZWJXb3JrZXI7aT09PXZvaWQgMCYmKGk9YXdhaXQgTygpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6bCxzdGRlcnI6QyxvdXRwdXRzOkl9PWF3YWl0IGIobyxyLGUsdCx7cGlwZWxpbmVCYXNlVXJsOkwoKSxwaXBlbGluZVdvcmtlclVybDpSKCksd2ViV29ya2VyOmksbm9Db3B5OkE/Lm5vQ29weX0pO2lmKGwhPT0wJiZDIT09IiIpdGhyb3cgbmV3IEVycm9yKEMpO3JldHVybnt3ZWJXb3JrZXI6ZyxzaWdtYTpJWzBdPy5kYXRhfX12YXIgdG49ZW47YXN5bmMgZnVuY3Rpb24gcm4oQSxlPXtzaHJpbmtGYWN0b3JzOlsyLDJdfSl7bGV0IHQ9W3t0eXBlOnUuSW1hZ2V9XSxyPVt7dHlwZTp1LkltYWdlLGRhdGE6QX1dLG49W107aWYobi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUuc2hyaW5rRmFjdG9ycyl7aWYoZS5zaHJpbmtGYWN0b3JzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignInNocmluay1mYWN0b3JzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1zaHJpbmstZmFjdG9ycyIpLGF3YWl0IFByb21pc2UuYWxsKGUuc2hyaW5rRmFjdG9ycy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWlmKGUuY3JvcFJhZGl1cyl7aWYoZS5jcm9wUmFkaXVzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignImNyb3AtcmFkaXVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1jcm9wLXJhZGl1cyIpLGF3YWl0IFByb21pc2UuYWxsKGUuY3JvcFJhZGl1cy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWxldCBnPSJkb3duc2FtcGxlIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBPKCkpO2xldHt3ZWJXb3JrZXI6QyxyZXR1cm5WYWx1ZTpJLHN0ZGVycjphLG91dHB1dHM6Y309YXdhaXQgYihnLG4sdCxyLHtwaXBlbGluZUJhc2VVcmw6TCgpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoSSE9PTAmJmEhPT0iIil0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpDLGRvd25zYW1wbGVkOmNbMF0/LmRhdGF9fXZhciBubj1ybjthc3luYyBmdW5jdGlvbiBvbihBPXtzaXplOlsxLDFdLHNpZ21hOlsxLDFdfSl7bGV0IGU9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9XSx0PVtdLHI9W107aWYoci5wdXNoKCIwIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLHR5cGVvZiBBLnNpemU8InUiKXtpZihBLnNpemUubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcic2l6ZSIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtyLnB1c2goIi0tc2l6ZSIpLGF3YWl0IFByb21pc2UuYWxsKEEuc2l6ZS5tYXAoYXN5bmMgYz0+e3IucHVzaChjLnRvU3RyaW5nKCkpfSkpfWlmKHR5cGVvZiBBLnNpZ21hPCJ1Iil7aWYoQS5zaWdtYS5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzaWdtYSIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtyLnB1c2goIi0tc2lnbWEiKSxhd2FpdCBQcm9taXNlLmFsbChBLnNpZ21hLm1hcChhc3luYyBjPT57ci5wdXNoKGMudG9TdHJpbmcoKSl9KSl9dHlwZW9mIEEubWF4S2VybmVsV2lkdGg8InUiJiZyLnB1c2goIi0tbWF4LWtlcm5lbC13aWR0aCIsQS5tYXhLZXJuZWxXaWR0aC50b1N0cmluZygpKSx0eXBlb2YgQS5tYXhLZXJuZWxFcnJvcjwidSImJnIucHVzaCgiLS1tYXgta2VybmVsLWVycm9yIixBLm1heEtlcm5lbEVycm9yLnRvU3RyaW5nKCkpO2xldCBvPSJnYXVzc2lhbi1rZXJuZWwtcmFkaXVzIixpPUE/LndlYldvcmtlcjtpPT09dm9pZCAwJiYoaT1hd2FpdCBPKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTpsLHN0ZGVycjpDLG91dHB1dHM6SX09YXdhaXQgYihvLHIsZSx0LHtwaXBlbGluZUJhc2VVcmw6TCgpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6aSxub0NvcHk6QT8ubm9Db3B5fSk7aWYobCE9PTAmJkMhPT0iIil0aHJvdyBuZXcgRXJyb3IoQyk7cmV0dXJue3dlYldvcmtlcjpnLHJhZGl1czpJWzBdPy5kYXRhfX12YXIgYW49b247dmFyIGx0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciBJST1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGVJPShBLHQpPT57Zm9yKHZhciBJIGluIHQpSUkoQSxJLHtnZXQ6dFtJXSxlbnVtZXJhYmxlOiEwfSl9O3ZhciB2QT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxnST1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxyST1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IikscEE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGVBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSwkQT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixvST17Y2FuSGFuZGxlOkE9PiRBKEEpJiZBW3ZBXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOnQscG9ydDI6SX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBpQShBLHQpLFtJLFtJXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksbkkoQSl9fSxpST17Y2FuSGFuZGxlOkE9PiRBKEEpJiZlQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCB0O3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/dD17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OnQ9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW3QsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sQXQ9bmV3IE1hcChbWyJwcm94eSIsb0ldLFsidGhyb3ciLGlJXV0pO2Z1bmN0aW9uIENJKEEsdCl7Zm9yKGxldCBJIG9mIEEpaWYodD09PUl8fEk9PT0iKiJ8fEkgaW5zdGFuY2VvZiBSZWdFeHAmJkkudGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpQShBLHQ9Z2xvYmFsVGhpcyxJPVsiKiJdKXt0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGUoZyl7aWYoIWd8fCFnLmRhdGEpcmV0dXJuO2lmKCFDSShJLGcub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7Zy5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOnIsdHlwZTpvLHBhdGg6bn09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sZy5kYXRhKSxhPShnLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKGIpLFE7dHJ5e2xldCBCPW4uc2xpY2UoMCwtMSkucmVkdWNlKChmLHMpPT5mW3NdLEEpLGk9bi5yZWR1Y2UoKGYscyk9PmZbc10sQSk7c3dpdGNoKG8pe2Nhc2UiR0VUIjpRPWk7YnJlYWs7Y2FzZSJTRVQiOkJbbi5zbGljZSgtMSlbMF1dPWIoZy5kYXRhLnZhbHVlKSxRPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOlE9aS5hcHBseShCLGEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IGkoLi4uYSk7UT1hSShmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6c309bmV3IE1lc3NhZ2VDaGFubmVsO2lBKEEscyksUT1GQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpRPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goQil7UT17dmFsdWU6QixbZUFdOjB9fVByb21pc2UucmVzb2x2ZShRKS5jYXRjaChCPT4oe3ZhbHVlOkIsW2VBXTowfSkpLnRoZW4oQj0+e2xldFtpLGZdPW9BKEIpO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZiksbz09PSJSRUxFQVNFIiYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZSksdHQodCkscEEgaW4gQSYmdHlwZW9mIEFbcEFdPT0iZnVuY3Rpb24iJiZBW3BBXSgpKX0pLmNhdGNoKEI9PntsZXRbaSxmXT1vQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2VBXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse2lkOnJ9KSxmKX0pfSksdC5zdGFydCYmdC5zdGFydCgpfWZ1bmN0aW9uIEJJKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIHR0KEEpe0JJKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gbkkoQSx0KXtyZXR1cm4gU0EoQSxbXSx0KX1mdW5jdGlvbiBJQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gSXQoQSl7cmV0dXJuIHEoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57dHQoQSl9KX12YXIgZ0E9bmV3IFdlYWtNYXAsckE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IHQ9KGdBLmdldChBKXx8MCktMTtnQS5zZXQoQSx0KSx0PT09MCYmSXQoQSl9KTtmdW5jdGlvbiBzSShBLHQpe2xldCBJPShnQS5nZXQodCl8fDApKzE7Z0Euc2V0KHQsSSksckEmJnJBLnJlZ2lzdGVyKEEsdCxBKX1mdW5jdGlvbiBRSShBKXtyQSYmckEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBTQShBLHQ9W10sST1mdW5jdGlvbigpe30pe2xldCBlPSExLGc9bmV3IFByb3h5KEkse2dldChyLG8pe2lmKElBKGUpLG89PT1ySSlyZXR1cm4oKT0+e1FJKGcpLEl0KEEpLGU9ITB9O2lmKG89PT0idGhlbiIpe2lmKHQubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+Z307bGV0IG49cShBLHt0eXBlOiJHRVQiLHBhdGg6dC5tYXAoYT0+YS50b1N0cmluZygpKX0pLnRoZW4oYik7cmV0dXJuIG4udGhlbi5iaW5kKG4pfXJldHVybiBTQShBLFsuLi50LG9dKX0sc2V0KHIsbyxuKXtJQShlKTtsZXRbYSxRXT1vQShuKTtyZXR1cm4gcShBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnQsb10ubWFwKEI9PkIudG9TdHJpbmcoKSksdmFsdWU6YX0sUSkudGhlbihiKX0sYXBwbHkocixvLG4pe0lBKGUpO2xldCBhPXRbdC5sZW5ndGgtMV07aWYoYT09PWdJKXJldHVybiBxKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oYik7aWYoYT09PSJiaW5kIilyZXR1cm4gU0EoQSx0LnNsaWNlKDAsLTEpKTtsZXRbUSxCXT1fQShuKTtyZXR1cm4gcShBLHt0eXBlOiJBUFBMWSIscGF0aDp0Lm1hcChpPT5pLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpRfSxCKS50aGVuKGIpfSxjb25zdHJ1Y3QocixvKXtJQShlKTtsZXRbbixhXT1fQShvKTtyZXR1cm4gcShBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6dC5tYXAoUT0+US50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6bn0sYSkudGhlbihiKX19KTtyZXR1cm4gc0koZyxBKSxnfWZ1bmN0aW9uIEVJKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIF9BKEEpe2xldCB0PUEubWFwKG9BKTtyZXR1cm5bdC5tYXAoST0+SVswXSksRUkodC5tYXAoST0+SVsxXSkpXX12YXIgZXQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRkEoQSx0KXtyZXR1cm4gZXQuc2V0KEEsdCksQX1mdW5jdGlvbiBhSShBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbdkFdOiEwfSl9ZnVuY3Rpb24gb0EoQSl7Zm9yKGxldFt0LEldb2YgQXQpaWYoSS5jYW5IYW5kbGUoQSkpe2xldFtlLGddPUkuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTp0LHZhbHVlOmV9LGddfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxldC5nZXQoQSl8fFtdXX1mdW5jdGlvbiBiKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEF0LmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gcShBLHQsSSl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntsZXQgZz1jSSgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihvKXshby5kYXRhfHwhby5kYXRhLmlkfHxvLmRhdGEuaWQhPT1nfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxlKG8uZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6Z30sdCksSSl9KX1mdW5jdGlvbiBjSSgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gVyhBLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOmZJfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpVQX09T2JqZWN0LEJBPShBPT50PT57bGV0IEk9ZkkuY2FsbCh0KTtyZXR1cm4gQVtJXXx8KEFbSV09SS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLFU9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLHQ9PkJBKHQpPT09QSksbkE9QT0+dD0+dHlwZW9mIHQ9PT1BLHtpc0FycmF5Okt9PUFycmF5LFo9bkEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGxJKEEpe3JldHVybiBBIT09bnVsbCYmIVooQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWihBLmNvbnN0cnVjdG9yKSYmRihBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgaXQ9VSgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBESShBKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOnQ9QSYmQS5idWZmZXImJml0KEEuYnVmZmVyKSx0fXZhciB1ST1uQSgic3RyaW5nIiksRj1uQSgiZnVuY3Rpb24iKSxDdD1uQSgibnVtYmVyIiksc0E9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixoST1BPT5BPT09ITB8fEE9PT0hMSxDQT1BPT57aWYoQkEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1VQShBKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxkST1VKCJEYXRlIikseUk9VSgiRmlsZSIpLHdJPVUoIkJsb2IiKSxtST1VKCJGaWxlTGlzdCIpLHBJPUE9PnNBKEEpJiZGKEEucGlwZSksU0k9QT0+e2xldCB0O3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fEYoQS5hcHBlbmQpJiYoKHQ9QkEoQSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZGKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LEZJPVUoIlVSTFNlYXJjaFBhcmFtcyIpLFJJPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBWKEEsdCx7YWxsT3duS2V5czpJPSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IGUsZztpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSksSyhBKSlmb3IoZT0wLGc9QS5sZW5ndGg7ZTxnO2UrKyl0LmNhbGwobnVsbCxBW2VdLGUsQSk7ZWxzZXtsZXQgcj1JP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG89ci5sZW5ndGgsbjtmb3IoZT0wO2U8bztlKyspbj1yW2VdLHQuY2FsbChudWxsLEFbbl0sbixBKX19ZnVuY3Rpb24gQnQoQSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgST1PYmplY3Qua2V5cyhBKSxlPUkubGVuZ3RoLGc7Zm9yKDtlLS0gPjA7KWlmKGc9SVtlXSx0PT09Zy50b0xvd2VyQ2FzZSgpKXJldHVybiBnO3JldHVybiBudWxsfXZhciBudD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLHN0PUE9PiFaKEEpJiZBIT09bnQ7ZnVuY3Rpb24gTkEoKXtsZXR7Y2FzZWxlc3M6QX09c3QodGhpcykmJnRoaXN8fHt9LHQ9e30sST0oZSxnKT0+e2xldCByPUEmJkJ0KHQsZyl8fGc7Q0EodFtyXSkmJkNBKGUpP3Rbcl09TkEodFtyXSxlKTpDQShlKT90W3JdPU5BKHt9LGUpOksoZSk/dFtyXT1lLnNsaWNlKCk6dFtyXT1lfTtmb3IobGV0IGU9MCxnPWFyZ3VtZW50cy5sZW5ndGg7ZTxnO2UrKylhcmd1bWVudHNbZV0mJlYoYXJndW1lbnRzW2VdLEkpO3JldHVybiB0fXZhciBOST0oQSx0LEkse2FsbE93bktleXM6ZX09e30pPT4oVih0LChnLHIpPT57SSYmRihnKT9BW3JdPVcoZyxJKTpBW3JdPWd9LHthbGxPd25LZXlzOmV9KSxBKSxVST1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLEdJPShBLHQsSSxlKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsZSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTp0LnByb3RvdHlwZX0pLEkmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsSSl9LGtJPShBLHQsSSxlKT0+e2xldCBnLHIsbyxuPXt9O2lmKHQ9dHx8e30sQT09bnVsbClyZXR1cm4gdDtkb3tmb3IoZz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxyPWcubGVuZ3RoO3ItLSA+MDspbz1nW3JdLCghZXx8ZShvLEEsdCkpJiYhbltvXSYmKHRbb109QVtvXSxuW29dPSEwKTtBPUkhPT0hMSYmVUEoQSl9d2hpbGUoQSYmKCFJfHxJKEEsdCkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LExJPShBLHQsSSk9PntBPVN0cmluZyhBKSwoST09PXZvaWQgMHx8ST5BLmxlbmd0aCkmJihJPUEubGVuZ3RoKSxJLT10Lmxlbmd0aDtsZXQgZT1BLmluZGV4T2YodCxJKTtyZXR1cm4gZSE9PS0xJiZlPT09SX0sSkk9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKEsoQSkpcmV0dXJuIEE7bGV0IHQ9QS5sZW5ndGg7aWYoIUN0KHQpKXJldHVybiBudWxsO2xldCBJPW5ldyBBcnJheSh0KTtmb3IoO3QtLSA+MDspSVt0XT1BW3RdO3JldHVybiBJfSxIST0oQT0+dD0+QSYmdCBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmVUEoVWludDhBcnJheSkpLFlJPShBLHQpPT57bGV0IGU9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxnO2Zvcig7KGc9ZS5uZXh0KCkpJiYhZy5kb25lOyl7bGV0IHI9Zy52YWx1ZTt0LmNhbGwoQSxyWzBdLHJbMV0pfX0sYkk9KEEsdCk9PntsZXQgSSxlPVtdO2Zvcig7KEk9QS5leGVjKHQpKSE9PW51bGw7KWUucHVzaChJKTtyZXR1cm4gZX0sTUk9VSgiSFRNTEZvcm1FbGVtZW50IikscUk9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24oSSxlLGcpe3JldHVybiBlLnRvVXBwZXJDYXNlKCkrZ30pLHJ0PSgoe2hhc093blByb3BlcnR5OkF9KT0+KHQsSSk9PkEuY2FsbCh0LEkpKShPYmplY3QucHJvdG90eXBlKSxLST1VKCJSZWdFeHAiKSxRdD0oQSx0KT0+e2xldCBJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLGU9e307VihJLChnLHIpPT57bGV0IG87KG89dChnLHIsQSkpIT09ITEmJihlW3JdPW98fGcpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxlKX0sT0k9QT0+e1F0KEEsKHQsSSk9PntpZihGKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoSSkhPT0tMSlyZXR1cm4hMTtsZXQgZT1BW0ldO2lmKEYoZSkpe2lmKHQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdCl7dC53cml0YWJsZT0hMTtyZXR1cm59dC5zZXR8fCh0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrSSsiXCciKX0pfX0pfSxUST0oQSx0KT0+e2xldCBJPXt9LGU9Zz0+e2cuZm9yRWFjaChyPT57SVtyXT0hMH0pfTtyZXR1cm4gSyhBKT9lKEEpOmUoU3RyaW5nKEEpLnNwbGl0KHQpKSxJfSxQST0oKT0+e30seEk9KEEsdCk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOnQpLFJBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsb3Q9IjAxMjM0NTY3ODkiLEV0PXtESUdJVDpvdCxBTFBIQTpSQSxBTFBIQV9ESUdJVDpSQStSQS50b1VwcGVyQ2FzZSgpK290fSxqST0oQT0xNix0PUV0LkFMUEhBX0RJR0lUKT0+e2xldCBJPSIiLHtsZW5ndGg6ZX09dDtmb3IoO0EtLTspSSs9dFtNYXRoLnJhbmRvbSgpKmV8MF07cmV0dXJuIEl9O2Z1bmN0aW9uIFdJKEEpe3JldHVybiEhKEEmJkYoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBaST1BPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxJPShlLGcpPT57aWYoc0EoZSkpe2lmKHQuaW5kZXhPZihlKT49MClyZXR1cm47aWYoISgidG9KU09OImluIGUpKXt0W2ddPWU7bGV0IHI9SyhlKT9bXTp7fTtyZXR1cm4gVihlLChvLG4pPT57bGV0IGE9SShvLGcrMSk7IVooYSkmJihyW25dPWEpfSksdFtnXT12b2lkIDAscn19cmV0dXJuIGV9O3JldHVybiBJKEEsMCl9LFZJPVUoIkFzeW5jRnVuY3Rpb24iKSxYST1BPT5BJiYoc0EoQSl8fEYoQSkpJiZGKEEudGhlbikmJkYoQS5jYXRjaCksQz17aXNBcnJheTpLLGlzQXJyYXlCdWZmZXI6aXQsaXNCdWZmZXI6bEksaXNGb3JtRGF0YTpTSSxpc0FycmF5QnVmZmVyVmlldzpESSxpc1N0cmluZzp1SSxpc051bWJlcjpDdCxpc0Jvb2xlYW46aEksaXNPYmplY3Q6c0EsaXNQbGFpbk9iamVjdDpDQSxpc1VuZGVmaW5lZDpaLGlzRGF0ZTpkSSxpc0ZpbGU6eUksaXNCbG9iOndJLGlzUmVnRXhwOktJLGlzRnVuY3Rpb246Rixpc1N0cmVhbTpwSSxpc1VSTFNlYXJjaFBhcmFtczpGSSxpc1R5cGVkQXJyYXk6SEksaXNGaWxlTGlzdDptSSxmb3JFYWNoOlYsbWVyZ2U6TkEsZXh0ZW5kOk5JLHRyaW06Ukksc3RyaXBCT006VUksaW5oZXJpdHM6R0ksdG9GbGF0T2JqZWN0OmtJLGtpbmRPZjpCQSxraW5kT2ZUZXN0OlUsZW5kc1dpdGg6TEksdG9BcnJheTpKSSxmb3JFYWNoRW50cnk6WUksbWF0Y2hBbGw6YkksaXNIVE1MRm9ybTpNSSxoYXNPd25Qcm9wZXJ0eTpydCxoYXNPd25Qcm9wOnJ0LHJlZHVjZURlc2NyaXB0b3JzOlF0LGZyZWV6ZU1ldGhvZHM6T0ksdG9PYmplY3RTZXQ6VEksdG9DYW1lbENhc2U6cUksbm9vcDpQSSx0b0Zpbml0ZU51bWJlcjp4SSxmaW5kS2V5OkJ0LGdsb2JhbDpudCxpc0NvbnRleHREZWZpbmVkOnN0LEFMUEhBQkVUOkV0LGdlbmVyYXRlU3RyaW5nOmpJLGlzU3BlY0NvbXBsaWFudEZvcm06V0ksdG9KU09OT2JqZWN0OlpJLGlzQXN5bmNGbjpWSSxpc1RoZW5hYmxlOlhJfTtmdW5jdGlvbiBPKEEsdCxJLGUsZyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIix0JiYodGhpcy5jb2RlPXQpLEkmJih0aGlzLmNvbmZpZz1JKSxlJiYodGhpcy5yZXF1ZXN0PWUpLGcmJih0aGlzLnJlc3BvbnNlPWcpfUMuaW5oZXJpdHMoTyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGF0PU8ucHJvdG90eXBlLGN0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e2N0W0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sY3QpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtPLmZyb209KEEsdCxJLGUsZyxyKT0+e2xldCBvPU9iamVjdC5jcmVhdGUoYXQpO3JldHVybiBDLnRvRmxhdE9iamVjdChBLG8sZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1FcnJvci5wcm90b3R5cGV9LG49Pm4hPT0iaXNBeGlvc0Vycm9yIiksTy5jYWxsKG8sQS5tZXNzYWdlLHQsSSxlLGcpLG8uY2F1c2U9QSxvLm5hbWU9QS5uYW1lLHImJk9iamVjdC5hc3NpZ24obyxyKSxvfTt2YXIgbD1PO3ZhciBRQT1udWxsO2Z1bmN0aW9uIEdBKEEpe3JldHVybiBDLmlzUGxhaW5PYmplY3QoQSl8fEMuaXNBcnJheShBKX1mdW5jdGlvbiBsdChBKXtyZXR1cm4gQy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBmdChBLHQsSSl7cmV0dXJuIEE/QS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKGcscil7cmV0dXJuIGc9bHQoZyksIUkmJnI/IlsiK2crIl0iOmd9KS5qb2luKEk/Ii4iOiIiKTp0fWZ1bmN0aW9uIHpJKEEpe3JldHVybiBDLmlzQXJyYXkoQSkmJiFBLnNvbWUoR0EpfXZhciBfST1DLnRvRmxhdE9iamVjdChDLHt9LG51bGwsZnVuY3Rpb24odCl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KHQpfSk7ZnVuY3Rpb24gdkkoQSx0LEkpe2lmKCFDLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9dHx8bmV3KFFBfHxGb3JtRGF0YSksST1DLnRvRmxhdE9iamVjdChJLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyx1KXtyZXR1cm4hQy5pc1VuZGVmaW5lZCh1W2NdKX0pO2xldCBlPUkubWV0YVRva2VucyxnPUkudmlzaXRvcnx8QixyPUkuZG90cyxvPUkuaW5kZXhlcyxhPShJLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkMuaXNTcGVjQ29tcGxpYW50Rm9ybSh0KTtpZighQy5pc0Z1bmN0aW9uKGcpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gUShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihDLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFhJiZDLmlzQmxvYihFKSl0aHJvdyBuZXcgbCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gQy5pc0FycmF5QnVmZmVyKEUpfHxDLmlzVHlwZWRBcnJheShFKT9hJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gQihFLGMsdSl7bGV0IHk9RTtpZihFJiYhdSYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihDLmVuZHNXaXRoKGMsInt9IikpYz1lP2M6Yy5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoQy5pc0FycmF5KEUpJiZ6SShFKXx8KEMuaXNGaWxlTGlzdChFKXx8Qy5lbmRzV2l0aChjLCJbXSIpKSYmKHk9Qy50b0FycmF5KEUpKSlyZXR1cm4gYz1sdChjKSx5LmZvckVhY2goZnVuY3Rpb24oTix0SSl7IShDLmlzVW5kZWZpbmVkKE4pfHxOPT09bnVsbCkmJnQuYXBwZW5kKG89PT0hMD9mdChbY10sdEkscik6bz09PW51bGw/YzpjKyJbXSIsUShOKSl9KSwhMX1yZXR1cm4gR0EoRSk/ITA6KHQuYXBwZW5kKGZ0KHUsYyxyKSxRKEUpKSwhMSl9bGV0IGk9W10sZj1PYmplY3QuYXNzaWduKF9JLHtkZWZhdWx0VmlzaXRvcjpCLGNvbnZlcnRWYWx1ZTpRLGlzVmlzaXRhYmxlOkdBfSk7ZnVuY3Rpb24gcyhFLGMpe2lmKCFDLmlzVW5kZWZpbmVkKEUpKXtpZihpLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO2kucHVzaChFKSxDLmZvckVhY2goRSxmdW5jdGlvbih5LFIpeyghKEMuaXNVbmRlZmluZWQoeSl8fHk9PT1udWxsKSYmZy5jYWxsKHQseSxDLmlzU3RyaW5nKFIpP1IudHJpbSgpOlIsYyxmKSk9PT0hMCYmcyh5LGM/Yy5jb25jYXQoUik6W1JdKX0pLGkucG9wKCl9fWlmKCFDLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gcyhBKSx0fXZhciBKPXZJO2Z1bmN0aW9uIER0KEEpe2xldCB0PXsiISI6IiUyNTIxIiwiXCciOiIlMjUyNyIsIigiOiIlMjUyOCIsIikiOiIlMjUyOSIsIn4iOiIlMjU3RSIsIiUyNTIwIjoiKyIsIiUyNTAwIjoiXFwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIVwnKCl+XXwlMjUyMHwlMjUwMC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gdXQoQSx0KXt0aGlzLl9wYWlycz1bXSxBJiZKKEEsdGhpcyx0KX12YXIgaHQ9dXQucHJvdG90eXBlO2h0LmFwcGVuZD1mdW5jdGlvbih0LEkpe3RoaXMuX3BhaXJzLnB1c2goW3QsSV0pfTtodC50b1N0cmluZz1mdW5jdGlvbih0KXtsZXQgST10P2Z1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcyxlLER0KX06RHQ7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihnKXtyZXR1cm4gSShnWzBdKSsiPSIrSShnWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIEVBPXV0O2Z1bmN0aW9uICRJKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTI1M0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjUyNC9nLCIkIikucmVwbGFjZSgvJTI1MkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjUyMC9nLCIrIikucmVwbGFjZSgvJTI1NUIvZ2ksIlsiKS5yZXBsYWNlKC8lMjU1RC9naSwiXSIpfWZ1bmN0aW9uIFgoQSx0LEkpe2lmKCF0KXJldHVybiBBO2xldCBlPUkmJkkuZW5jb2RlfHwkSSxnPUkmJkkuc2VyaWFsaXplLHI7aWYoZz9yPWcodCxJKTpyPUMuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyBFQSh0LEkpLnRvU3RyaW5nKGUpLHIpe2xldCBvPUEuaW5kZXhPZigiJTIzIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK3J9cmV0dXJuIEF9dmFyIGtBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UodCxJLGUpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDp0LHJlamVjdGVkOkksc3luY2hyb25vdXM6ZT9lLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ZT9lLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QodCl7dGhpcy5oYW5kbGVyc1t0XSYmKHRoaXMuaGFuZGxlcnNbdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh0KXtDLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihlKXtlIT09bnVsbCYmdChlKX0pfX0sTEE9a0E7dmFyIGFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgZHQ9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOkVBO3ZhciB5dD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIHd0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIG10PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOmR0LEZvcm1EYXRhOnl0LEJsb2I6d3R9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgSkE9e307ZUkoSkEse2hhc0Jyb3dzZXJFbnY6KCk9PnB0LGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+QWUsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT50ZX0pO3ZhciBwdD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixBZT0oQT0+cHQmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSx0ZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHc9ey4uLkpBLC4uLm10fTtmdW5jdGlvbiBIQShBLHQpe3JldHVybiBKKEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihJLGUsZyxyKXtyZXR1cm4gdy5pc05vZGUmJkMuaXNCdWZmZXIoSSk/KHRoaXMuYXBwZW5kKGUsSS50b1N0cmluZygiYmFzZTY0IikpLCExKTpyLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHQpKX1mdW5jdGlvbiBJZShBKXtyZXR1cm4gQy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csQSkubWFwKHQ9PnRbMF09PT0iW10iPyIiOnRbMV18fHRbMF0pfWZ1bmN0aW9uIGVlKEEpe2xldCB0PXt9LEk9T2JqZWN0LmtleXMoQSksZSxnPUkubGVuZ3RoLHI7Zm9yKGU9MDtlPGc7ZSsrKXI9SVtlXSx0W3JdPUFbcl07cmV0dXJuIHR9ZnVuY3Rpb24gZ2UoQSl7ZnVuY3Rpb24gdChJLGUsZyxyKXtsZXQgbz1JW3IrK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBuPU51bWJlci5pc0Zpbml0ZSgrbyksYT1yPj1JLmxlbmd0aDtyZXR1cm4gbz0hbyYmQy5pc0FycmF5KGcpP2cubGVuZ3RoOm8sYT8oQy5oYXNPd25Qcm9wKGcsbyk/Z1tvXT1bZ1tvXSxlXTpnW29dPWUsIW4pOigoIWdbb118fCFDLmlzT2JqZWN0KGdbb10pKSYmKGdbb109W10pLHQoSSxlLGdbb10scikmJkMuaXNBcnJheShnW29dKSYmKGdbb109ZWUoZ1tvXSkpLCFuKX1pZihDLmlzRm9ybURhdGEoQSkmJkMuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgST17fTtyZXR1cm4gQy5mb3JFYWNoRW50cnkoQSwoZSxnKT0+e3QoSWUoZSksZyxJLDApfSksSX1yZXR1cm4gbnVsbH12YXIgY0E9Z2U7ZnVuY3Rpb24gcmUoQSx0LEkpe2lmKEMuaXNTdHJpbmcoQSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShBKSxDLnRyaW0oQSl9Y2F0Y2goZSl7aWYoZS5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBlfXJldHVybihJfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIFlBPXt0cmFuc2l0aW9uYWw6YUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbih0LEkpe2xldCBlPUkuZ2V0Q29udGVudFR5cGUoKXx8IiIsZz1lLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxyPUMuaXNPYmplY3QodCk7aWYociYmQy5pc0hUTUxGb3JtKHQpJiYodD1uZXcgRm9ybURhdGEodCkpLEMuaXNGb3JtRGF0YSh0KSlyZXR1cm4gZz9KU09OLnN0cmluZ2lmeShjQSh0KSk6dDtpZihDLmlzQXJyYXlCdWZmZXIodCl8fEMuaXNCdWZmZXIodCl8fEMuaXNTdHJlYW0odCl8fEMuaXNGaWxlKHQpfHxDLmlzQmxvYih0KSlyZXR1cm4gdDtpZihDLmlzQXJyYXlCdWZmZXJWaWV3KHQpKXJldHVybiB0LmJ1ZmZlcjtpZihDLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLHQudG9TdHJpbmcoKTtsZXQgbjtpZihyKXtpZihlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBIQSh0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKG49Qy5pc0ZpbGVMaXN0KHQpKXx8ZS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBhPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gSihuP3siZmlsZXNbXSI6dH06dCxhJiZuZXcgYSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIHJ8fGc/KEkuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxyZSh0KSk6dH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbih0KXtsZXQgST10aGlzLnRyYW5zaXRpb25hbHx8WUEudHJhbnNpdGlvbmFsLGU9SSYmSS5mb3JjZWRKU09OUGFyc2luZyxnPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKHQmJkMuaXNTdHJpbmcodCkmJihlJiYhdGhpcy5yZXNwb25zZVR5cGV8fGcpKXtsZXQgbz0hKEkmJkkuc2lsZW50SlNPTlBhcnNpbmcpJiZnO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChuKXtpZihvKXRocm93IG4ubmFtZT09PSJTeW50YXhFcnJvciI/bC5mcm9tKG4sbC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpufX1yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Qy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntZQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFQ9WUE7dmFyIG9lPUMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksU3Q9QT0+e2xldCB0PXt9LEksZSxnO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2c9by5pbmRleE9mKCI6IiksST1vLnN1YnN0cmluZygwLGcpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGU9by5zdWJzdHJpbmcoZysxKS50cmltKCksISghSXx8dFtJXSYmb2VbSV0pJiYoST09PSJzZXQtY29va2llIj90W0ldP3RbSV0ucHVzaChlKTp0W0ldPVtlXTp0W0ldPXRbSV0/dFtJXSsiLCAiK2U6ZSl9KSx0fTt2YXIgRnQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiB6KEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOkMuaXNBcnJheShBKT9BLm1hcChmQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIGllKEEpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCksST0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLGU7Zm9yKDtlPUkuZXhlYyhBKTspdFtlWzFdXT1lWzJdO3JldHVybiB0fXZhciBDZT1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBiQShBLHQsSSxlLGcpe2lmKEMuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMsdCxJKTtpZihnJiYodD1JKSwhIUMuaXNTdHJpbmcodCkpe2lmKEMuaXNTdHJpbmcoZSkpcmV0dXJuIHQuaW5kZXhPZihlKSE9PS0xO2lmKEMuaXNSZWdFeHAoZSkpcmV0dXJuIGUudGVzdCh0KX19ZnVuY3Rpb24gQmUoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCh0LEksZSk9PkkudG9VcHBlckNhc2UoKStlKX1mdW5jdGlvbiBuZShBLHQpe2xldCBJPUMudG9DYW1lbENhc2UoIiAiK3QpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChlPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsZStJLHt2YWx1ZTpmdW5jdGlvbihnLHIsbyl7cmV0dXJuIHRoaXNbZV0uY2FsbCh0aGlzLHQsZyxyLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3QmJnRoaXMuc2V0KHQpfXNldCh0LEksZSl7bGV0IGc9dGhpcztmdW5jdGlvbiByKG4sYSxRKXtsZXQgQj16KGEpO2lmKCFCKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgaT1DLmZpbmRLZXkoZyxCKTsoIWl8fGdbaV09PT12b2lkIDB8fFE9PT0hMHx8UT09PXZvaWQgMCYmZ1tpXSE9PSExKSYmKGdbaXx8YV09ZkEobikpfWxldCBvPShuLGEpPT5DLmZvckVhY2gobiwoUSxCKT0+cihRLEIsYSkpO3JldHVybiBDLmlzUGxhaW5PYmplY3QodCl8fHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP28odCxJKTpDLmlzU3RyaW5nKHQpJiYodD10LnRyaW0oKSkmJiFDZSh0KT9vKFN0KHQpLEkpOnQhPW51bGwmJnIoSSx0LGUpLHRoaXN9Z2V0KHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO2lmKGUpe2xldCBnPXRoaXNbZV07aWYoIUkpcmV0dXJuIGc7aWYoST09PSEwKXJldHVybiBpZShnKTtpZihDLmlzRnVuY3Rpb24oSSkpcmV0dXJuIEkuY2FsbCh0aGlzLGcsZSk7aWYoQy5pc1JlZ0V4cChJKSlyZXR1cm4gSS5leGVjKGcpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXModCxJKXtpZih0PXoodCksdCl7bGV0IGU9Qy5maW5kS2V5KHRoaXMsdCk7cmV0dXJuISEoZSYmdGhpc1tlXSE9PXZvaWQgMCYmKCFJfHxiQSh0aGlzLHRoaXNbZV0sZSxJKSkpfXJldHVybiExfWRlbGV0ZSh0LEkpe2xldCBlPXRoaXMsZz0hMTtmdW5jdGlvbiByKG8pe2lmKG89eihvKSxvKXtsZXQgbj1DLmZpbmRLZXkoZSxvKTtuJiYoIUl8fGJBKGUsZVtuXSxuLEkpKSYmKGRlbGV0ZSBlW25dLGc9ITApfX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLGd9Y2xlYXIodCl7bGV0IEk9T2JqZWN0LmtleXModGhpcyksZT1JLmxlbmd0aCxnPSExO2Zvcig7ZS0tOyl7bGV0IHI9SVtlXTsoIXR8fGJBKHRoaXMsdGhpc1tyXSxyLHQsITApKSYmKGRlbGV0ZSB0aGlzW3JdLGc9ITApfXJldHVybiBnfW5vcm1hbGl6ZSh0KXtsZXQgST10aGlzLGU9e307cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChnLHIpPT57bGV0IG89Qy5maW5kS2V5KGUscik7aWYobyl7SVtvXT1mQShnKSxkZWxldGUgSVtyXTtyZXR1cm59bGV0IG49dD9CZShyKTpTdHJpbmcocikudHJpbSgpO24hPT1yJiZkZWxldGUgSVtyXSxJW25dPWZBKGcpLGVbbl09ITB9KSx0aGlzfWNvbmNhdCguLi50KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi50KX10b0pTT04odCl7bGV0IEk9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gQy5mb3JFYWNoKHRoaXMsKGUsZyk9PntlIT1udWxsJiZlIT09ITEmJihJW2ddPXQmJkMuaXNBcnJheShlKT9lLmpvaW4oIiwgIik6ZSl9KSxJfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFt0LEldKT0+dCsiOiAiK0kpLmpvaW4oYCUwQWApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzP3Q6bmV3IHRoaXModCl9c3RhdGljIGNvbmNhdCh0LC4uLkkpe2xldCBlPW5ldyB0aGlzKHQpO3JldHVybiBJLmZvckVhY2goZz0+ZS5zZXQoZykpLGV9c3RhdGljIGFjY2Vzc29yKHQpe2xldCBlPSh0aGlzW0Z0XT10aGlzW0Z0XT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLGc9dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gcihvKXtsZXQgbj16KG8pO2Vbbl18fChuZShnLG8pLGVbbl09ITApfXJldHVybiBDLmlzQXJyYXkodCk/dC5mb3JFYWNoKHIpOnIodCksdGhpc319O1AuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO0MucmVkdWNlRGVzY3JpcHRvcnMoUC5wcm90b3R5cGUsKHt2YWx1ZTpBfSx0KT0+e2xldCBJPXRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KGUpe3RoaXNbSV09ZX19fSk7Qy5mcmVlemVNZXRob2RzKFApO3ZhciBtPVA7ZnVuY3Rpb24gXyhBLHQpe2xldCBJPXRoaXN8fFQsZT10fHxJLGc9bS5mcm9tKGUuaGVhZGVycykscj1lLmRhdGE7cmV0dXJuIEMuZm9yRWFjaChBLGZ1bmN0aW9uKG4pe3I9bi5jYWxsKEkscixnLm5vcm1hbGl6ZSgpLHQ/dC5zdGF0dXM6dm9pZCAwKX0pLGcubm9ybWFsaXplKCkscn1mdW5jdGlvbiB2KEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gUnQoQSx0LEkpe2wuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsbC5FUlJfQ0FOQ0VMRUQsdCxJKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifUMuaW5oZXJpdHMoUnQsbCx7X19DQU5DRUxfXzohMH0pO3ZhciBIPVJ0O2Z1bmN0aW9uIE1BKEEsdCxJKXtsZXQgZT1JLmNvbmZpZy52YWxpZGF0ZVN0YXR1czshSS5zdGF0dXN8fCFlfHxlKEkuc3RhdHVzKT9BKEkpOnQobmV3IGwoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIitJLnN0YXR1cyxbbC5FUlJfQkFEX1JFUVVFU1QsbC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKEkuc3RhdHVzLzEwMCktNF0sSS5jb25maWcsSS5yZXF1ZXN0LEkpKX12YXIgTnQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsdCxJLGUsZyxyKXtsZXQgbz1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpXTtDLmlzTnVtYmVyKEkpJiZvLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShJKS50b0dNVFN0cmluZygpKSxDLmlzU3RyaW5nKGUpJiZvLnB1c2goInBhdGg9IitlKSxDLmlzU3RyaW5nKGcpJiZvLnB1c2goImRvbWFpbj0iK2cpLHI9PT0hMCYmby5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9by5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBxQShBKXtyZXR1cm4vXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdChBKX1mdW5jdGlvbiBLQShBLHQpe3JldHVybiB0P0EucmVwbGFjZSgvXFwvP1xcLyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXFwvKy8sIiIpOkF9ZnVuY3Rpb24gJChBLHQpe3JldHVybiBBJiYhcUEodCk/S0EoQSx0KTp0fXZhciBVdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksST1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksZTtmdW5jdGlvbiBnKHIpe2xldCBvPXI7cmV0dXJuIHQmJihJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz1JLmhyZWYpLEkuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjpJLmhyZWYscHJvdG9jb2w6SS5wcm90b2NvbD9JLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpJLmhvc3Qsc2VhcmNoOkkuc2VhcmNoP0kuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOkkuaGFzaD9JLmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOkkuaG9zdG5hbWUscG9ydDpJLnBvcnQscGF0aG5hbWU6SS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/SS5wYXRobmFtZToiLyIrSS5wYXRobmFtZX19cmV0dXJuIGU9Zyh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IG49Qy5pc1N0cmluZyhvKT9nKG8pOm87cmV0dXJuIG4ucHJvdG9jb2w9PT1lLnByb3RvY29sJiZuLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIE9BKEEpe2xldCB0PS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiB0JiZ0WzFdfHwiIn1mdW5jdGlvbiBzZShBLHQpe0E9QXx8MTA7bGV0IEk9bmV3IEFycmF5KEEpLGU9bmV3IEFycmF5KEEpLGc9MCxyPTAsbztyZXR1cm4gdD10IT09dm9pZCAwP3Q6MWUzLGZ1bmN0aW9uKGEpe2xldCBRPURhdGUubm93KCksQj1lW3JdO298fChvPVEpLElbZ109YSxlW2ddPVE7bGV0IGk9cixmPTA7Zm9yKDtpIT09ZzspZis9SVtpKytdLGk9aSVBO2lmKGc9KGcrMSklQSxnPT09ciYmKHI9KHIrMSklQSksUS1vPHQpcmV0dXJuO2xldCBzPUImJlEtQjtyZXR1cm4gcz9NYXRoLnJvdW5kKGYqMWUzL3MpOnZvaWQgMH19dmFyIEd0PXNlO2Z1bmN0aW9uIGt0KEEsdCl7bGV0IEk9MCxlPUd0KDUwLDI1MCk7cmV0dXJuIGc9PntsZXQgcj1nLmxvYWRlZCxvPWcubGVuZ3RoQ29tcHV0YWJsZT9nLnRvdGFsOnZvaWQgMCxuPXItSSxhPWUobiksUT1yPD1vO0k9cjtsZXQgQj17bG9hZGVkOnIsdG90YWw6byxwcm9ncmVzczpvP3Ivbzp2b2lkIDAsYnl0ZXM6bixyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmbyYmUT8oby1yKS9hOnZvaWQgMCxldmVudDpnfTtCW3Q/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShCKX19dmFyIFFlPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsTHQ9UWUmJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihJLGUpe2xldCBnPUEuZGF0YSxyPW0uZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOm59PUEsYTtmdW5jdGlvbiBRKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpfWxldCBCO2lmKEMuaXNGb3JtRGF0YShnKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXIuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEI9ci5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1CP0Iuc3BsaXQoIjsiKS5tYXAoeT0+eS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtyLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO3Iuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgZj0kKEEuYmFzZVVSTCxBLnVybCk7aS5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksWChmLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksITApLGkudGltZW91dD1BLnRpbWVvdXQ7ZnVuY3Rpb24gcygpe2lmKCFpKXJldHVybjtsZXQgYz1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBpJiZpLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSx5PXtkYXRhOiFvfHxvPT09InRleHQifHxvPT09Impzb24iP2kucmVzcG9uc2VUZXh0OmkucmVzcG9uc2Usc3RhdHVzOmkuc3RhdHVzLHN0YXR1c1RleHQ6aS5zdGF0dXNUZXh0LGhlYWRlcnM6Yyxjb25maWc6QSxyZXF1ZXN0Oml9O01BKGZ1bmN0aW9uKE4pe0koTiksUSgpfSxmdW5jdGlvbihOKXtlKE4pLFEoKX0seSksaT1udWxsfWlmKCJvbmxvYWRlbmQiaW4gaT9pLm9ubG9hZGVuZD1zOmkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWl8fGkucmVhZHlTdGF0ZSE9PTR8fGkuc3RhdHVzPT09MCYmIShpLnJlc3BvbnNlVVJMJiZpLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChzKX0saS5vbmFib3J0PWZ1bmN0aW9uKCl7aSYmKGUobmV3IGwoIlJlcXVlc3QgYWJvcnRlZCIsbC5FQ09OTkFCT1JURUQsQSxpKSksaT1udWxsKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgbCgiTmV0d29yayBFcnJvciIsbC5FUlJfTkVUV09SSyxBLGkpKSxpPW51bGx9LGkub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IHU9QS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrQS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHk9QS50cmFuc2l0aW9uYWx8fGFBO0EudGltZW91dEVycm9yTWVzc2FnZSYmKHU9QS50aW1lb3V0RXJyb3JNZXNzYWdlKSxlKG5ldyBsKHUseS5jbGFyaWZ5VGltZW91dEVycm9yP2wuRVRJTUVET1VUOmwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbH0sdy5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihuJiZDLmlzRnVuY3Rpb24obikmJihuPW4oQSkpLG58fG4hPT0hMSYmVXQoZikpKXtsZXQgYz1BLnhzcmZIZWFkZXJOYW1lJiZBLnhzcmZDb29raWVOYW1lJiZOdC5yZWFkKEEueHNyZkNvb2tpZU5hbWUpO2MmJnIuc2V0KEEueHNyZkhlYWRlck5hbWUsYyl9Zz09PXZvaWQgMCYmci5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBpJiZDLmZvckVhY2goci50b0pTT04oKSxmdW5jdGlvbih1LHkpe2kuc2V0UmVxdWVzdEhlYWRlcih5LHUpfSksQy5pc1VuZGVmaW5lZChBLndpdGhDcmVkZW50aWFscyl8fChpLndpdGhDcmVkZW50aWFscz0hIUEud2l0aENyZWRlbnRpYWxzKSxvJiZvIT09Impzb24iJiYoaS5yZXNwb25zZVR5cGU9QS5yZXNwb25zZVR5cGUpLHR5cGVvZiBBLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa3QoQS5vbkRvd25sb2FkUHJvZ3Jlc3MsITApKSx0eXBlb2YgQS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZpLnVwbG9hZCYmaS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25VcGxvYWRQcm9ncmVzcykpLChBLmNhbmNlbFRva2VufHxBLnNpZ25hbCkmJihhPWM9PntpJiYoZSghY3x8Yy50eXBlP25ldyBIKG51bGwsQSxpKTpjKSxpLmFib3J0KCksaT1udWxsKX0sQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYSksQS5zaWduYWwmJihBLnNpZ25hbC5hYm9ydGVkP2EoKTpBLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYSkpKTtsZXQgRT1PQShmKTtpZihFJiZ3LnByb3RvY29scy5pbmRleE9mKEUpPT09LTEpe2UobmV3IGwoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrRSsiOiIsbC5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1pLnNlbmQoZ3x8bnVsbCl9KX07dmFyIFRBPXtodHRwOlFBLHhocjpMdH07Qy5mb3JFYWNoKFRBLChBLHQpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6dH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTp0fSl9fSk7dmFyIEp0PUE9PmAtICR7QX1gLEVlPUE9PkMuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxsQT17Z2V0QWRhcHRlcjpBPT57QT1DLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDp0fT1BLEksZSxnPXt9O2ZvcihsZXQgcj0wO3I8dDtyKyspe0k9QVtyXTtsZXQgbztpZihlPUksIUVlKEkpJiYoZT1UQVsobz1TdHJpbmcoSSkpLnRvTG93ZXJDYXNlKCldLGU9PT12b2lkIDApKXRocm93IG5ldyBsKGBVbmtub3duIGFkYXB0ZXIgXCcke299XCdgKTtpZihlKWJyZWFrO2dbb3x8IiUyMyIrcl09ZX1pZighZSl7bGV0IHI9T2JqZWN0LmVudHJpZXMoZykubWFwKChbbixhXSk9PmBhZGFwdGVyICR7bn0gYCsoYT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLG89dD9yLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtyLm1hcChKdCkuam9pbihgJTBBYCk6IiAiK0p0KHJbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IGwoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gZX0sYWRhcHRlcnM6VEF9O2Z1bmN0aW9uIFBBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBIKG51bGwsQSl9ZnVuY3Rpb24gREEoQSl7cmV0dXJuIFBBKEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFQuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gUEEoQSksZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZSksZS5oZWFkZXJzPW0uZnJvbShlLmhlYWRlcnMpLGV9LGZ1bmN0aW9uKGUpe3JldHVybiB2KGUpfHwoUEEoQSksZSYmZS5yZXNwb25zZSYmKGUucmVzcG9uc2UuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUucmVzcG9uc2UpLGUucmVzcG9uc2UuaGVhZGVycz1tLmZyb20oZS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KGUpfSl9dmFyIEh0PUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIGsoQSx0KXt0PXR8fHt9O2xldCBJPXt9O2Z1bmN0aW9uIGUoUSxCLGkpe3JldHVybiBDLmlzUGxhaW5PYmplY3QoUSkmJkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOml9LFEsQik6Qy5pc1BsYWluT2JqZWN0KEIpP0MubWVyZ2Uoe30sQik6Qy5pc0FycmF5KEIpP0Iuc2xpY2UoKTpCfWZ1bmN0aW9uIGcoUSxCLGkpe2lmKEMuaXNVbmRlZmluZWQoQikpe2lmKCFDLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRLGkpfWVsc2UgcmV0dXJuIGUoUSxCLGkpfWZ1bmN0aW9uIHIoUSxCKXtpZighQy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbyhRLEIpe2lmKEMuaXNVbmRlZmluZWQoQikpe2lmKCFDLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRKX1lbHNlIHJldHVybiBlKHZvaWQgMCxCKX1mdW5jdGlvbiBuKFEsQixpKXtpZihpIGluIHQpcmV0dXJuIGUoUSxCKTtpZihpIGluIEEpcmV0dXJuIGUodm9pZCAwLFEpfWxldCBhPXt1cmw6cixtZXRob2Q6cixkYXRhOnIsYmFzZVVSTDpvLHRyYW5zZm9ybVJlcXVlc3Q6byx0cmFuc2Zvcm1SZXNwb25zZTpvLHBhcmFtc1NlcmlhbGl6ZXI6byx0aW1lb3V0Om8sdGltZW91dE1lc3NhZ2U6byx3aXRoQ3JlZGVudGlhbHM6byx3aXRoWFNSRlRva2VuOm8sYWRhcHRlcjpvLHJlc3BvbnNlVHlwZTpvLHhzcmZDb29raWVOYW1lOm8seHNyZkhlYWRlck5hbWU6byxvblVwbG9hZFByb2dyZXNzOm8sb25Eb3dubG9hZFByb2dyZXNzOm8sZGVjb21wcmVzczpvLG1heENvbnRlbnRMZW5ndGg6byxtYXhCb2R5TGVuZ3RoOm8sYmVmb3JlUmVkaXJlY3Q6byx0cmFuc3BvcnQ6byxodHRwQWdlbnQ6byxodHRwc0FnZW50Om8sY2FuY2VsVG9rZW46byxzb2NrZXRQYXRoOm8scmVzcG9uc2VFbmNvZGluZzpvLHZhbGlkYXRlU3RhdHVzOm4saGVhZGVyczooUSxCKT0+ZyhIdChRKSxIdChCKSwhMCl9O3JldHVybiBDLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLHQpKSxmdW5jdGlvbihCKXtsZXQgaT1hW0JdfHxnLGY9aShBW0JdLHRbQl0sQik7Qy5pc1VuZGVmaW5lZChmKSYmaSE9PW58fChJW0JdPWYpfSksSX12YXIgdUE9IjEuNi44Ijt2YXIgeEE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLHQpPT57eEFbQV09ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT09QXx8ImEiKyh0PDE/Im4gIjoiICIpK0F9fSk7dmFyIFl0PXt9O3hBLnRyYW5zaXRpb25hbD1mdW5jdGlvbih0LEksZSl7ZnVuY3Rpb24gZyhyLG8pe3JldHVybiJbQXhpb3MgdiIrdUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrcisiXCciK28rKGU/Ii4gIitlOiIiKX1yZXR1cm4ocixvLG4pPT57aWYodD09PSExKXRocm93IG5ldyBsKGcobywiIGhhcyBiZWVuIHJlbW92ZWQiKyhJPyIgaW4gIitJOiIiKSksbC5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIEkmJiFZdFtvXSYmKFl0W29dPSEwLGNvbnNvbGUud2FybihnKG8sIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK0krIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksdD90KHIsbyxuKTohMH19O2Z1bmN0aW9uIGFlKEEsdCxJKXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IGwoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBlPU9iamVjdC5rZXlzKEEpLGc9ZS5sZW5ndGg7Zm9yKDtnLS0gPjA7KXtsZXQgcj1lW2ddLG89dFtyXTtpZihvKXtsZXQgbj1BW3JdLGE9bj09PXZvaWQgMHx8byhuLHIsQSk7aWYoYSE9PSEwKXRocm93IG5ldyBsKCJvcHRpb24gIityKyIgbXVzdCBiZSAiK2EsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYoSSE9PSEwKXRocm93IG5ldyBsKCJVbmtub3duIG9wdGlvbiAiK3IsbC5FUlJfQkFEX09QVElPTil9fXZhciBoQT17YXNzZXJ0T3B0aW9uczphZSx2YWxpZGF0b3JzOnhBfTt2YXIgWT1oQS52YWxpZGF0b3JzLHg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBMQSxyZXNwb25zZTpuZXcgTEF9fWFzeW5jIHJlcXVlc3QodCxJKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxJKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBnO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGc9e30pOmc9bmV3IEVycm9yO2xldCByPWcuc3RhY2s/Zy5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjtlLnN0YWNrP3ImJiFTdHJpbmcoZS5zdGFjaykuZW5kc1dpdGgoci5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKGUuc3RhY2srPWAlMEFgK3IpOmUuc3RhY2s9cn10aHJvdyBlfX1fcmVxdWVzdCh0LEkpe3R5cGVvZiB0PT0ic3RyaW5nIj8oST1JfHx7fSxJLnVybD10KTpJPXR8fHt9LEk9ayh0aGlzLmRlZmF1bHRzLEkpO2xldHt0cmFuc2l0aW9uYWw6ZSxwYXJhbXNTZXJpYWxpemVyOmcsaGVhZGVyczpyfT1JO2UhPT12b2lkIDAmJmhBLmFzc2VydE9wdGlvbnMoZSx7c2lsZW50SlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKX0sITEpLGchPW51bGwmJihDLmlzRnVuY3Rpb24oZyk/SS5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6Z306aEEuYXNzZXJ0T3B0aW9ucyhnLHtlbmNvZGU6WS5mdW5jdGlvbixzZXJpYWxpemU6WS5mdW5jdGlvbn0sITApKSxJLm1ldGhvZD0oSS5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1yJiZDLm1lcmdlKHIuY29tbW9uLHJbSS5tZXRob2RdKTtyJiZDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSByW0VdfSksSS5oZWFkZXJzPW0uY29uY2F0KG8scik7bGV0IG49W10sYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKEkpPT09ITF8fChhPWEmJmMuc3luY2hyb25vdXMsbi51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBRPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7US5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IEIsaT0wLGY7aWYoIWEpe2xldCBFPVtEQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLG4pLEUucHVzaC5hcHBseShFLFEpLGY9RS5sZW5ndGgsQj1Qcm9taXNlLnJlc29sdmUoSSk7aTxmOylCPUIudGhlbihFW2krK10sRVtpKytdKTtyZXR1cm4gQn1mPW4ubGVuZ3RoO2xldCBzPUk7Zm9yKGk9MDtpPGY7KXtsZXQgRT1uW2krK10sYz1uW2krK107dHJ5e3M9RShzKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e0I9REEuY2FsbCh0aGlzLHMpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3IoaT0wLGY9US5sZW5ndGg7aTxmOylCPUIudGhlbihRW2krK10sUVtpKytdKTtyZXR1cm4gQn1nZXRVcmkodCl7dD1rKHRoaXMuZGVmYXVsdHMsdCk7bGV0IEk9JCh0LmJhc2VVUkwsdC51cmwpO3JldHVybiBYKEksdC5wYXJhbXMsdC5wYXJhbXNTZXJpYWxpemVyKX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24odCl7eC5wcm90b3R5cGVbdF09ZnVuY3Rpb24oSSxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsoZXx8e30se21ldGhvZDp0LHVybDpJLGRhdGE6KGV8fHt9KS5kYXRhfSkpfX0pO0MuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIEkoZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbyxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsobnx8e30se21ldGhvZDp0LGhlYWRlcnM6ZT97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6cixkYXRhOm99KSl9fXgucHJvdG90eXBlW3RdPUkoKSx4LnByb3RvdHlwZVt0KyJGb3JtIl09SSghMCl9KTt2YXIgQUE9eDt2YXIgakE9Y2xhc3MgQXtjb25zdHJ1Y3Rvcih0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IEk7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe0k9cn0pO2xldCBlPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZz0+e2lmKCFlLl9saXN0ZW5lcnMpcmV0dXJuO2xldCByPWUuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtyLS0gPjA7KWUuX2xpc3RlbmVyc1tyXShnKTtlLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPWc9PntsZXQgcixvPW5ldyBQcm9taXNlKG49PntlLnN1YnNjcmliZShuKSxyPW59KS50aGVuKGcpO3JldHVybiBvLmNhbmNlbD1mdW5jdGlvbigpe2UudW5zdWJzY3JpYmUocil9LG99LHQoZnVuY3Rpb24ocixvLG4pe2UucmVhc29ufHwoZS5yZWFzb249bmV3IEgocixvLG4pLEkoZS5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUodCl7aWYodGhpcy5yZWFzb24pe3QodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2godCk6dGhpcy5fbGlzdGVuZXJzPVt0XX11bnN1YnNjcmliZSh0KXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgST10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZih0KTtJIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoSSwxKX1zdGF0aWMgc291cmNlKCl7bGV0IHQ7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKGcpe3Q9Z30pLGNhbmNlbDp0fX19LGJ0PWpBO2Z1bmN0aW9uIFdBKEEpe3JldHVybiBmdW5jdGlvbihJKXtyZXR1cm4gQS5hcHBseShudWxsLEkpfX1mdW5jdGlvbiBaQShBKXtyZXR1cm4gQy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgVkE9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKFZBKS5mb3JFYWNoKChbQSx0XSk9PntWQVt0XT1BfSk7dmFyIE10PVZBO2Z1bmN0aW9uIHF0KEEpe2xldCB0PW5ldyBBQShBKSxJPVcoQUEucHJvdG90eXBlLnJlcXVlc3QsdCk7cmV0dXJuIEMuZXh0ZW5kKEksQUEucHJvdG90eXBlLHQse2FsbE93bktleXM6ITB9KSxDLmV4dGVuZChJLHQsbnVsbCx7YWxsT3duS2V5czohMH0pLEkuY3JlYXRlPWZ1bmN0aW9uKGcpe3JldHVybiBxdChrKEEsZykpfSxJfXZhciBoPXF0KFQpO2guQXhpb3M9QUE7aC5DYW5jZWxlZEVycm9yPUg7aC5DYW5jZWxUb2tlbj1idDtoLmlzQ2FuY2VsPXY7aC5WRVJTSU9OPXVBO2gudG9Gb3JtRGF0YT1KO2guQXhpb3NFcnJvcj1sO2guQ2FuY2VsPWguQ2FuY2VsZWRFcnJvcjtoLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodCl9O2guc3ByZWFkPVdBO2guaXNBeGlvc0Vycm9yPVpBO2gubWVyZ2VDb25maWc9aztoLkF4aW9zSGVhZGVycz1tO2guZm9ybVRvSlNPTj1BPT5jQShDLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2guZ2V0QWRhcHRlcj1sQS5nZXRBZGFwdGVyO2guSHR0cFN0YXR1c0NvZGU9TXQ7aC5kZWZhdWx0PWg7dmFyIGRBPWg7dmFye0F4aW9zOmlvLEF4aW9zRXJyb3I6Q28sQ2FuY2VsZWRFcnJvcjpCbyxpc0NhbmNlbDpubyxDYW5jZWxUb2tlbjpzbyxWRVJTSU9OOlFvLGFsbDpFbyxDYW5jZWw6YW8saXNBeGlvc0Vycm9yOmNvLHNwcmVhZDpmbyx0b0Zvcm1EYXRhOmxvLEF4aW9zSGVhZGVyczpEbyxIdHRwU3RhdHVzQ29kZTp1byxmb3JtVG9KU09OOmhvLGdldEFkYXB0ZXI6eW8sbWVyZ2VDb25maWc6d299PWRBO3ZhciB0QSxMLHpBLFhBPXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7ekE9bmV3IFVpbnQ4QXJyYXkoTC5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LHlBPWNsYXNze2luaXQoKXtyZXR1cm4gdEF8fCh0eXBlb2YgZmV0Y2g8InUiP3RBPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrS3QpLnRoZW4odD0+dC5hcnJheUJ1ZmZlcigpKS50aGVuKHQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsWEEpKS50aGVuKHRoaXMuX2luaXQpOnRBPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKEt0LCJiYXNlNjQiKSxYQSkudGhlbih0aGlzLl9pbml0KSx0QSl9X2luaXQodCl7TD10Lmluc3RhbmNlLFhBLmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZSh0LEk9MCl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IGU9dC5ieXRlTGVuZ3RoLGc9TC5leHBvcnRzLm1hbGxvYyhlKTt6QS5zZXQodCxnKSxJPUl8fE51bWJlcihMLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShnLGUpKTtsZXQgcj1MLmV4cG9ydHMubWFsbG9jKEkpLG89TC5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhyLEksZyxlKSxuPXpBLnNsaWNlKHIscitvKTtyZXR1cm4gTC5leHBvcnRzLmZyZWUoZyksTC5leHBvcnRzLmZyZWUociksbn19LEt0PSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIE90PW5ldyB5QSxUdD0hMTthc3luYyBmdW5jdGlvbiBjZShBLHQsSSl7bGV0IGU9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ZT1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ZT1BOmU9YCR7dH0vJHtBfWAsZS5lbmRzV2l0aCgiLmpzIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMykpLGUuZW5kc1dpdGgoIi53YXNtIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtNSkpO2xldCBnPWAke2V9Lndhc21gLHI9YXdhaXQgZEEuZ2V0KGAke2d9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczpJfSk7VHR8fChhd2FpdCBPdC5pbml0KCksVHQ9ITApO2xldCBuPU90LmRlY29kZShuZXcgVWludDhBcnJheShyLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtlfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om59KX12YXIgUHQ9Y2U7dmFyIHdBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gZmUoQSx0LEkpe2xldCBlPUEsZz1BLHI9bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoZT1uZXcgVVJMKEEuaHJlZiksZz1lLmhyZWYpLHdBLmhhcyhnKT9yPWF3YWl0IHdBLmdldChnKTood0Euc2V0KGcsUHQoZSx0LEkpKSxyPWF3YWl0IHdBLmdldChnKSkscn12YXIgeHQ9ZmU7dmFyIGxlPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sRD1sZTt2YXIgRGU9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxTPURlO3ZhciB1ZT17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0saj11ZTtmdW5jdGlvbiBoZShBLHQpe2xldCBJPW51bGw7c3dpdGNoKEEpe2Nhc2UgUy5VSW50ODp7ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFMuSW50ODp7ST1uZXcgSW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50MTY6e0k9bmV3IFVpbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQxNjp7ST1uZXcgSW50MTZBcnJheSh0KTticmVha31jYXNlIFMuVUludDMyOntJPW5ldyBVaW50MzJBcnJheSh0KTticmVha31jYXNlIFMuSW50MzI6e0k9bmV3IEludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/ST1uZXcgQmlnVWludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFMuSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/ST1uZXcgQmlnSW50NjRBcnJheSh0KTpJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDMyOntJPW5ldyBGbG9hdDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBqLkZsb2F0NjQ6e0k9bmV3IEZsb2F0NjRBcnJheSh0KTticmVha31jYXNlIm51bGwiOntJPW51bGw7YnJlYWt9Y2FzZSBudWxsOntJPW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gSX12YXIgRz1oZTt2YXIgWnQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsanQ9bmV3IFRleHRFbmNvZGVyLFd0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBkZShBLHQpe2xldCBJPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LGU9QS5mc19vcGVuKHQsSS5mbGFncykscj1BLmZzX3N0YXQodCkuc2l6ZSxvPW51bGw7WnQ/bz1uZXcgU2hhcmVkQXJyYXlCdWZmZXIocik6bz1uZXcgQXJyYXlCdWZmZXIocik7bGV0IG49bmV3IFVpbnQ4QXJyYXkobyk7cmV0dXJuIEEuZnNfcmVhZChlLG4sMCxyLDApLEEuZnNfY2xvc2UoZSksbn1mdW5jdGlvbiBWdChBLHQsSSl7bGV0IGU9bnVsbDtadD9lPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihJKTplPW5ldyBBcnJheUJ1ZmZlcihJKTtsZXQgZz1uZXcgVWludDhBcnJheShlKSxyPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcix0LEkpO3JldHVybiBnLnNldChyKSxnfWZ1bmN0aW9uIGQoQSx0LEksZSl7bGV0IGc9MDtyZXR1cm4gdCE9PW51bGwmJihnPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksZSx0LmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxnKSksZ31mdW5jdGlvbiBNKEEsdCxJKXtsZXQgZT1KU09OLnN0cmluZ2lmeSh0KSxnPUEubGVuZ3RoQnl0ZXNVVEY4KGUpKzEscj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksZ10pO0Euc3RyaW5nVG9VVEY4KGUscixnKX1mdW5jdGlvbiBwKEEsdCxJLGUpe2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxJXSksbz1WdChBLGcscik7cmV0dXJuIEcoZSxvLmJ1ZmZlcil9ZnVuY3Rpb24gbUEoQSx0KXtsZXQgST1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLHRdKSxlPUEuVVRGOFRvU3RyaW5nKEkpO3JldHVybiBKU09OLnBhcnNlKGUpfWZ1bmN0aW9uIHllKEEsdCxJLGUpe2UhPW51bGwmJmUubGVuZ3RoPjAmJmUuZm9yRWFjaChmdW5jdGlvbihRLEIpe3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgaT1qdC5lbmNvZGUoUS5kYXRhLmRhdGEpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgaT1qdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoUS5kYXRhKSksZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgaT1RLmRhdGEuZGF0YSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5kYXRhLEIsMCkscz1kKEEsaS5kaXJlY3Rpb24sQiwxKSxFPXR5cGVvZiBpLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGkubWV0YWRhdGEuZW50cmllcygpKTpbXSxjPXtpbWFnZVR5cGU6aS5pbWFnZVR5cGUsbmFtZTppLm5hbWUsb3JpZ2luOmkub3JpZ2luLHNwYWNpbmc6aS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxzaXplOmkuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOkV9O00oQSxjLEIpO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLmNlbGxzLEIsMSksRT1kKEEsaS5wb2ludERhdGEsQiwyKSxjPWQoQSxpLmNlbGxEYXRhLEIsMyksdT17bWVzaFR5cGU6aS5tZXNoVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOmkubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxjZWxsQnVmZmVyU2l6ZTppLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZkNlbGxQaXhlbHM6aS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O00oQSx1LEIpO2JyZWFrfWNhc2UgRC5Qb2ludFNldDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5wb2ludERhdGEsQiwxKSxFPXtwb2ludFNldFR5cGU6aS5wb2ludFNldFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gfTtNKEEsRSxCKTticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkudmVydGljZXMsQiwxKSxFPWQoQSxpLmxpbmVzLEIsMiksYz1kKEEsaS5wb2x5Z29ucyxCLDMpLHU9ZChBLGkudHJpYW5nbGVTdHJpcHMsQiw0KSx5PWQoQSxpLnBvaW50RGF0YSxCLDUpLFI9ZChBLGkucG9pbnREYXRhLEIsNiksTj17cG9seURhdGFUeXBlOmkucG9seURhdGFUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTppLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxsaW5lc0J1ZmZlclNpemU6aS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOmkucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTppLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5fWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtNKEEsTixCKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgZz1BLnN0YWNrU2F2ZSgpLHI9MDt0cnl7cj1BLmNhbGxNYWluKHQuc2xpY2UoKSl9Y2F0Y2goUSl7dGhyb3cgdHlwZW9mIFE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoUSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksUX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKGcpfWxldCBvPUEuZ2V0TW9kdWxlU3Rkb3V0KCksbj1BLmdldE1vZHVsZVN0ZGVycigpLGE9W107cmV0dXJuIEkhPW51bGwmJkkubGVuZ3RoPjAmJnI9PT0wJiZJLmZvckVhY2goZnVuY3Rpb24oUSxCKXtsZXQgaT1udWxsO3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHMsRSk7aT17ZGF0YTpXdC5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9SlNPTi5wYXJzZShXdC5kZWNvZGUoYykpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSk7aT17ZGF0YTpWdChBLHMsRSl9O2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7aT17cGF0aDpRLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoUS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7aT17cGF0aDpRLmRhdGEucGF0aCxkYXRhOmRlKEEsUS5kYXRhLnBhdGgpfTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBzPW1BKEEsQik7cy5kYXRhPXAoQSxCLDAscy5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSkscy5kaXJlY3Rpb249cChBLEIsMSxqLkZsb2F0NjQpLHMubWV0YWRhdGE9bmV3IE1hcChzLm1ldGFkYXRhKSxpPXM7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAscy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOnMucG9pbnRzPUcocy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbHM+MD9zLmNlbGxzPXAoQSxCLDEscy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6cy5jZWxscz1HKHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwyLHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/cy5jZWxsRGF0YT1wKEEsQiwzLHMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6cy5jZWxsRGF0YT1HKHMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAscy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDEscy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLGouRmxvYXQzMik6cy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxzLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP3MudmVydGljZXM9cChBLEIsMSxTLlVJbnQzMik6cy52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXkscy5saW5lc0J1ZmZlclNpemU+MD9zLmxpbmVzPXAoQSxCLDIsUy5VSW50MzIpOnMubGluZXM9bmV3IFVpbnQzMkFycmF5LHMucG9seWdvbnNCdWZmZXJTaXplPjA/cy5wb2x5Z29ucz1wKEEsQiwzLFMuVUludDMyKTpzLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP3MudHJpYW5nbGVTdHJpcHM9cChBLEIsNCxTLlVJbnQzMik6cy50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsNSxzLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/cy5jZWxsRGF0YT1wKEEsQiw2LHMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6US50eXBlLGRhdGE6aX07YS5wdXNoKGYpfSkse3JldHVyblZhbHVlOnIsc3Rkb3V0Om8sc3RkZXJyOm4sb3V0cHV0czphfX12YXIgWHQ9eWU7dmFyIHdlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBtZShBLHQpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IEk9W107Zm9yKGxldCBlPTA7ZTxBLmxlbmd0aDtlKyspe2xldCBnPXBlKEFbZV0sdCk7ZyE9PW51bGwmJkkucHVzaChnKX1yZXR1cm4gSX1mdW5jdGlvbiBwZShBLHQpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IEk9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/ST1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihJPUEpLHdlJiZJIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDp0P0k6SS5zbGljZSgwKX12YXIgenQ9bWU7ZnVuY3Rpb24gU2UoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIF90PVNlO2Z1bmN0aW9uIEZlKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciB2dD1GZTtmdW5jdGlvbiBSZShBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgJHQ9UmU7YXN5bmMgZnVuY3Rpb24gTmUoQSx0LEksZSl7bGV0IGc9WHQoQSx0LEksZSkscj1bXTtyZXR1cm4gZy5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24obyl7aWYoby50eXBlPT09RC5CaW5hcnlTdHJlYW18fG8udHlwZT09PUQuQmluYXJ5RmlsZSl7bGV0IG49by5kYXRhO3IucHVzaChuKX1lbHNlIGlmKG8udHlwZT09PUQuSW1hZ2Upe2xldCBuPW8uZGF0YTtyLnB1c2goLi4uX3QobikpfWVsc2UgaWYoby50eXBlPT09RC5NZXNoKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLnZ0KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuUG9seURhdGEpe2xldCBuPW8uZGF0YTtyLnB1c2goLi4uJHQobikpfX0pLEZBKGcsenQociwhMCkpfXZhciBBST1OZTt2YXIgVWU9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsdCxJLGUsZyxyKXtsZXQgbz1hd2FpdCB4dChBLHQscik7cmV0dXJuIGF3YWl0IEFJKG8sSSxlLGcpfX07aUEoVWUpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7QnQobHQpO2V4cG9ydHtubiBhcyBkb3duc2FtcGxlLFhyIGFzIGRvd25zYW1wbGVCaW5TaHJpbmssQW4gYXMgZG93bnNhbXBsZUxhYmVsSW1hZ2UsdG4gYXMgZG93bnNhbXBsZVNpZ21hLGFuIGFzIGdhdXNzaWFuS2VybmVsUmFkaXVzLE8gYXMgZ2V0RGVmYXVsdFdlYldvcmtlcixSIGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLEwgYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCxJcyBhcyBzZXREZWZhdWx0V2ViV29ya2VyLEJ0IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLHRzIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsYkEgYXMgdmVyc2lvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/downsample/python/itkwasm-downsample-wasi/itkwasm_downsample_wasi/_version.py b/packages/downsample/python/itkwasm-downsample-wasi/itkwasm_downsample_wasi/_version.py index daa50c7cf..aa56ed404 100644 --- a/packages/downsample/python/itkwasm-downsample-wasi/itkwasm_downsample_wasi/_version.py +++ b/packages/downsample/python/itkwasm-downsample-wasi/itkwasm_downsample_wasi/_version.py @@ -1 +1 @@ -__version__ = "1.4.2" +__version__ = "1.4.3" diff --git a/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py b/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py index daa50c7cf..aa56ed404 100644 --- a/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py +++ b/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py @@ -1 +1 @@ -__version__ = "1.4.2" +__version__ = "1.4.3" diff --git a/packages/downsample/typescript/package.json b/packages/downsample/typescript/package.json index 37d345cf0..ea176f62e 100644 --- a/packages/downsample/typescript/package.json +++ b/packages/downsample/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/downsample", - "version": "1.4.2", + "version": "1.4.3", "packageManager": "pnpm@9.6.0", "description": "Pipelines for downsampling images.", "type": "module", From 2d2a5b883ac399dde99996e8bf0b4f022fb1bdbb Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Thu, 24 Oct 2024 15:27:57 -0400 Subject: [PATCH 27/39] build(image-io): add pixi configuration --- packages/image-io/.gitignore | 2 +- packages/image-io/.npmrc | 1 + packages/image-io/environment.yml | 9 - packages/image-io/package.json | 19 +- packages/image-io/pixi.lock | 6098 +++++++++++++++++ packages/image-io/pixi.toml | 139 + .../itkwasm_image_io_emscripten/js_package.py | 2 +- .../python/itkwasm-image-io/tests/fixtures.py | 4 + .../tests/test_bio_rad_async.py | 5 +- .../tests/test_metaimage_async.py | 5 +- .../tests/test_read_write_image_async.py | 5 +- pnpm-lock.yaml | 3 - 12 files changed, 6260 insertions(+), 32 deletions(-) create mode 100644 packages/image-io/.npmrc delete mode 100644 packages/image-io/environment.yml create mode 100644 packages/image-io/pixi.lock create mode 100644 packages/image-io/pixi.toml diff --git a/packages/image-io/.gitignore b/packages/image-io/.gitignore index 3f2eb0748..ebd86960e 100644 --- a/packages/image-io/.gitignore +++ b/packages/image-io/.gitignore @@ -3,5 +3,5 @@ emscripten-build/ wasi-build/ package-lock.json test/data/ -micromamba/ typescript/src/version.ts +pyodide/ diff --git a/packages/image-io/.npmrc b/packages/image-io/.npmrc new file mode 100644 index 000000000..a4be22c92 --- /dev/null +++ b/packages/image-io/.npmrc @@ -0,0 +1 @@ +git-checks=false diff --git a/packages/image-io/environment.yml b/packages/image-io/environment.yml deleted file mode 100644 index a119b0c46..000000000 --- a/packages/image-io/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: image-io -channels: - - conda-forge -dependencies: - - pytest - - python=3.11 - - pip - - pip: - - hatch diff --git a/packages/image-io/package.json b/packages/image-io/package.json index fc1d8948b..b4cc94e61 100644 --- a/packages/image-io/package.json +++ b/packages/image-io/package.json @@ -1,9 +1,8 @@ { "name": "@itk-wasm/image-io-build", - "version": "1.0.0", + "version": "1.3.1", "private": true, - "packageManager": "pnpm@9.6.0", - "description": "scripts to generate @itk-wasm/compare-stringify itk-wasm artifacts.", + "description": "Input and output for scientific and medical image file formats.", "type": "module", "itk-wasm": { "emscripten-docker-image": "itkwasm/emscripten:latest", @@ -19,27 +18,23 @@ "build:emscripten:debug": "itk-wasm pnpm-script build:emscripten:debug", "build:wasi": "itk-wasm pnpm-script build:wasi", "build:wasi:debug": "itk-wasm pnpm-script build:wasi:debug", - "build:python:wasi": "itk-wasm pnpm-script build:python:wasi", + "build:python:wasi": "echo 'No build:python:wasi script required with pixi'", "bindgen:typescript": "itk-wasm pnpm-script bindgen:typescript", "bindgen:python": "itk-wasm pnpm-script bindgen:python", "build:gen:typescript": "itk-wasm pnpm-script build:gen:typescript", - "build:gen:python": "itk-wasm pnpm-script build:gen:python", - "build:micromamba": "itk-wasm pnpm-script build:micromamba", - "build:python:versionSync": "itk-wasm pnpm-script build:python:versionSync", - "publish:python": "itk-wasm pnpm-script publish:python", + "build:gen:python": "pnpm build:wasi && pnpm bindgen:python", "test": "pnpm test:data:download && pnpm build:gen:python && pnpm test:python", "test:data:download": "dam download test/data test/data.tar.gz bafybeibyjhkcrinl2lotw5g2vngjs23aaenv3tjzxssm35jxaci5ylsqia https://github.com/InsightSoftwareConsortium/ITK-Wasm/releases/download/itk-wasm-v1.0.0-b.155/image-io-test-data.tar.gz https://w3s.link/ipfs/bafybeiewe4rankwwe7nw7qm2g3qclflhci2e53wthn3gukdlhbff64pua4/data.tar.gz", "test:data:pack": "dam pack test/data test/data.tar.gz", - "test:python:wasi": "itk-wasm pnpm-script test:python:wasi", - "test:python:emscripten": "itk-wasm pnpm-script test:python:emscripten", - "test:python:dispatch": "itk-wasm pnpm-script test:python:emscripten", + "test:python:wasi": "pnpm test:data:download && pixi run test-wasi", + "test:python:emscripten": "pnpm test:data:download && pixi run test-emscripten", + "test:python:dispatch": "pnpm test:data:download && pixi run test-dispatch", "test:python": "itk-wasm pnpm-script test:python", "test:wasi": "itk-wasm pnpm-script test:wasi" }, "license": "Apache-2.0", "devDependencies": { "@itk-wasm/dam": "^1.1.0", - "@thewtex/setup-micromamba": "^1.9.7", "itk-wasm": "workspace:^" } } diff --git a/packages/image-io/pixi.lock b/packages/image-io/pixi.lock new file mode 100644 index 000000000..e662bfdda --- /dev/null +++ b/packages/image-io/pixi.lock @@ -0,0 +1,6098 @@ +version: 5 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + python: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.12.1-hf0a5ef3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.16-h922389a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.22-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.0.0-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.44-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-hec21d91_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.4.0-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.2-h0d9d63b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.0.0-py312h5ab5af3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.11-h86ecc28_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-hfce79cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.2-h9f1df11_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.0.0-py312haf37ca6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.22-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.0-hfc51747_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py312h381445a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl +packages: +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23621 + timestamp: 1650670423406 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23712 + timestamp: 1650670790230 +- kind: conda + name: anyio + version: 4.6.2.post1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - uvloop >=0.21.0b1 + - trio >=0.26.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/anyio?source=compressed-mapping + size: 109864 + timestamp: 1728935803440 +- kind: pypi + name: attrs + version: 24.2.0 + url: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + sha256: 81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'benchmark' + - hypothesis ; extra == 'benchmark' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pympler ; extra == 'benchmark' + - pytest-codspeed ; extra == 'benchmark' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pytest-xdist[psutil] ; extra == 'benchmark' + - pytest>=4.3.0 ; extra == 'benchmark' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'cov' + - coverage[toml]>=5.3 ; extra == 'cov' + - hypothesis ; extra == 'cov' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'cov' + - pympler ; extra == 'cov' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'cov' + - pytest-xdist[psutil] ; extra == 'cov' + - pytest>=4.3.0 ; extra == 'cov' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'dev' + - hypothesis ; extra == 'dev' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'dev' + - pre-commit ; extra == 'dev' + - pympler ; extra == 'dev' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'dev' + - pytest-xdist[psutil] ; extra == 'dev' + - pytest>=4.3.0 ; extra == 'dev' + - cogapp ; extra == 'docs' + - furo ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-notfound-page ; extra == 'docs' + - sphinxcontrib-towncrier ; extra == 'docs' + - towncrier<24.7 ; extra == 'docs' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'tests' + - hypothesis ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests' + - pympler ; extra == 'tests' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests' + - pytest-xdist[psutil] ; extra == 'tests' + - pytest>=4.3.0 ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + requires_python: '>=3.7' +- kind: conda + name: backports + version: '1.0' + build: pyhd8ed1ab_4 + build_number: 4 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + sha256: 31b51537ce7d2ba8b5b3d0095f1813711884304ac1701bc55938ca75f6c82e19 + md5: 67bdebbc334513034826e9b63f769d4c + depends: + - python >=3 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6989 + timestamp: 1722295637981 +- kind: conda + name: backports.tarfile + version: 1.0.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + sha256: 7ba30f32daad2e7ca251508525185ba170eedc14123572611c2acf261c7956b3 + md5: c747b1d79f136013c3b7ebcba876afa6 + depends: + - backports + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/backports-tarfile?source=hash-mapping + size: 31951 + timestamp: 1712700751335 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h2466b09_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 54927 + timestamp: 1720974860185 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h68df207_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb + md5: 56398c28220513b9ea13d7b450acfb20 + depends: + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 189884 + timestamp: 1720974504976 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 122909 + timestamp: 1720974522888 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: h56e8100_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 + md5: 4c4fd67c18619be5aa65dc5b6c72e490 + license: ISC + purls: [] + size: 158773 + timestamp: 1725019107649 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 + license: ISC + purls: [] + size: 159003 + timestamp: 1725018903918 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hcefe29a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + sha256: 2a2d827bee3775a85f0f1b2f2089291475c4416336d1b3a8cbce2964db547af8 + md5: 70e57e8f59d2c98f86b49c69e5074be5 + license: ISC + purls: [] + size: 159106 + timestamp: 1725020043153 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + purls: [] + size: 158482 + timestamp: 1725019034582 +- kind: conda + name: certifi + version: 2024.8.30 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping + size: 163752 + timestamp: 1725278204397 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h06ac9bb_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 + md5: a861504bbea4161a9170b85d4d2be840 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 294403 + timestamp: 1725560714366 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 281206 + timestamp: 1725560813378 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h4389bb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + sha256: ac007bf5fd56d13e16d95eea036433012f2e079dc015505c8a79efebbad1fcbc + md5: 08310c1a22ef957d537e547f8d484f92 + depends: + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 288142 + timestamp: 1725560896359 +- kind: conda + name: cffi + version: 1.17.1 + build: py312hac81daf_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + sha256: 1162e3ca039e7ca7c0e78f0a020ed1bde968096841b663e3f393c966eb82f0f0 + md5: 1a256e5581b1099e9295cb84d53db3ea + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 312892 + timestamp: 1725561779888 +- kind: conda + name: click + version: 8.1.7 + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 84437 + timestamp: 1692311973840 +- kind: conda + name: click + version: 8.1.7 + build: win_pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 + md5: 3549ecbceb6cd77b91a105511b7d0786 + depends: + - __win + - colorama + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 85051 + timestamp: 1692312207348 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + sha256: ba9e5aced2e7dc0bbc48f60bf38f514839424a01975fb2aed30e9246c2f82c7c + md5: 2abada8c216dd6e32514535a3fa245d4 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1488388 + timestamp: 1729286882127 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312he723553_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + sha256: bd9cc8410bf31ac8b90d63dda92d5810af16c3841ca6dd09be9b7f9c5c7688ba + md5: bfacbf2e4560c7d6416d40f573961918 + depends: + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1480456 + timestamp: 1729287055014 +- kind: conda + name: dbus + version: 1.13.6 + build: h12b9eeb_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + sha256: 5fe76bdf27a142cfb9da0fb3197c562e528d2622b573765bee5c9904cf5e6b6b + md5: f3d63805602166bac09386741e00935e + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 672759 + timestamp: 1640113663539 +- kind: conda + name: dbus + version: 1.13.6 + build: h5008d03_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 + md5: ecfff944ba3960ecb334b9a2663d708d + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 618596 + timestamp: 1640112124844 +- kind: conda + name: distlib + version: 0.3.9 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb + md5: fe521c1608280cc2803ebd26dc252212 + depends: + - python 2.7|>=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/distlib?source=hash-mapping + size: 276214 + timestamp: 1728557312342 +- kind: conda + name: editables + version: '0.5' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + sha256: de160a7494e7bc72360eea6a29cbddf194d0a79f45ff417a4de20e6858cf79a9 + md5: 9873878e2a069bc358b69e9a29c1ecd5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/editables?source=hash-mapping + size: 10988 + timestamp: 1705857085102 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: expat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + sha256: c827521e080d0f3395655924f1c364d48a1eac1ff3e193a12d0441e9c3b51e91 + md5: 901a44b341632b0c233756ed5abcd78b + depends: + - libexpat 2.6.3 h5ad3122_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 130283 + timestamp: 1725568848182 +- kind: conda + name: filelock + version: 3.16.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + purls: + - pkg:pypi/filelock?source=hash-mapping + size: 17357 + timestamp: 1726613593584 +- kind: conda + name: freetype + version: 2.12.1 + build: h267a509_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 + md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 634972 + timestamp: 1694615932610 +- kind: conda + name: freetype + version: 2.12.1 + build: hadb7bae_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + sha256: 791673127e037a2dc0eebe122dc4f904cb3f6e635bb888f42cbe1a76b48748d9 + md5: e6085e516a3e304ce41a8ee08b9b89ad + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 596430 + timestamp: 1694616332835 +- kind: conda + name: freetype + version: 2.12.1 + build: hdaf720e_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda + sha256: 2c53ee8879e05e149a9e525481d36adfd660a6abda26fd731376fa64ff03e728 + md5: 3761b23693f768dc75a8fd0a73ca053f + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: GPL-2.0-only OR FTL + purls: [] + size: 510306 + timestamp: 1694616398888 +- kind: conda + name: freetype + version: 2.12.1 + build: hf0a5ef3_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.12.1-hf0a5ef3_2.conda + sha256: 7af93030f4407f076dce181062360efac2cd54dce863b5d7765287a6f5382537 + md5: a5ab74c5bd158c3d5532b66d8d83d907 + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 642092 + timestamp: 1694617858496 +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + sha256: 7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + sha256: 4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + sha256: 1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: conda + name: h11 + version: 0.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/h11?source=hash-mapping + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + size: 46754 + timestamp: 1634280590080 +- kind: conda + name: hatch + version: 1.13.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + sha256: 675b0304b129a4dbc39b8e6f337cea51adebef20508a656f43b6e6b43d9cf458 + md5: b8a6437f94d29aef00decdbe1174be27 + depends: + - click >=8.0.6 + - hatchling >=1.24.2 + - httpx >=0.22.0 + - hyperlink >=21.0.0 + - keyring >=23.5.0 + - packaging >=23.2 + - pexpect >=4.8,<5 + - platformdirs >=2.5.0 + - python >=3.8 + - rich >=11.2.0 + - shellingham >=1.4.0 + - tomli-w >=1.0 + - tomlkit >=0.11.1 + - userpath >=1.7,<2 + - uv >=0.1.35 + - virtualenv >=20.26.1 + - zstandard <1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatch?source=hash-mapping + size: 177173 + timestamp: 1728879212263 +- kind: conda + name: hatchling + version: 1.25.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + sha256: fb8a16a913f909d8f7d2ae95c18a1aeb7be3eebfb1b7a4246500c06d54498f89 + md5: 7571d6e5561b04aef679a11904dfcebf + depends: + - editables >=0.3 + - importlib-metadata + - packaging >=21.3 + - pathspec >=0.10.1 + - pluggy >=1.0.0 + - python >=3.7 + - tomli >=1.2.2 + - trove-classifiers + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatchling?source=hash-mapping + size: 64580 + timestamp: 1719090878694 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: httpcore + version: 1.0.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + sha256: 8952c3f1eb18bf4d7e813176c3b23e0af4e863e8b05087e73f74f371d73077ca + md5: b8e1901ef9a215fc41ecfb6bef7e0943 + depends: + - anyio >=3.0,<5.0 + - certifi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + size: 45711 + timestamp: 1727821031365 +- kind: conda + name: httpx + version: 0.27.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 14646 + timestamp: 1619110249723 +- kind: conda + name: hyperlink + version: 21.0.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + sha256: 026cb82ada41be9ee2836a2ace526e85c4603e77617887c41c6e62c9bde798b3 + md5: 1303beb57b40f8f4ff6fb1bb23bf0553 + depends: + - idna >=2.6 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperlink?source=hash-mapping + size: 72732 + timestamp: 1610092261086 +- kind: pypi + name: hypothesis + version: 6.115.5 + url: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + sha256: b7733459ae9a93020fac3b91b41473c9b85e975139a152a70d88f3a5caa3fa3f + requires_dist: + - attrs>=22.2.0 + - sortedcontainers<3.0.0,>=2.1.0 + - exceptiongroup>=1.0.0 ; python_full_version < '3.11' + - black>=19.10b0 ; extra == 'all' + - click>=7.0 ; extra == 'all' + - crosshair-tool>=0.0.74 ; extra == 'all' + - django>=4.2 ; extra == 'all' + - dpcontracts>=0.4 ; extra == 'all' + - hypothesis-crosshair>=0.0.16 ; extra == 'all' + - lark>=0.10.1 ; extra == 'all' + - libcst>=0.3.16 ; extra == 'all' + - numpy>=1.19.3 ; extra == 'all' + - pandas>=1.1 ; extra == 'all' + - pytest>=4.6 ; extra == 'all' + - python-dateutil>=1.4 ; extra == 'all' + - pytz>=2014.1 ; extra == 'all' + - redis>=3.0.0 ; extra == 'all' + - rich>=9.0.0 ; extra == 'all' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'all') or (sys_platform == 'win32' and extra == 'all') + - click>=7.0 ; extra == 'cli' + - black>=19.10b0 ; extra == 'cli' + - rich>=9.0.0 ; extra == 'cli' + - libcst>=0.3.16 ; extra == 'codemods' + - hypothesis-crosshair>=0.0.16 ; extra == 'crosshair' + - crosshair-tool>=0.0.74 ; extra == 'crosshair' + - python-dateutil>=1.4 ; extra == 'dateutil' + - django>=4.2 ; extra == 'django' + - dpcontracts>=0.4 ; extra == 'dpcontracts' + - black>=19.10b0 ; extra == 'ghostwriter' + - lark>=0.10.1 ; extra == 'lark' + - numpy>=1.19.3 ; extra == 'numpy' + - pandas>=1.1 ; extra == 'pandas' + - pytest>=4.6 ; extra == 'pytest' + - pytz>=2014.1 ; extra == 'pytz' + - redis>=3.0.0 ; extra == 'redis' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'zoneinfo') or (sys_platform == 'win32' and extra == 'zoneinfo') + requires_python: '>=3.9' +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12129203 + timestamp: 1720853576813 +- kind: conda + name: icu + version: '75.1' + build: hf9b3779_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 + md5: 268203e8b983fddb6412b36f2024e75c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12282786 + timestamp: 1720853454991 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 11857802 + timestamp: 1720853997952 +- kind: conda + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=hash-mapping + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: importlib_resources + version: 6.4.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping + size: 32725 + timestamp: 1725921462405 +- kind: conda + name: iniconfig + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 + md5: f800d2da156d08e289b14e87e43c1ae5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=hash-mapping + size: 11101 + timestamp: 1673103208955 +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: a1b4e5511c2274025bffe80d081ef79ee41de580df80311007af1ec05e2774db + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 0f0dcce9df862831e705eebf0ffa95de554b17027f69d67b31b30dcb8d838019 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 88344f4c7e8a74dfdeb98e20232d1a9565eb7c381d8242534588ecc4e745ffb3 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + sha256: e5ffacab2c8609979c78c2d2e02ee7e6abd611261aac0613289d98e7c277cd83 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 21c7b5c451f73c8073eb3b5dd85f7c654399cdc25dd51669bfbbafa611aa4649 + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: b6af0e82dae0efa95ad87f36ccd55a955383b34a6bd8a036894fb96a3933615a + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 8ca83de9c269e6b20648f2391aa2bf96903b8ed645c3d8cd40d90b939dda439e + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + sha256: 6affe6986927fd176c176f5464d9ea9e737b85d8745f5c4129da910fd16235cb + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + sha256: ad59e6066dba25d6b0803023e95c7633a80e7b9c1a9ff89a41c97eae5a60e06f + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 6e8600df87c59233968013d162c5a353ca4c8f843c76117b52347aec20ff1620 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 86026c853f1fd0b13e282f952cff7455df0ac131cc608df8669ce335633eef0a + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: e8d90842d703877c4ce777efece3db478c8ed5e3a18488e277a480f05d61ebb0 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 393d711f9edb248aed402e7fc9613045536dbd6b45fc8db638a28d0a409fe974 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8c0eacb3aa100e4b369a673bb0e65c3c48c411bc4b716069bce4cee8c3f9e1cc + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: d969a2ab2775b2ace36edee274ffe4839b21c7ccd634844082028f9f373dfedb + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 11a34ac45b960aa883e1758ead15c5394814964573c93d736fc04f021c18cd22 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 3c10f157bddbdf86b596ec2742f17bcc35cd6ce7bd64bba712a2a0c0858c2dc7 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 914cae65049842affc820471e149b2cdd55d305ff1a740c34a47e1b1af567361 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + sha256: b8b746f6d5597687d0b50dd81d650da0293f2c3c90f31212baefdf46edb727d6 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 84bd859eeb17aed3de39f0b3357525a4bfac0db17263a8d36cd641e5f8c49b46 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + sha256: 31f24c218c763b2c15953453cc366c5ba09e7a5c7d47d432a24c0b6b12249206 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 5cd8ab0781e08a4022e36094bb60652d0ee2b7cd1912f325e8f32d8bd5501fcf + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 583b665d6b8578ac93691afb796faf69e30b8db8a205754cdc746707f9589fcd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: e2dcda0a07ccb6b9b518d3cc4413387a44c30a313c22e15bf818af06c7da8bfd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 15eab6a72bebeccfb8a0fb291b65c305e46776a18a8f3cb91f199fc8ecd137a1 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8a2d3f2872375a9c2694bb34a2e061a4d2666f8c13390f03d94219ba8370649e + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 3f41cff2136f69ae5c2ce6166191dff86e4722097411aaaba07a74884d36ff73 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: dde112dbb9b695c1908692a0086f60da8d5a123f7e959ebc5aaec2825aaf9793 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: ff2ca7cdf42c8c32b20e1ecf7ee0a0be68e885ce673c565e72a4876b28d2e2f3 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: b3c154e7a92be2ad48e6bf8bd5a8a17610f890bb420abb54dd2bde15b1c9c52c + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + sha256: 45374d3c38884ed02e0dfebf73f363e265184a50f7c46d55d8c9217e690a571f + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 8dd071dbb1ba1c8fcf26a4011fc3b7069d444e10bc56279d7b26fd3193ac58aa + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + sha256: 0b787ee92418a1f965c52eea1fd41a7aef4424eb6e07a290b0e1ddebf50a09e1 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + sha256: ee3defc13dc65f56127e468c145e9249265c275b63ea3c530c1b88f1df4a7033 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 72f82fab54c4ee4c6c579cfd5c963cba9a84ecc9909e61f3641caa9fef94b40c + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: eff3cd27756e96ebd31500ef258d0cc4a56e48c2c25c4533300469246623d7aa + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itkwasm + version: 1.0b179 + url: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + sha256: 43558ccd082f3dc3c9b3b2379cdb197635b33620d41dbc6c1fa9186d03c22a7e + requires_dist: + - importlib-metadata ; python_full_version < '3.10' + - numpy + - platformdirs ; sys_platform != 'emscripten' + - typing-extensions + - wasmtime>=13.0.2 ; sys_platform != 'emscripten' + requires_python: '>=3.8' +- kind: conda + name: jaraco.classes + version: 3.4.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + sha256: 538b1c6df537a36c63fd0ed83cb1c1c25b07d8d3b5e401991fdaff261a4b5b4d + md5: 7b756504d362cbad9b73a50a5455cafd + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-classes?source=hash-mapping + size: 12223 + timestamp: 1713939433204 +- kind: conda + name: jaraco.context + version: 5.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + sha256: 9e2aeacb1aed3ab4fc5883a357e8a874e12f687af300f8708ec12de2995e17d2 + md5: 72d7ad2dcd0f37eccb2ee35a1c8f6aaa + depends: + - backports.tarfile + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-context?source=hash-mapping + size: 12456 + timestamp: 1714372284922 +- kind: conda + name: jaraco.functools + version: 4.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + sha256: d2e866fd22a48eaa2f795b6a3b0bf16f066293322ce04dd65cca36267160ead6 + md5: 547670a612fd335eaa5ffbf0fa75cb64 + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-functools?source=hash-mapping + size: 15192 + timestamp: 1701695329516 +- kind: conda + name: jeepney + version: 0.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + sha256: 16639759b811866d63315fe1391f6fb45f5478b823972f4d3d9f0392b7dd80b8 + md5: 9800ad1699b42612478755a2d26c722d + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jeepney?source=hash-mapping + size: 36895 + timestamp: 1649085298891 +- kind: conda + name: jq + version: 1.7.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + sha256: 53437ca79e28003faac8058f6c025c83a819e122d3a0fb70624e6da0f77ab126 + md5: 397702b2c1e53f0f0312d2b170d2e699 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 334346 + timestamp: 1702502754422 +- kind: conda + name: jq + version: 1.7.1 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + sha256: e530cf5800e937bce7847a023a998db504e333a928b469c45a1752535593e762 + md5: dbf665694fb28d86d77cca18e5dd530c + depends: + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 317604 + timestamp: 1702501287237 +- kind: conda + name: jq + version: 1.7.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d + md5: 80814f94713e35df60aad6c4b235de87 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 318956 + timestamp: 1702500793203 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh534df25_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + sha256: 8d8fc7d67e9bd387403720447abb1b5539a6f6ca8e3aba8406e0987213bfa0ce + md5: 2099f34ea2f3534f7adc5c21cc199e1b + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37045 + timestamp: 1726971145252 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + sha256: 69626899dfac975090032f7af782c143b569f7706e808a4eca67a9a5aa134a15 + md5: 1c74a03431815d5e091585bb04e86f12 + depends: + - __win + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + - pywin32-ctypes >=0.2.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37407 + timestamp: 1726971355676 +- kind: conda + name: keyring + version: 25.4.1 + build: pyha804496_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + sha256: 6deeb4fa0f01447a5e8bd7261044c45d139e27d36df769e5a3a16ce55607da14 + md5: ef6f2de3c8eef0ee9fd31f2267c27bf2 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.8 + - secretstorage >=3.2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 36717 + timestamp: 1726971094601 +- kind: conda + name: lcms2 + version: '2.16' + build: h67d730c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda + sha256: f9fd9e80e46358a57d9bb97b1e37a03da4022143b019aa3c4476d8a7795de290 + md5: d3592435917b62a8becff3a60db674f6 + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 507632 + timestamp: 1701648249706 +- kind: conda + name: lcms2 + version: '2.16' + build: h922389a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.16-h922389a_0.conda + sha256: be4847b1014d3cbbc524a53bdbf66182f86125775020563e11d914c8468dd97d + md5: ffdd8267a04c515e7ce69c727b051414 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 296219 + timestamp: 1701647961116 +- kind: conda + name: lcms2 + version: '2.16' + build: ha0e7c42_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + sha256: 151e0c84feb7e0747fabcc85006b8973b22f5abbc3af76a9add0b0ef0320ebe4 + md5: 66f6c134e76fe13cce8a9ea5814b5dd5 + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 211959 + timestamp: 1701647962657 +- kind: conda + name: lcms2 + version: '2.16' + build: hb7c19ff_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 + md5: 51bb7010fc86f70eee639b4bb7a894f5 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 245247 + timestamp: 1701647787198 +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe + md5: 048b02e3962f066da18efe3a21b77672 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 669211 + timestamp: 1729655358674 +- kind: conda + name: ld_impl_linux-aarch64 + version: '2.43' + build: h80caac9_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + sha256: 80ec7e8f006196808fac5bd4b3773a652847f97bbf08044cd87731424ac64f8b + md5: fcbde5ea19d55468953bf588770c0501 + constrains: + - binutils_impl_linux-aarch64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 698245 + timestamp: 1729655345825 +- kind: conda + name: lerc + version: 4.0.0 + build: h27087fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 + md5: 76bbff344f0134279f225174e9064c8f + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 281798 + timestamp: 1657977462600 +- kind: conda + name: lerc + version: 4.0.0 + build: h4de3ea5_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 + sha256: 2d09ef9b7796d83364957e420b41c32d94e628c3f0520b61c332518a7b5cd586 + md5: 1a0ffc65e03ce81559dbcb0695ad1476 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 262096 + timestamp: 1657978241894 +- kind: conda + name: lerc + version: 4.0.0 + build: h63175ca_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 + sha256: f4f39d7f6a2f9b407f8fb567a6c25755270421731d70f0ff331f5de4fa367488 + md5: 1900cb3cab5055833cfddb0ba233b074 + depends: + - vc >=14.2,<15 + - vs2015_runtime >=14.29.30037 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 194365 + timestamp: 1657977692274 +- kind: conda + name: lerc + version: 4.0.0 + build: h9a09cb3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + sha256: 6f068bb53dfb6147d3147d981bb851bb5477e769407ad4e6a68edf482fdcb958 + md5: de462d5aacda3b30721b512c5da4e742 + depends: + - libcxx >=13.0.1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 215721 + timestamp: 1657977558796 +- kind: conda + name: libcxx + version: 19.1.2 + build: ha82da77_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 + md5: ba89ad7c5477e6a9d020020fcdadd37d + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 521199 + timestamp: 1729038190391 +- kind: conda + name: libdeflate + version: '1.22' + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.22-h2466b09_0.conda + sha256: 579c634b7de8869cb1d76eccd4c032dc275d5a017212128502ea4dc828a5b361 + md5: a3439ce12d4e3cd887270d9436f9a4c8 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 155506 + timestamp: 1728177485361 +- kind: conda + name: libdeflate + version: '1.22' + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.22-h86ecc28_0.conda + sha256: 986207f130703897300ddc3637c52e86a5b21c735fe384bf48554d9a6d91c56d + md5: ff6a44e8b1707d02be2fe9a36ea88d4a + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 69601 + timestamp: 1728177137503 +- kind: conda + name: libdeflate + version: '1.22' + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + sha256: 780f0530a3adfc1497ba49d626931c6afc978c540e1abfde6ccd57128ded6ad6 + md5: b422943d5d772b7cc858b36ad2a92db5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 72242 + timestamp: 1728177071251 +- kind: conda + name: libdeflate + version: '1.22' + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + sha256: 3552894ca62bebc33d05982937cda25a4fa19e56a82af2ff20944ff4c2532fda + md5: 2d3e3f3d8ab315748420ef58d5a3ae0f + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 54089 + timestamp: 1728177149927 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + sha256: 4bb47bb2cd09898737a5211e2992d63c555d63715a07ba56eae0aff31fb89c22 + md5: 59f4c43bb1b5ef1c71946ff2cbf59524 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 73616 + timestamp: 1725568742634 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + sha256: 02341c9c35128055fd404dfe675832b80f2bf9dbb99539457652c11c06e52757 + md5: 1d2b842bb76e268625e8ee8d0a9fe8c3 + depends: + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 72342 + timestamp: 1725568840022 +- kind: conda + name: libexpat + version: 2.6.3 + build: he0c23c2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + sha256: 9543965d155b8da96fc67dd81705fe5c2571c7c00becc8de5534c850393d4e3c + md5: 21415fbf4d0de6767a621160b43e5dea + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 138992 + timestamp: 1725569106114 +- kind: conda + name: libexpat + version: 2.6.3 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a + md5: 5f22f07c2ab2dea8c66fe9585a062c96 + depends: + - __osx >=11.0 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 63895 + timestamp: 1725568783033 +- kind: conda + name: libffi + version: 3.4.2 + build: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + purls: [] + size: 39020 + timestamp: 1636488587153 +- kind: conda + name: libffi + version: 3.4.2 + build: h3557bc0_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 59450 + timestamp: 1636488255090 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libffi + version: 3.4.2 + build: h8ffe710_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 + md5: 2c96d1b6915b408893f9472569dee135 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: MIT + license_family: MIT + purls: [] + size: 42063 + timestamp: 1636489106777 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 + md5: 511b511c5445e324066c3377481bcab8 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==14.2.0=*_1 + - libgomp 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 535243 + timestamp: 1729089435134 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: he9431aa_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 + md5: 0694c249c61469f2c0f7e2990782af21 + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54104 + timestamp: 1729089444587 +- kind: conda + name: libglib + version: 2.82.2 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 3931898 + timestamp: 1729191404130 +- kind: conda + name: libglib + version: 2.82.2 + build: hc486b8e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + sha256: 6797d24de7acd298f81a86078c64e4f3fea6d551a3e8892205c9e72a37a7cc3c + md5: 47f6d85fe47b865e56c539f2ba5f4dad + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 4020802 + timestamp: 1729191545578 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libgomp + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf + md5: 376f0e73abbda6d23c0cb749adc195ef + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 463521 + timestamp: 1729089357313 +- kind: conda + name: libiconv + version: '1.17' + build: h31becfc_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705787 + timestamp: 1702684557134 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705775 + timestamp: 1702682170569 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.0.0-h31becfc_1.conda + sha256: 675bc1f2a8581cd34a86c412663ec29c5f90c1d9f8d11866aa1ade5cdbdf8429 + md5: ed24e702928be089d9ba3f05618515c6 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 647126 + timestamp: 1694475003570 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hb547adb_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + sha256: a42054eaa38e84fc1e5ab443facac4bbc9d1b6b6f23f54b7bf4f1eb687e1d993 + md5: 3ff1e053dc3a2b8e36b9bfa4256a58d1 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 547541 + timestamp: 1694475104253 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hcfcfb64_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda + sha256: 4e7808e3098b4b4ed7e287f63bb24f9045cc4d95bfd39f0db870fc2837d74dff + md5: 3f1b948619c45b1ca714d60c7389092c + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 822966 + timestamp: 1694475223854 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f + md5: ea25936bb4080d843790b586850f82b8 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 618575 + timestamp: 1694474974816 +- kind: conda + name: libnsl + version: 2.0.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 34501 + timestamp: 1697358973269 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libpng + version: 1.6.44 + build: h3ca93ac_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda + sha256: 0d3d6ff9225f6918ac225e3839c0d91e5af1da08a4ebf59cac1bfd86018db945 + md5: 639ac6b55a40aa5de7b8c1b4d78f9e81 + depends: + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: zlib-acknowledgement + purls: [] + size: 348933 + timestamp: 1726235196095 +- kind: conda + name: libpng + version: 1.6.44 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + sha256: e5b14f7a01c2db4362d8591f42f82f336ed48d5e4079e4d1f65d0c2a3637ea78 + md5: f4cc49d7aa68316213e4b12be35308d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 290661 + timestamp: 1726234747153 +- kind: conda + name: libpng + version: 1.6.44 + build: hc14010f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + sha256: 38f8759a3eb8060deabd4db41f0f023514d853e46ddcbd0ba21768fc4e563bb1 + md5: fb36e93f0ea6a6f5d2b99984f34b049e + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 263385 + timestamp: 1726234714421 +- kind: conda + name: libpng + version: 1.6.44 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.44-hc4a20ef_0.conda + sha256: 23b5ce15cf9c6017641a8396bab00ae807dd9f662718cfa7f61de114d0c97647 + md5: 5d25802b25fcc7419fa13e21affaeb3a + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 294907 + timestamp: 1726236639270 +- kind: conda + name: libsqlite + version: 3.47.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + sha256: 4f3cd0477c831eab48fb7fa3ed91d918aeb644fad9b4014726d445339750cdcc + md5: 964bef59135d876c596ae67b3315e812 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Unlicense + purls: [] + size: 884970 + timestamp: 1729592254351 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + sha256: 76ffc7a5823b51735c11d535f3666b3c9c7d1519f9fbb6fa9cdff79db01960b9 + md5: 540296f0ce9d3352188c15a89b30b9ac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 874704 + timestamp: 1729591931557 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hbaaea75_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + sha256: 76aa4bbbaa2334689b16048f04ac4c7406e9bfb1f225ac7107fd2a73f85329cf + md5: 5bbe4802d5460b80620411fe1da8fec3 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 837789 + timestamp: 1729592072314 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + sha256: 469ed05e9a1622b0204a2b6cf620c9054bf6904e2ed818a1f91ee96a7bc64517 + md5: ccbe261fb8c1f1cd1a3122592247d3c4 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 1042108 + timestamp: 1729592001716 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: h3f4de04_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 + md5: 37f489acd39e22b623d2d1e5ac6d195c + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3816794 + timestamp: 1729089463404 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54105 + timestamp: 1729027780628 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: hf1166c9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd + md5: 0e75771b8a03afae5a2c6ce71bc733f5 + depends: + - libstdcxx 14.2.0 h3f4de04_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54133 + timestamp: 1729089498541 +- kind: conda + name: libtiff + version: 4.7.0 + build: he137b08_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + sha256: 9890121db85f6ef463fe12eb04ef1471176e3ef3b5e2d62e8d6dac713df00df4 + md5: 63872517c98aa305da58a757c443698e + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 428156 + timestamp: 1728232228989 +- kind: conda + name: libtiff + version: 4.7.0 + build: hec21d91_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-hec21d91_1.conda + sha256: 14ecb9e129b1b5ffd6d4bee48de95cd2cd0973c712e1b965d3ef977cca23936d + md5: 1f80061f5ba6956fcdc381f34618cd8d + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 464938 + timestamp: 1728232266969 +- kind: conda + name: libtiff + version: 4.7.0 + build: hfc51747_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.0-hfc51747_1.conda + sha256: 902cb9f7f54d17dcfd54ce050b1ce2bc944b9bbd1748913342c2ea1e1140f8bb + md5: eac317ed1cc6b9c0af0c27297e364665 + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 978865 + timestamp: 1728232594877 +- kind: conda + name: libtiff + version: 4.7.0 + build: hfce79cd_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-hfce79cd_1.conda + sha256: 97ba24c74750b6e731b3fe0d2a751cda6148b4937d2cc3f72d43bf7b3885c39d + md5: b9abf45f7c64caf3303725f1aa0e9a4d + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=17 + - libdeflate >=1.22,<1.23.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 366323 + timestamp: 1728232400072 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libuuid + version: 2.38.1 + build: hb4cce97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 35720 + timestamp: 1680113474501 +- kind: conda + name: libuv + version: 1.49.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 + md5: 4bc348e3a1a74d20a3f9beb866d75e0a + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 410500 + timestamp: 1729322654121 +- kind: conda + name: libuv + version: 1.49.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 + md5: 1899e1ec2be63386c41c4db31d3056af + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 627484 + timestamp: 1729322575379 +- kind: conda + name: libuv + version: 1.49.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 + md5: 070e3c9ddab77e38799d5c30b109c633 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 884647 + timestamp: 1729322566955 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.4.0-h31becfc_0.conda + sha256: 10dded60f274e29c573cfacf6e96f5d0fc374ee431250374a44cbd773916ab9d + md5: 5fd7ab3e5f382c70607fbac6335e6e19 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 363577 + timestamp: 1713201785160 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda + sha256: 0d4bad713a512d79bfeb4d61821f447afab8b0792aca823f505ce6b195e9fde5 + md5: c0af0edfebe780b19940e94871f1a765 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 287750 + timestamp: 1713200194013 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hcfcfb64_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda + sha256: d0ca51cb1de9192be9a3238e71fbcca5a535619c499c4f4c9b2ed41c14d36770 + md5: abd61d0ab127ec5cd68f62c2969e6f34 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 274359 + timestamp: 1713200524021 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f + md5: b26e8aa824079e1be0294e7152ca4559 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 438953 + timestamp: 1713199854503 +- kind: conda + name: libxcb + version: '1.16' + build: h013a479_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda + sha256: abae56e12a4c62730b899fdfb82628a9ac171c4ce144fc9f34ae024957a82a0e + md5: f0b599acdc82d5bc7e3b105833e7c5c8 + depends: + - m2w64-gcc-libs + - m2w64-gcc-libs-core + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 989459 + timestamp: 1724419883091 +- kind: conda + name: libxcb + version: 1.17.0 + build: h262b8f6_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + sha256: 461cab3d5650ac6db73a367de5c8eca50363966e862dcf60181d693236b1ae7b + md5: cd14ee5cca2464a425b1dbfc24d90db2 + depends: + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 397493 + timestamp: 1727280745441 +- kind: conda + name: libxcb + version: 1.17.0 + build: h8a09558_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 395888 + timestamp: 1727278577118 +- kind: conda + name: libxcb + version: 1.17.0 + build: hdb1d25a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + sha256: bd3816218924b1e43b275863e21a3e13a5db4a6da74cca8e60bc3c213eb62f71 + md5: af523aae2eca6dfa1c8eec693f5b9a79 + depends: + - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 323658 + timestamp: 1727278733917 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 114269 + timestamp: 1702724369203 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libzlib + version: 1.3.1 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + md5: 41fbfac52c601159df6c01f875de31b9 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 55476 + timestamp: 1727963768015 +- kind: conda + name: libzlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: libzlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 66657 + timestamp: 1727963199518 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 +- kind: conda + name: m2w64-gcc-libgfortran + version: 5.3.0 + build: '6' + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 + md5: 066552ac6b907ec6d72c0ddab29050dc + depends: + - m2w64-gcc-libs-core + - msys2-conda-epoch ==20160418 + license: GPL, LGPL, FDL, custom + purls: [] + size: 350687 + timestamp: 1608163451316 +- kind: conda + name: m2w64-gcc-libs + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa + md5: fe759119b8b3bfa720b8762c6fdc35de + depends: + - m2w64-gcc-libgfortran + - m2w64-gcc-libs-core + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 532390 + timestamp: 1608163512830 +- kind: conda + name: m2w64-gcc-libs-core + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 + md5: 4289d80fb4d272f1f3b56cfe87ac90bd + depends: + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 219240 + timestamp: 1608163481341 +- kind: conda + name: m2w64-gmp + version: 6.1.0 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 + md5: 53a1c73e1e3d185516d7e3af177596d9 + depends: + - msys2-conda-epoch ==20160418 + license: LGPL3 + purls: [] + size: 743501 + timestamp: 1608163782057 +- kind: conda + name: m2w64-jq + version: '1.6' + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + sha256: d722a8c06f44dfb5f357608e6e1d40d1f1c926316bbee5d1e71d93823554646b + md5: 209cbf1b222dc774cb29ce57796500b3 + depends: + - m2w64-gcc-libs + - m2w64-oniguruma + license: MIT + license_family: MIT + purls: [] + size: 424702 + timestamp: 1591860215369 +- kind: conda + name: m2w64-libwinpthread-git + version: 5.0.0.4634.697f757 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 + md5: 774130a326dee16f1ceb05cc687ee4f0 + depends: + - msys2-conda-epoch ==20160418 + license: MIT, BSD + purls: [] + size: 31928 + timestamp: 1608166099896 +- kind: conda + name: m2w64-oniguruma + version: 6.9.5 + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + sha256: 523edeac9788aa61243bd2ceb7b8bdb1a86b68c9f7f1aeb933085893d2886cc3 + md5: 61c9b808f92724106a63dd7b50979d6b + depends: + - m2w64-gcc-libs + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 426599 + timestamp: 1591828659130 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + size: 64356 + timestamp: 1686175179621 +- kind: conda + name: mdurl + version: 0.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping + size: 14680 + timestamp: 1704317789138 +- kind: conda + name: more-itertools + version: 10.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + sha256: 2315b7dba237e16b0e1b601725a8e03e062421e0be28d8a25dc35dd9bd93a342 + md5: 3364591bebd600979606791e1dff7cb6 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/more-itertools?source=hash-mapping + size: 57345 + timestamp: 1725630183289 +- kind: conda + name: msys2-conda-epoch + version: '20160418' + build: '1' + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 + md5: b0309b72560df66f71a9d5e34a5efdfa + purls: [] + size: 3227 + timestamp: 1608166968312 +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 802321 + timestamp: 1724658775723 +- kind: conda + name: ncurses + version: '6.5' + build: hcccb83c_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 + md5: 91d49c85cacd92caa40cf375ef72a25d + depends: + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 924472 + timestamp: 1724658573518 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: nodejs + version: 22.9.0 + build: h08fde81_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + sha256: 736a4738aba32a03401aa25c8f740e4afe4aea02bc06651b59b06f0fdc024fdf + md5: 3771a3a6abe5a8db8910d5ebf144811b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=17 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 14859715 + timestamp: 1726671037225 +- kind: conda + name: nodejs + version: 22.9.0 + build: h57928b3_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + sha256: 6d74f0dbb91eb2049199ba801a3db67965f990aef44084f9ae51a1f70c2996f6 + md5: 6aa54ed90a643a11a005491ff316b1c4 + license: MIT + license_family: MIT + purls: [] + size: 25378221 + timestamp: 1726657153171 +- kind: conda + name: nodejs + version: 22.9.0 + build: h8374285_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + sha256: ff2186a51d389c18423109af3abf6377d4ef5b1370a81ee5f8fb2e036d79cf4f + md5: 6a9739c1ce3f9714b705a655872b5a4d + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21653106 + timestamp: 1726665120657 +- kind: conda + name: nodejs + version: 22.9.0 + build: hf235a45_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 + md5: 40255c9ffb722d614b02ca7aaee6abcb + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21198038 + timestamp: 1726661026112 +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + sha256: 456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0 + requires_python: '>=3.10' +- kind: conda + name: oniguruma + version: 6.9.9 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + sha256: e21b1822736959ba434ebce452ee86844a11d918c8b1c48c71f15e9a932fd571 + md5: 475018b8e0b8720c985a185427f5bf13 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 250005 + timestamp: 1697487236819 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + sha256: 66632aeef5b74e15746161db8fa8b5150a191ab05823d7d2f1587bdf96674c7b + md5: 770c654e0d5bfa3aa1e6ac5440815cda + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 223231 + timestamp: 1697485732214 +- kind: conda + name: oniguruma + version: 6.9.9 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed + md5: 77dab674d16c1525ebe65e67de30de0d + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 246869 + timestamp: 1697485543293 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h0d9d63b_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.2-h0d9d63b_0.conda + sha256: d83375856601bc67c11295b537548a937a6896ede9d0a51d78bf5e921ab07c6f + md5: fd2898519e839d5ceb778343f39a3176 + depends: + - libgcc-ng >=12 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 374964 + timestamp: 1709159226478 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h3d672ee_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda + sha256: dda71cbe094234ab208f3552dec1f4ca6f2e614175d010808d6cb66ecf0bc753 + md5: 7e7099ad94ac3b599808950cec30ad4e + depends: + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 237974 + timestamp: 1709159764160 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h488ebb8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + sha256: 5600a0b82df042bd27d01e4e687187411561dfc11cc05143a08ce29b64bf2af2 + md5: 7f2e286780f072ed750df46dc2631138 + depends: + - libgcc-ng >=12 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 341592 + timestamp: 1709159244431 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h9f1df11_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.2-h9f1df11_0.conda + sha256: 472d6eaffc1996e6af35ec8e91c967f472a536a470079bfa56383cc0dbf4d463 + md5: 5029846003f0bc14414b9128a1f7c84b + depends: + - libcxx >=16 + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 316603 + timestamp: 1709159627299 +- kind: conda + name: openssl + version: 3.3.2 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + sha256: a45c42f3577294e22ac39ddb6ef5a64fd5322e8a6725afefbf4f2b4109340bf9 + md5: 1dc86753693df5e3326bb8a85b74c589 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 8396053 + timestamp: 1725412961673 +- kind: conda + name: openssl + version: 3.3.2 + build: h8359307_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 + md5: 1773ebccdc13ec603356e8ff1db9e958 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2882450 + timestamp: 1725410638874 +- kind: conda + name: openssl + version: 3.3.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + sha256: 4669d26dbf81e4d72093d8260f55d19d57204d82b1d9440be83d11d313b5990c + md5: 9e1e477b3f8ee3789297883faffa708b + depends: + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3428083 + timestamp: 1725412266679 +- kind: conda + name: openssl + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + sha256: cee91036686419f6dd6086902acf7142b4916e1c4ba042e9ca23e151da012b6d + md5: 4d638782050ab6faa27275bed57e9b4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2891789 + timestamp: 1725410790053 +- kind: pypi + name: outcome + version: 1.3.0.post0 + url: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + sha256: e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b + requires_dist: + - attrs>=19.2.0 + requires_python: '>=3.7' +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 50290 + timestamp: 1718189540074 +- kind: conda + name: pathspec + version: 0.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d + md5: 17064acba08d3686f1135b5ec1b32b12 + depends: + - python >=3.7 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/pathspec?source=hash-mapping + size: 41173 + timestamp: 1702250135032 +- kind: conda + name: pcre2 + version: '10.44' + build: h070dd5b_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + sha256: e9f4b912e48514771d477f2ee955f59d4ff4ef799c3d4d16e4d0f335ce91df67 + md5: 94022de9682cb1a0bb18a99cbc3541b3 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 884590 + timestamp: 1723488793100 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 952308 + timestamp: 1723488734144 +- kind: conda + name: pexpect + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pillow + version: 10.4.0 + build: py312h381445a_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py312h381445a_1.conda + sha256: 0b52e708ac4b72e6e1608de517cd4c8e6517dd525e23163a69bf73c7261399fc + md5: c57e54ae4acca720fb3a44bee93cb5b9 + depends: + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.16,<2.0.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 42468305 + timestamp: 1726075694989 +- kind: conda + name: pillow + version: 11.0.0 + build: py312h5ab5af3_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.0.0-py312h5ab5af3_0.conda + sha256: 3cf43a5eb1f67f3a5f3ef1ec3a685f8767019cce24dbe46c4b76fee8a54fbacf + md5: 1c4bdfe659cfdedd372685ce2494e97b + depends: + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41756471 + timestamp: 1729068045876 +- kind: conda + name: pillow + version: 11.0.0 + build: py312h7b63e92_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + sha256: 13a464bea02c0df0199c20ef6bad24a6bc336aaf55bf8d6a133d0fe664463224 + md5: 385f46a4df6f97892503a841121a9acf + depends: + - __glibc >=2.17,<3.0.a0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41948418 + timestamp: 1729065846594 +- kind: conda + name: pillow + version: 11.0.0 + build: py312haf37ca6_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.0.0-py312haf37ca6_0.conda + sha256: 727b4c3faecdb6f6809cf20c5f32d2df4af34e0d5b9146b7588383bcba7990e8 + md5: dc9b51fbd2b6f7fea9b5123458864dbb + depends: + - __osx >=11.0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41737424 + timestamp: 1729065920347 +- kind: conda + name: pip + version: '24.2' + build: pyh8b19718_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + sha256: d820e5358bcb117fa6286e55d4550c60b0332443df62121df839eab2d11c890b + md5: 6c78fbb8ddfd64bcb55b5cbafd2d2c43 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=hash-mapping + size: 1237976 + timestamp: 1724954490262 +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 20625 + timestamp: 1726613611845 +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 8ff8303409ebed76bed4c3d655340320b768817d900ba208b394fdd7d7939a5c + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + sha256: e0e87b0c4dc8fce83c725dd851aec37bc4e882bb225ec8a96bd83cf32d4f1623 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + sha256: 7da2eb51a19c7f3b523e9faa9d98e7af92e52eb983a099979ea79c9668e3cbf7 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + sha256: 8dabb80e62f667fe2640a8b694e26a7b884c0b4803f7514a3954fc849126227b + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 23815 + timestamp: 1713667175451 +- kind: conda + name: pnpm + version: 9.12.2 + build: h6417eb3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + sha256: 0caf7ddacb1d8adb16144a93cfaf7a70bff2f83e22cbaae4d3d91b71f28f9caf + md5: 711bc7fb6b870f4b5b180c181786d710 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3466596 + timestamp: 1729713864150 +- kind: conda + name: pnpm + version: 9.12.2 + build: haa868a1_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + sha256: ce0c2e4268cd81308b8c069564b9f7885d9c21ddd8b83120f0fabc66d9ab58d3 + md5: c70ffc202c1f5d9223a13a12310c874d + depends: + - nodejs >=22.9.0,<23.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 3319869 + timestamp: 1729714702980 +- kind: conda + name: pnpm + version: 9.12.2 + build: hbf5023e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + sha256: aa25e9d0085be78115c5104ff905f9930d8585901a7a8d7278083f87ff4f6d25 + md5: 15d1e168a06119b34c9bd39187ce2af3 + depends: + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3516854 + timestamp: 1729713906302 +- kind: conda + name: pnpm + version: 9.12.2 + build: hef028c3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + sha256: 6fd70df2e5e5a25aede2dfadd17530b2e7ecc0c41da43af89efd09dbbda8ca38 + md5: 8a157c984a8e384507438d62275868d5 + depends: + - __osx >=11.0 + - libcxx >=17 + - nodejs >=22.9.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3473615 + timestamp: 1729714099186 +- kind: conda + name: pthread-stubs + version: '0.4' + build: h86ecc28_1002 + build_number: 1002 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + sha256: 977dfb0cb3935d748521dd80262fe7169ab82920afd38ed14b7fee2ea5ec01ba + md5: bb5a90c93e3bac3d5690acf76b4a6386 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8342 + timestamp: 1726803319942 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hb9d3cd8_1002 + build_number: 1002 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8252 + timestamp: 1726802366959 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hcd874cb_1001 + build_number: 1001 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 + sha256: bb5a6ddf1a609a63addd6d7b488b0f58d05092ea84e9203283409bff539e202a + md5: a1f820480193ea83582b13249a7e7bd9 + depends: + - m2w64-gcc-libs + license: MIT + license_family: MIT + purls: [] + size: 6417 + timestamp: 1606147814351 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hd74edd7_1002 + build_number: 1002 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 + md5: 415816daf82e0b23a736a069a75e9da7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 8381 + timestamp: 1726802424786 +- kind: conda + name: ptyprocess + version: 0.7.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 16546 + timestamp: 1609419417991 +- kind: conda + name: pycparser + version: '2.22' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=hash-mapping + size: 105098 + timestamp: 1711811634025 +- kind: pypi + name: pyee + version: 12.0.0 + url: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + sha256: 7b14b74320600049ccc7d0e0b1becd3b4bd0a03c745758225e31a59f4095c990 + requires_dist: + - typing-extensions + - build ; extra == 'dev' + - flake8 ; extra == 'dev' + - flake8-black ; extra == 'dev' + - pytest ; extra == 'dev' + - black ; extra == 'dev' + - isort ; extra == 'dev' + - jupyter-console ; extra == 'dev' + - mkdocs ; extra == 'dev' + - mkdocs-include-markdown-plugin ; extra == 'dev' + - mkdocstrings[python] ; extra == 'dev' + - sphinx ; extra == 'dev' + - toml ; extra == 'dev' + - tox ; extra == 'dev' + - trio ; extra == 'dev' + - twine ; extra == 'dev' + - twisted ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - trio ; python_full_version >= '3.7' and extra == 'dev' + - trio-typing ; python_full_version >= '3.7' and extra == 'dev' + - pytest-asyncio ; python_full_version >= '3.4' and extra == 'dev' + - pytest-trio ; python_full_version >= '3.7' and extra == 'dev' + requires_python: '>=3.8' +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 879295 + timestamp: 1714846885370 +- kind: pypi + name: pyodide-py + version: 0.26.3 + url: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + sha256: b63b6847c8906aa8f3c17df362135d0407aabf1d4b023557aed721d822e347a8 + requires_python: '>=3.12' +- kind: pypi + name: pysocks + version: 1.7.1 + url: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + sha256: 2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: conda + name: pytest + version: 8.3.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + sha256: e99376d0068455712109d233f5790458ff861aeceb458bfda74e353338e4d815 + md5: c03d61f31f38fdb9facf70c29958bf7a + depends: + - colorama + - exceptiongroup >=1.0.0rc8 + - iniconfig + - packaging + - pluggy <2,>=1.5 + - python >=3.8 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 258293 + timestamp: 1725977334143 +- kind: pypi + name: pytest-asyncio + version: 0.24.0 + url: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + sha256: a811296ed596b69bf0b6f3dc40f83bcaf341b155a269052d82efa2b25ac7037b + requires_dist: + - pytest<9,>=8.2 + - sphinx>=5.3 ; extra == 'docs' + - sphinx-rtd-theme>=1.0 ; extra == 'docs' + - coverage>=6.2 ; extra == 'testing' + - hypothesis>=5.7.1 ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: pytest-pyodide + version: 0.58.3 + url: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + sha256: 6425d8ac868090da70337bdef33bd8a082a353a4ecdb89f5371bcf58ac7390e7 + requires_dist: + - hypothesis + - pexpect + - playwright + - pytest + - pytest-asyncio + - selenium + - tblib>=3 + - build ; extra == 'test' + - pytest-cov ; extra == 'test' + - requests ; extra == 'test' + requires_python: '>=3.10' +- kind: conda + name: python + version: 3.12.7 + build: h5d932e8_0_cpython + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + sha256: 25570873d92d4d9490c6db780cc85e6c28bd3ff61dc1ece79f602cf82bc73bc1 + md5: e6cab21bb5787270388939cf41cc5f43 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 13762126 + timestamp: 1728057461028 +- kind: conda + name: python + version: 3.12.7 + build: h739c21a_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef + md5: e0d82e57ebb456077565e6d82cd4a323 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 12975439 + timestamp: 1728057819519 +- kind: conda + name: python + version: 3.12.7 + build: hc5c86c4_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d + md5: 0515111a9cdf69f83278f7c197db9807 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31574780 + timestamp: 1728059777603 +- kind: conda + name: python + version: 3.12.7 + build: hce54a09_0_cpython + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 + md5: 21f1f7c6ccf6b747c5086d2422c230e1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 15987537 + timestamp: 1728057382072 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + sha256: 5ccdad9981753cc4a2d126e356673a21c0cd5b34e209cb8d476a3947d4ad9b39 + md5: 62b20f305498284a07dc6c45fd0e5c87 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6329 + timestamp: 1723823366253 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6278 + timestamp: 1723823099686 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + sha256: 9486662af81a219e96d343449eff242f38d7c5128ced5ce5acf85857265058d6 + md5: e8681f534453af7afab4cd2bc1423eec + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6730 + timestamp: 1723823139725 +- kind: conda + name: pywin32-ctypes + version: 0.2.3 + build: py312h2e8e312_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + sha256: 3e3b97740b4ec2f54debf7bfdbaa9a81a7aabd4549051b926de91d05304c4948 + md5: c5f1cb65c56ec74687801960f8a31eb5 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pywin32-ctypes?source=hash-mapping + size: 57449 + timestamp: 1727282288065 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: readline + version: '8.2' + build: h8fc344f_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 294092 + timestamp: 1679532238805 +- kind: conda + name: readline + version: '8.2' + build: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 250351 + timestamp: 1679532511311 +- kind: conda + name: rich + version: 13.9.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + sha256: ec2a69babe41085a5bcec4ef80b2d5bade2ca399d971f57894dfb96cf59a18d1 + md5: 50dd5529812447e2b4e2a5dd6a6f1655 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rich?source=hash-mapping + size: 185320 + timestamp: 1729623039134 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h7900ff3_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + sha256: c6d5d0bc7fb6cbfa3b8be8f2399a3c1308b3392a4e20bd1a0f29a828fda5ab20 + md5: 4840da9db2808db946a0d979603c6de4 + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31601 + timestamp: 1725915741329 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h8025657_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + sha256: fd6bc45ba0c6bb097ad98037ad8d2ddf2449f28c2eedf57dfff54eeceefe90c6 + md5: 4ae02e3717828f5e92dfae068845afdd + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31394 + timestamp: 1725917363210 +- kind: pypi + name: selenium + version: 4.25.0 + url: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + sha256: 3798d2d12b4a570bc5790163ba57fef10b2afee958bf1d80f2a3cf07c4141f33 + requires_dist: + - urllib3[socks]>=1.26,<3 + - trio~=0.17 + - trio-websocket~=0.9 + - certifi>=2021.10.8 + - typing-extensions~=4.9 + - websocket-client~=1.8 + requires_python: '>=3.8' +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 777462 + timestamp: 1727249510532 +- kind: conda + name: shellingham + version: 1.5.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/shellingham?source=hash-mapping + size: 14568 + timestamp: 1698144516278 +- kind: conda + name: sniffio + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping + size: 15064 + timestamp: 1708953086199 +- kind: pypi + name: sortedcontainers + version: 2.4.0 + url: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- kind: pypi + name: tblib + version: 3.0.0 + url: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + sha256: 80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129 + requires_python: '>=3.8' +- kind: conda + name: tk + version: 8.6.13 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3351802 + timestamp: 1695506242997 +- kind: conda + name: tk + version: 8.6.13 + build: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3145523 + timestamp: 1699202432999 +- kind: conda + name: tk + version: 8.6.13 + build: h5226925_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: fc048363eb8f03cd1737600a5d08aafe + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: TCL + license_family: BSD + purls: [] + size: 3503410 + timestamp: 1699202577803 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tomli + version: 2.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 18203 + timestamp: 1727974767524 +- kind: conda + name: tomli-w + version: 1.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + sha256: 25b88bb2c4e79be642d8e5b5738781404055cd596403a20511e6fa30f0c71585 + md5: 2c5eb5b3a0fd2c4787d8162f57da2a20 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli-w?source=hash-mapping + size: 12323 + timestamp: 1728405537678 +- kind: conda + name: tomlkit + version: 0.13.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + sha256: 2ccfe8dafdc1f1af944bca6bdf28fa97b5fa6125d84b8895a4e918a020853c12 + md5: 0062a5f3347733f67b0f33ca48cc21dd + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomlkit?source=hash-mapping + size: 37279 + timestamp: 1723631592742 +- kind: pypi + name: trio + version: 0.27.0 + url: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + sha256: 68eabbcf8f457d925df62da780eff15ff5dc68fd6b367e2dde59f7aaf2a0b884 + requires_dist: + - attrs>=23.2.0 + - sortedcontainers + - idna + - outcome + - sniffio>=1.3.0 + - cffi>=1.14 ; implementation_name != 'pypy' and os_name == 'nt' + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.8' +- kind: pypi + name: trio-websocket + version: 0.11.1 + url: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + sha256: 520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638 + requires_dist: + - trio>=0.11 + - wsproto>=0.14 + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.7' +- kind: conda + name: trove-classifiers + version: 2024.10.21.16 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + sha256: 591e4ffdc95660b9e596c15b65cad35a70b36235f02dbd089ccc198dd5af0e71 + md5: 501f6d3288160a31d99a2f1321e77393 + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/trove-classifiers?source=hash-mapping + size: 18429 + timestamp: 1729552033760 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + purls: [] + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: ucrt + version: 10.0.22621.0 + build: h57928b3_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 + constrains: + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + purls: [] + size: 559710 + timestamp: 1728377334097 +- kind: pypi + name: urllib3 + version: 2.2.3 + url: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + sha256: ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2<5,>=4 ; extra == 'h2' + - pysocks!=1.5.7,<2.0,>=1.5.6 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- kind: conda + name: userpath + version: 1.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + sha256: c8cbddd625340e1b00b53bafabc764526ee85f7ddb91018424bab0eea057796d + md5: 5bf074c9253a3bf914becfc50757406f + depends: + - click + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/userpath?source=hash-mapping + size: 17423 + timestamp: 1632758637093 +- kind: conda + name: uv + version: 0.4.26 + build: h0f3a69f_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + sha256: 4f05a61c3c3127ce7e487001215d20f49da0563fa4335462b2f6cc0028bb265b + md5: c4316a4c2b47ae154259fa5caffd53f1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 9446110 + timestamp: 1729774270770 +- kind: conda + name: uv + version: 0.4.26 + build: h2016286_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + sha256: f63f7ab9e410899daf66e7ff343020b4bb8cf5f52413acca0dcb95ae9b04f854 + md5: f3f6ad5ca3aca4e0e5fd0f7f5f156093 + depends: + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 8929757 + timestamp: 1729774724816 +- kind: conda + name: uv + version: 0.4.26 + build: h41fe3af_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + sha256: f9530088e0a7319946c0dbc51c2e82bfa964fa3cb548e986053c7d8b6698056d + md5: 8beaeac747a7887e458e7de7e3d9fd6d + depends: + - __osx >=11.0 + - libcxx >=17 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR MIT + purls: [] + size: 8421278 + timestamp: 1729775629422 +- kind: conda + name: uv + version: 0.4.26 + build: ha08ef0e_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + sha256: 57691a29d941ffbbae312c6dedccc303b6303e58487803e84db20a3304c0d269 + md5: a09f8193bdf8d1512340e8ec2432e82d + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 OR MIT + purls: [] + size: 10344775 + timestamp: 1729775595022 +- kind: conda + name: vc + version: '14.3' + build: ha32ba9b_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 + depends: + - vc14_runtime >=14.38.33135 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17447 + timestamp: 1728400826998 +- kind: conda + name: vc14_runtime + version: 14.40.33810 + build: hcc2c482_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + purls: [] + size: 750719 + timestamp: 1728401055788 +- kind: conda + name: virtualenv + version: 20.27.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + sha256: 18bae5ff9f02793ca56d295f0a5f1d4443623ee3be09a6805eb7d4b18245968c + md5: a6ed1227ba6ec37cfc2b25e6512f729f + depends: + - distlib <1,>=0.3.7 + - filelock <4,>=3.12.2 + - platformdirs <5,>=3.9.1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/virtualenv?source=hash-mapping + size: 2952166 + timestamp: 1729243861344 +- kind: conda + name: vs2015_runtime + version: 14.40.33810 + build: h3bf8584_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 + depends: + - vc14_runtime >=14.40.33810 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17453 + timestamp: 1728400827536 +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + sha256: f8a2a213b9179965db2d2eedececd69a37e287e902330509afae51c71a3a6842 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + sha256: b4364e14d44e3b7afe6a40bf608e9d0d2c40b09dece441d20f4f6e31906b729c + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + sha256: a07445073cf36a6e5d1dc28246a897dcbdaa537ba8be8805be65422ecca297eb + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + sha256: 5bdf1214ee3ee78a4a8a92da339f4c4c8c109e65af881b37f4adfc05d02af426 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: websocket-client + version: 1.8.0 + url: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + sha256: 17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526 + requires_dist: + - sphinx>=6.0 ; extra == 'docs' + - sphinx-rtd-theme>=1.1.0 ; extra == 'docs' + - myst-parser>=2.0.0 ; extra == 'docs' + - python-socks ; extra == 'optional' + - wsaccel ; extra == 'optional' + - websockets ; extra == 'test' + requires_python: '>=3.8' +- kind: conda + name: wheel + version: 0.44.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping + size: 58585 + timestamp: 1722797131787 +- kind: pypi + name: wsproto + version: 1.2.0 + url: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + sha256: b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736 + requires_dist: + - h11<1,>=0.9.0 + requires_python: '>=3.7.0' +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: h86ecc28_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.11-h86ecc28_1.conda + sha256: a00c4c6054209c84fb460c5e4ae7193c335a9ee1851645c9ad59312438e853f7 + md5: c5f72a733c461aa7785518d29b997cc8 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 15690 + timestamp: 1727036097294 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + sha256: 532a046fee0b3a402db867b6ec55c84ba4cdedb91d817147c8feeae9766be3d6 + md5: 77cbc488235ebbaab2b6e912d3934bae + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 14679 + timestamp: 1727034741045 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hcd874cb_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda + sha256: 8c5b976e3b36001bdefdb41fb70415f9c07eff631f1f0155f3225a7649320e77 + md5: c46ba8712093cb0114404ae8a7582e1a + depends: + - m2w64-gcc-libs + - m2w64-gcc-libs-core + license: MIT + license_family: MIT + purls: [] + size: 51297 + timestamp: 1684638355740 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hd74edd7_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + sha256: 7113618021cf6c80831a429b2ebb9d639f3c43cf7fe2257d235dc6ae0ab43289 + md5: 7e0125f8fb619620a0011dc9297e2493 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 13515 + timestamp: 1727034783560 +- kind: conda + name: xorg-libxdmcp + version: 1.1.3 + build: hcd874cb_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 + sha256: f51205d33c07d744ec177243e5d9b874002910c731954f2c8da82459be462b93 + md5: 46878ebb6b9cbd8afcf8088d7ef00ece + depends: + - m2w64-gcc-libs + license: MIT + license_family: MIT + purls: [] + size: 67908 + timestamp: 1610072296570 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: h57736b2_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda + sha256: efcc150da5926cf244f757b8376d96a4db78bc15b8d90ca9f56ac6e75755971f + md5: 25a5a7b797fe6e084e04ffe2db02fc62 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 20615 + timestamp: 1727796660574 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee + md5: 8035c64cb77ed555e3f150b7b3972480 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 19901 + timestamp: 1727794976192 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + sha256: 9939a166d780700d81023546759102b33fdc2c5f11ef09f5f66c77210fd334c8 + md5: 77c447f48cab5d3a15ac224edb86a968 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 18487 + timestamp: 1727795205022 +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: xz + version: 5.2.6 + build: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 235693 + timestamp: 1660346961024 +- kind: conda + name: xz + version: 5.2.6 + build: h8d14728_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 + md5: 515d77642eaa3639413c6b1bc3f94219 + depends: + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 217804 + timestamp: 1660346976440 +- kind: conda + name: xz + version: 5.2.6 + build: h9cdd2b7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 + md5: 83baad393a31d59c20b63ba4da6592df + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 440555 + timestamp: 1660348056328 +- kind: conda + name: zipp + version: 3.20.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 21409 + timestamp: 1726248679175 +- kind: conda + name: zlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + purls: [] + size: 77606 + timestamp: 1727963209370 +- kind: conda + name: zlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + sha256: b4f649aa3ecdae384d5dad7074e198bff120edd3dfb816588e31738fc6d627b1 + md5: bc230abb5d21b63ff4799b0e75204783 + depends: + - libgcc >=13 + - libzlib 1.3.1 h86ecc28_2 + license: Zlib + license_family: Other + purls: [] + size: 95582 + timestamp: 1727963203597 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + purls: [] + size: 92286 + timestamp: 1727963153079 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 330788 + timestamp: 1725305806565 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h7606c53_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + sha256: 3e0c718aa18dcac7f080844dbe0aea41a9cea75083019ce02e8a784926239826 + md5: a92cc3435b2fd6f51463f5a4db5c50b1 + depends: + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 320624 + timestamp: 1725305934189 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hb698573_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + sha256: 2681c2a249752bdc7978e59ee2f34fcdfcbfda80029b84b8e5fec8dbc9e3af25 + md5: ffcb8e97e62af42075e0e5f46bb9856e + depends: + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 392496 + timestamp: 1725305808244 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hef9b889_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b + md5: 8b7069e9792ee4e5b4919a7a306d2e67 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 419552 + timestamp: 1725305670210 +- kind: conda + name: zstd + version: 1.5.6 + build: h02f22dd_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + sha256: 484f9d0722c77685ae379fbff3ccd662af9ead7e59eb39cd6d0c677cdf25ff6c + md5: be8d5f8cf21aed237b8b182ea86b3dd6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 539937 + timestamp: 1714723130243 +- kind: conda + name: zstd + version: 1.5.6 + build: h0ea2cb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + md5: 9a17230f95733c04dc40a2b1e5491d74 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 349143 + timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 554846 + timestamp: 1714722996770 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 405089 + timestamp: 1714723101397 diff --git a/packages/image-io/pixi.toml b/packages/image-io/pixi.toml new file mode 100644 index 000000000..a6381f416 --- /dev/null +++ b/packages/image-io/pixi.toml @@ -0,0 +1,139 @@ +[project] +authors = ["Matt McCormick "] +channels = ["conda-forge"] +description = "Input and output for scientific and medical image file formats." +name = "image-io" +platforms = ["win-64", "linux-64", "linux-aarch64", "osx-arm64"] +version = "0.1.0" + +[tasks] + +[dependencies] +python = "3.12.*" +pnpm = ">=9.12.1,<10" +hatch = ">=1.13.0,<2" +pip = ">=24.2,<25" + +[target.win-64.dependencies] +m2w64-jq = ">=1.6.0,<2" + +[target.unix.dependencies] +jq = ">=1.7.1,<2" + +[tasks.version-sync-typescript] +cmd = '''version=$(cat package.json | jq .version) && + jq ".version = $version" typescript/package.json > typescript/package.json.tmp && + mv typescript/package.json.tmp typescript/package.json''' + +[tasks.version-sync-python-wasi] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + echo "version is $version" && + hatch version $version''' +cwd = "python/itkwasm-image-io-wasi" + +[tasks.version-sync-python-emscripten] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-image-io-emscripten" + +[tasks.version-sync-python-dispatch] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-image-io" + +[tasks.version-sync] +depends-on = ["version-sync-typescript", "version-sync-python-wasi", "version-sync-python-emscripten", "version-sync-python-dispatch"] +description = "Synchronize package versions" + +[tasks.publish-typescript] +cmd = "pnpm publish --filter \"{typescript}\"" + +[tasks.publish-python-user-check] +cmd = "if [ -n \"$HATCH_INDEX_USER\"]; then echo \"HATCH_INDEX_USER is set\"; else echo \"HATCH_INDEX_USER is not set\"; exit 1; fi" + +[tasks.publish-python-wasi] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-image-io-wasi" + +[tasks.publish-python-emscripten] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-image-io-emscripten" + +[tasks.publish-python-dispatch] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-image-io" + +[tasks.publish] +depends-on = ["publish-typescript", "publish-python-wasi", "publish-python-emscripten", "publish-python-dispatch"] +description = "Synchronize package versions" + +[feature.python.dependencies] +pytest = ">=8.3.3,<9" +pillow = ">=10.4.0,<12" + +[feature.python.pypi-dependencies] +pyodide-py = ">=0.26.3, <0.27" +pytest-pyodide = ">=0.58.3, <0.59" +itk-webassemblyinterface = ">=1.0b175, <2" +itkwasm = ">=1.0b179, <2" + +[feature.python.tasks.test-wasi] +cmd = "pytest" +cwd = "python/itkwasm-image-io-wasi" +description = "Run tests for itkwasm-image-io-wasi" + +[feature.python.tasks.download-pyodide] +cmd = '''curl -L https://github.com/pyodide/pyodide/releases/download/0.26.3/pyodide-0.26.3.tar.bz2 -o pyodide.tar.bz2 && + tar xjf pyodide.tar.bz2 && + rm pyodide.tar.bz2''' +outputs = ["pyodide"] +description = "Download Pyodide" + +[feature.python.tasks.test-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-image-io-emscripten" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-image-io-emscripten" + +[feature.python.tasks.serve-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-image-io-emscripten" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-image-io-emscripten for development" + +[feature.python.tasks.test-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + cp ../itkwasm-image-io-emscripten/dist/pyodide/itkwasm_image_io_emscripten*.whl ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-image-io" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-image-io" + +[feature.python.tasks.serve-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-image-io" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-image-io for development" + +[feature.python.tasks.test-python] +depends-on = ["test-wasi", "test-emscripten", "test-dispatch"] +description = "Run tests for all Python packages" + +[environments] +python = ["python"] diff --git a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py index ff54d9180..64d1d7334 100644 --- a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py +++ b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIGhyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgd3I9KGUsQSk9Pntmb3IodmFyIHQgaW4gQSlocihlLHQse2dldDpBW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIFJyPW5ldyBNYXAoW1siYm1wIiwiYm1wIl0sWyJkY20iLCJnZGNtIl0sWyJnaXBsIiwiZ2lwbCJdLFsiZ2lwbC5neiIsImdpcGwiXSxbImhkZjUiLCJoZGY1Il0sWyJqcGciLCJqcGVnIl0sWyJqcGVnIiwianBlZyJdLFsiaXdpIiwid2FzbSJdLFsiaXdpLmNib3IiLCJ3YXNtIl0sWyJpd2kuY2Jvci56c3QiLCJ3YXNtWnN0ZCJdLFsibHNtIiwibHNtIl0sWyJtbmMiLCJtbmMiXSxbIm1uYy5neiIsIm1uYyJdLFsibW5jMiIsIm1uYyJdLFsibWdoIiwibWdoIl0sWyJtZ3oiLCJtZ2giXSxbIm1naC5neiIsIm1naCJdLFsibWhhIiwibWV0YSJdLFsibWhkIiwibWV0YSJdLFsibXJjIiwibXJjIl0sWyJuaWEiLCJuaWZ0aSJdLFsibmlpIiwibmlmdGkiXSxbIm5paS5neiIsIm5pZnRpIl0sWyJoZHIiLCJuaWZ0aSJdLFsibnJyZCIsIm5ycmQiXSxbIm5oZHIiLCJucnJkIl0sWyJwbmciLCJwbmciXSxbInBpYyIsImJpb1JhZCJdLFsidGlmIiwidGlmZiJdLFsidGlmZiIsInRpZmYiXSxbInZ0ayIsInZ0ayJdLFsiaXNxIiwic2NhbmNvIl0sWyJhaW0iLCJzY2FuY28iXSxbImZkZiIsImZkZiJdXSksWT1Scjt2YXIga3I9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxoPWtyO3ZhciBicj17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0sRD1icjtmdW5jdGlvbiBEcihlLEEpe2xldCB0PW51bGw7c3dpdGNoKGUpe2Nhc2UgaC5VSW50ODp7dD1uZXcgVWludDhBcnJheShBKTticmVha31jYXNlIGguSW50ODp7dD1uZXcgSW50OEFycmF5KEEpO2JyZWFrfWNhc2UgaC5VSW50MTY6e3Q9bmV3IFVpbnQxNkFycmF5KEEpO2JyZWFrfWNhc2UgaC5JbnQxNjp7dD1uZXcgSW50MTZBcnJheShBKTticmVha31jYXNlIGguVUludDMyOnt0PW5ldyBVaW50MzJBcnJheShBKTticmVha31jYXNlIGguSW50MzI6e3Q9bmV3IEludDMyQXJyYXkoQSk7YnJlYWt9Y2FzZSBoLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnVWludDY0QXJyYXkoQSk6dD1uZXcgVWludDhBcnJheShBKTticmVha31jYXNlIGguSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnSW50NjRBcnJheShBKTp0PW5ldyBVaW50OEFycmF5KEEpO2JyZWFrfWNhc2UgRC5GbG9hdDMyOnt0PW5ldyBGbG9hdDMyQXJyYXkoQSk7YnJlYWt9Y2FzZSBELkZsb2F0NjQ6e3Q9bmV3IEZsb2F0NjRBcnJheShBKTticmVha31jYXNlIm51bGwiOnt0PW51bGw7YnJlYWt9Y2FzZSBudWxsOnt0PW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gdH12YXIgTj1Ecjt2YXIgV3I9e1Vua25vd246IlVua25vd24iLFNjYWxhcjoiU2NhbGFyIixSR0I6IlJHQiIsUkdCQToiUkdCQSIsT2Zmc2V0OiJPZmZzZXQiLFZlY3RvcjoiVmVjdG9yIixQb2ludDoiUG9pbnQiLENvdmFyaWFudFZlY3RvcjoiQ292YXJpYW50VmVjdG9yIixTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yOiJTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yIixEaWZmdXNpb25UZW5zb3IzRDoiRGlmZnVzaW9uVGVuc29yM0QiLENvbXBsZXg6IkNvbXBsZXgiLEZpeGVkQXJyYXk6IkZpeGVkQXJyYXkiLEFycmF5OiJBcnJheSIsTWF0cml4OiJNYXRyaXgiLFZhcmlhYmxlTGVuZ3RoVmVjdG9yOiJWYXJpYWJsZUxlbmd0aFZlY3RvciIsVmFyaWFibGVTaXplTWF0cml4OiJWYXJpYWJsZVNpemVNYXRyaXgifSxtZT1Xcjt2YXIgeGU9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoQT0yLHQ9aC5VSW50OCxyPW1lLlNjYWxhcixvPTEpe3RoaXMuZGltZW5zaW9uPUEsdGhpcy5jb21wb25lbnRUeXBlPXQsdGhpcy5waXhlbFR5cGU9cix0aGlzLmNvbXBvbmVudHM9b319LGd0PXhlO2Z1bmN0aW9uIEZyKGUsQSx0LHIsbyl7ZVtyK3QqQV09b312YXIgSXQ9RnI7dmFyIFRlPWNsYXNze2ltYWdlVHlwZTtuYW1lPSJJbWFnZSI7b3JpZ2luO3NwYWNpbmc7ZGlyZWN0aW9uO3NpemU7bWV0YWRhdGE7ZGF0YTtjb25zdHJ1Y3RvcihBPW5ldyBndCl7dGhpcy5pbWFnZVR5cGU9QTtsZXQgdD1BLmRpbWVuc2lvbjt0aGlzLm9yaWdpbj1uZXcgQXJyYXkodCksdGhpcy5vcmlnaW4uZmlsbCgwKSx0aGlzLnNwYWNpbmc9bmV3IEFycmF5KHQpLHRoaXMuc3BhY2luZy5maWxsKDEpLHRoaXMuZGlyZWN0aW9uPW5ldyBGbG9hdDY0QXJyYXkodCp0KSx0aGlzLmRpcmVjdGlvbi5maWxsKDApO2ZvcihsZXQgcj0wO3I8dDtyKyspSXQodGhpcy5kaXJlY3Rpb24sdCxyLHIsMSk7dGhpcy5zaXplPW5ldyBBcnJheSh0KSx0aGlzLnNpemUuZmlsbCgwKSx0aGlzLm1ldGFkYXRhPW5ldyBNYXAsdGhpcy5kYXRhPW51bGx9fSxqPVRlO2Z1bmN0aW9uIFVyKGUpe2xldCBBPW5ldyBqKGUuaW1hZ2VUeXBlKTtpZihBLm5hbWU9ZS5uYW1lLEEub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLEEuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyksQS5kaXJlY3Rpb249ZS5kaXJlY3Rpb24uc2xpY2UoKSxBLnNpemU9QXJyYXkuZnJvbShlLnNpemUpLGUuZGF0YSE9PW51bGwpe2xldCB0PWUuZGF0YS5jb25zdHJ1Y3RvcjtBLmRhdGE9bmV3IHQoZS5kYXRhLmxlbmd0aCksQS5kYXRhIT1udWxsJiZBLmRhdGEuc2V0KGUuZGF0YSwwKX1yZXR1cm4gQX12YXIgR2U9VXI7ZnVuY3Rpb24gTnIoZSl7aWYoZS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgQT1lWzBdO2lmKEEuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgaihBLmltYWdlVHlwZSk7dC5vcmlnaW49QXJyYXkuZnJvbShBLm9yaWdpbiksdC5zcGFjaW5nPUFycmF5LmZyb20oQS5zcGFjaW5nKTtsZXQgcj10LmltYWdlVHlwZS5kaW1lbnNpb247dC5kaXJlY3Rpb249QS5kaXJlY3Rpb24uc2xpY2UoKTtsZXQgbz1yLTE7dC5zaXplPUFycmF5LmZyb20oQS5zaXplKTtsZXQgaT1lLnJlZHVjZSgoYSxuKT0+YStuLnNpemVbb10sMCk7dC5zaXplW29dPWk7bGV0IHM9dC5zaXplLnJlZHVjZSgoYSxuKT0+YSpuLDEpKnQuaW1hZ2VUeXBlLmNvbXBvbmVudHMsbT1BLmRhdGEuY29uc3RydWN0b3I7dC5kYXRhPW5ldyBtKHMpO2xldCBmPXQuaW1hZ2VUeXBlLmNvbXBvbmVudHM7Zm9yKGxldCBhPTA7YTx0LnNpemUubGVuZ3RoLTE7YSsrKWYqPXQuc2l6ZVthXTtsZXQgcD0wO2lmKHQuZGF0YSE9bnVsbClmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl0LmRhdGEuc2V0KGVbYV0uZGF0YSxmKnApLHArPWVbYV0uc2l6ZVtvXTtlbHNlIHRocm93IEVycm9yKCJDb3VsZCBub3QgY3JlYXRlIHJlc3VsdCBpbWFnZSBkYXRhLiIpO3JldHVybiB0fXZhciBKZT1OcjtmdW5jdGlvbiBTcihlKXtsZXQgQT1lLnNsaWNlKChlLmxhc3RJbmRleE9mKCIuIiktMT4+PjApKzIpO2lmKEEudG9Mb3dlckNhc2UoKT09PSJneiIpe2xldCB0PWUuc2xpY2UoMCwtMykubGFzdEluZGV4T2YoIi4iKTtBPWUuc2xpY2UoKHQtMT4+PjApKzIpfWVsc2UgaWYoQS50b0xvd2VyQ2FzZSgpPT09ImNib3IiKXtsZXQgdD1lLnNsaWNlKDAsLTUpLmxhc3RJbmRleE9mKCIuIik7QT1lLnNsaWNlKCh0LTE+Pj4wKSsyKX1lbHNlIGlmKEEudG9Mb3dlckNhc2UoKT09PSJ6c3QiKXtsZXQgdD1lLnNsaWNlKDAsLTEwKS5sYXN0SW5kZXhPZigiLiIpO0E9ZS5zbGljZSgodC0xPj4+MCkrMil9ZWxzZSBpZihBLnRvTG93ZXJDYXNlKCk9PT0iemlwIil7bGV0IHQ9ZS5zbGljZSgwLC00KS5sYXN0SW5kZXhPZigiLiIpO0E9ZS5zbGljZSgodC0xPj4+MCkrMil9cmV0dXJuIEF9dmFyIHRlPVNyO2Z1bmN0aW9uIE9yKGUsQSl7bGV0IHQ9ey4uLmUuaW1hZ2VUeXBlfTtpZih0eXBlb2YgQTwidSImJnR5cGVvZiBBLnBpeGVsVHlwZTwidSImJih0LnBpeGVsVHlwZT1BLnBpeGVsVHlwZSxBLnBpeGVsVHlwZT09PW1lLlNjYWxhciYmdC5jb21wb25lbnRzIT09MSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FzdCBtdWx0aS1jb21wb25lbnQgaW1hZ2UgdG8gYSBzY2FsYXIgaW1hZ2UiKTt0eXBlb2YgQTwidSImJnR5cGVvZiBBLmNvbXBvbmVudFR5cGU8InUiJiZBLmNvbXBvbmVudFR5cGUhPT1lLmltYWdlVHlwZS5jb21wb25lbnRUeXBlJiYodC5jb21wb25lbnRUeXBlPUEuY29tcG9uZW50VHlwZSk7bGV0IHI9bmV3IGoodCk7aWYoci5uYW1lPWUubmFtZSxyLm9yaWdpbj1BcnJheS5mcm9tKGUub3JpZ2luKSxyLnNwYWNpbmc9QXJyYXkuZnJvbShlLnNwYWNpbmcpLHIuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCksci5zaXplPUFycmF5LmZyb20oZS5zaXplKSxyLm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGUubWV0YWRhdGEpKSkpLGUuZGF0YSE9PW51bGwpaWYodHlwZW9mIEE8InUiJiZ0eXBlb2YgQS5jb21wb25lbnRUeXBlPCJ1IiYmQS5jb21wb25lbnRUeXBlIT09ZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBoLlVJbnQ4OmNhc2UgaC5JbnQ4OmNhc2UgaC5VSW50MTY6Y2FzZSBoLkludDE2OmNhc2UgaC5VSW50MzI6Y2FzZSBoLkludDMyOmNhc2UgRC5GbG9hdDMyOmNhc2UgRC5GbG9hdDY0OnN3aXRjaChyLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIGguVUludDg6ci5kYXRhPW5ldyBVaW50OEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguVUludDE2OnIuZGF0YT1uZXcgVWludDE2QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguSW50MTY6ci5kYXRhPW5ldyBJbnQxNkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDMyOnIuZGF0YT1uZXcgSW50MzJBcnJheShlLmRhdGEpO2JyZWFrO2Nhc2UgRC5GbG9hdDMyOnIuZGF0YT1uZXcgRmxvYXQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBELkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguVUludDY0OnIuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWs7Y2FzZSBoLkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEubGVuZ3RoKTtmb3IobGV0IG89MDtvPHIuZGF0YS5sZW5ndGg7bysrKXIuZGF0YVtvXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWt9YnJlYWs7Y2FzZSBoLlVJbnQ2NDpjYXNlIGguSW50NjQ6c3dpdGNoKHIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgaC5VSW50ODpyLmRhdGE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQxNjpyLmRhdGE9bmV3IFVpbnQxNkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2UgaC5JbnQxNjpyLmRhdGE9bmV3IEludDE2QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2UgaC5JbnQzMjpyLmRhdGE9bmV3IEludDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBELkZsb2F0MzI6ci5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBELkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQ2NDpyLmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG89ZS5kYXRhLmNvbnN0cnVjdG9yO3IuZGF0YT1uZXcgbyhlLmRhdGEubGVuZ3RoKSxyLmRhdGEhPW51bGwmJnIuZGF0YS5zZXQoZS5kYXRhLDApfXJldHVybiByfXZhciBKPU9yO3ZhciBMZT1jbGFzc3tmY247d29ya2VyUXVldWU7cnVuSW5mbztjb25zdHJ1Y3RvcihBLHQpe3RoaXMuZmNuPXQsdGhpcy53b3JrZXJRdWV1ZT1uZXcgQXJyYXkoQSksdGhpcy53b3JrZXJRdWV1ZS5maWxsKG51bGwpLHRoaXMucnVuSW5mbz1bXX1ydW5UYXNrcyhBLHQ9bnVsbCl7bGV0IHI9e3Rhc2tRdWV1ZTpbXSxyZXN1bHRzOltdLGFkZGluZ1Rhc2tzOiExLHBvc3Rwb25lZDohMSxydW5uaW5nV29ya2VyczowLGluZGV4OjAsY29tcGxldGVkVGFza3M6MCxwcm9ncmVzc0NhbGxiYWNrOnQsY2FuY2VsZWQ6ITF9O3JldHVybiB0aGlzLnJ1bkluZm8ucHVzaChyKSxyLmluZGV4PXRoaXMucnVuSW5mby5sZW5ndGgtMSx7cHJvbWlzZTpuZXcgUHJvbWlzZSgobyxpKT0+e3IucmVzb2x2ZT1vLHIucmVqZWN0PWksci5yZXN1bHRzPW5ldyBBcnJheShBLmxlbmd0aCksci5jb21wbGV0ZWRUYXNrcz0wLHIuYWRkaW5nVGFza3M9ITAsQS5mb3JFYWNoKChzLG0pPT57dGhpcy5hZGRUYXNrKHIuaW5kZXgsbSxzKX0pLHIuYWRkaW5nVGFza3M9ITF9KSxydW5JZDpyLmluZGV4fX10ZXJtaW5hdGVXb3JrZXJzKCl7Zm9yKGxldCBBPTA7QTx0aGlzLndvcmtlclF1ZXVlLmxlbmd0aDtBKyspe2xldCB0PXRoaXMud29ya2VyUXVldWVbQV07dD8udGVybWluYXRlKCksdGhpcy53b3JrZXJRdWV1ZVtBXT1udWxsfX1jYW5jZWwoQSl7bGV0IHQ9dGhpcy5ydW5JbmZvW0FdO3QhPW51bGwmJih0LmNhbmNlbGVkPSEwKX1hZGRUYXNrKEEsdCxyKXtsZXQgbz10aGlzLnJ1bkluZm9bQV07aWYobz8uY2FuY2VsZWQ9PT0hMCl7by5yZWplY3QoIlJlbWFpbmluZyB0YXNrcyBjYW5jZWxlZCIpLHRoaXMuY2xlYXJUYXNrKG8uaW5kZXgpO3JldHVybn1pZih0aGlzLndvcmtlclF1ZXVlLmxlbmd0aD4wKXtsZXQgaT10aGlzLndvcmtlclF1ZXVlLnBvcCgpO28ucnVubmluZ1dvcmtlcnMrKyxyW3IubGVuZ3RoLTFdLndlYldvcmtlcj1pLHRoaXMuZmNuKC4uLnIpLnRoZW4oKHt3ZWJXb3JrZXI6cywuLi5tfSk9PntpZih0aGlzLndvcmtlclF1ZXVlLnB1c2gocyksdGhpcy5ydW5JbmZvW0FdIT09bnVsbCl7aWYoby5ydW5uaW5nV29ya2Vycy0tLG8ucmVzdWx0c1t0XT1tLG8uY29tcGxldGVkVGFza3MrKyxvLnByb2dyZXNzQ2FsbGJhY2shPW51bGwmJm8ucHJvZ3Jlc3NDYWxsYmFjayhvLmNvbXBsZXRlZFRhc2tzLG8ucmVzdWx0cy5sZW5ndGgpLG8udGFza1F1ZXVlLmxlbmd0aD4wKXtsZXQgZj1vLnRhc2tRdWV1ZS5zaGlmdCgpO3RoaXMuYWRkVGFzayhBLGZbMF0sZlsxXSl9ZWxzZSBpZighby5hZGRpbmdUYXNrcyYmby5ydW5uaW5nV29ya2Vycz09PTApe2xldCBmPW8ucmVzdWx0cztvLnJlc29sdmUoZiksdGhpcy5jbGVhclRhc2soby5pbmRleCl9fX0pLmNhdGNoKHM9PntvLnJlamVjdChzKSx0aGlzLmNsZWFyVGFzayhvLmluZGV4KX0pfWVsc2Ugby5ydW5uaW5nV29ya2VycyE9PTB8fG8ucG9zdHBvbmVkP28udGFza1F1ZXVlLnB1c2goW3Qscl0pOihvLnBvc3Rwb25lZD0hMCxzZXRUaW1lb3V0KCgpPT57by5wb3N0cG9uZWQ9ITEsdGhpcy5hZGRUYXNrKG8uaW5kZXgsdCxyKX0sNTApKX1jbGVhclRhc2soQSl7dGhpcy5ydW5JbmZvW0FdLnJlc3VsdHM9W10sdGhpcy5ydW5JbmZvW0FdLnRhc2tRdWV1ZT1bXSx0aGlzLnJ1bkluZm9bQV0ucHJvZ3Jlc3NDYWxsYmFjaz1udWxsLHRoaXMucnVuSW5mb1tBXS5jYW5jZWxlZD1udWxsLHRoaXMucnVuSW5mb1tBXS5yZWplY3Q9KCk9Pnt9LHRoaXMucnVuSW5mb1tBXS5yZXNvbHZlPSgpPT57fX19LE1lPUxlO3ZhciBQcj17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEk9UHI7dmFyIHB0PVN5bWJvbCgiQ29tbGluay5wcm94eSIpLHhyPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHFlPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxIZT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZmU9U3ltYm9sKCJDb21saW5rLnRocm93biIpLG10PWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLFRyPXtjYW5IYW5kbGU6ZT0+bXQoZSkmJmVbcHRdLHNlcmlhbGl6ZShlKXtsZXR7cG9ydDE6QSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGZ0KGUsQSksW3QsW3RdXX0sZGVzZXJpYWxpemUoZSl7cmV0dXJuIGUuc3RhcnQoKSxLZShlKX19LEdyPXtjYW5IYW5kbGU6ZT0+bXQoZSkmJmZlIGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IEE7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9BPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06QT17aXNFcnJvcjohMSx2YWx1ZTplfSxbQSxbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSx1dD1uZXcgTWFwKFtbInByb3h5IixUcl0sWyJ0aHJvdyIsR3JdXSk7ZnVuY3Rpb24gSnIoZSxBKXtmb3IobGV0IHQgb2YgZSlpZihBPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KEEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGZ0KGUsQT1nbG9iYWxUaGlzLHQ9WyIqIl0pe0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihvKXtpZighb3x8IW8uZGF0YSlyZXR1cm47aWYoIUpyKHQsby5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke28ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOmksdHlwZTpzLHBhdGg6bX09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sby5kYXRhKSxmPShvLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKHEpLHA7dHJ5e2xldCBhPW0uc2xpY2UoMCwtMSkucmVkdWNlKCh1LGcpPT51W2ddLGUpLG49bS5yZWR1Y2UoKHUsZyk9PnVbZ10sZSk7c3dpdGNoKHMpe2Nhc2UiR0VUIjpwPW47YnJlYWs7Y2FzZSJTRVQiOmFbbS5zbGljZSgtMSlbMF1dPXEoby5kYXRhLnZhbHVlKSxwPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOnA9bi5hcHBseShhLGYpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IHU9bmV3IG4oLi4uZik7cD1xcih1KX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOnUscG9ydDI6Z309bmV3IE1lc3NhZ2VDaGFubmVsO2Z0KGUsZykscD1qZSh1LFt1XSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpwPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goYSl7cD17dmFsdWU6YSxbZmVdOjB9fVByb21pc2UucmVzb2x2ZShwKS5jYXRjaChhPT4oe3ZhbHVlOmEsW2ZlXTowfSkpLnRoZW4oYT0+e2xldFtuLHVdPWRlKGEpO0EucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLHtpZDppfSksdSkscz09PSJSRUxFQVNFIiYmKEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksY3QoQSksSGUgaW4gZSYmdHlwZW9mIGVbSGVdPT0iZnVuY3Rpb24iJiZlW0hlXSgpKX0pLmNhdGNoKGE9PntsZXRbbix1XT1kZSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2ZlXTowfSk7QS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbikse2lkOml9KSx1KX0pfSksQS5zdGFydCYmQS5zdGFydCgpfWZ1bmN0aW9uIExyKGUpe3JldHVybiBlLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIGN0KGUpe0xyKGUpJiZlLmNsb3NlKCl9ZnVuY3Rpb24gS2UoZSxBKXtyZXR1cm4gWWUoZSxbXSxBKX1mdW5jdGlvbiB1ZShlKXtpZihlKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gQnQoZSl7cmV0dXJuIHYoZSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57Y3QoZSl9KX12YXIgY2U9bmV3IFdlYWtNYXAsQmU9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShlPT57bGV0IEE9KGNlLmdldChlKXx8MCktMTtjZS5zZXQoZSxBKSxBPT09MCYmQnQoZSl9KTtmdW5jdGlvbiBNcihlLEEpe2xldCB0PShjZS5nZXQoQSl8fDApKzE7Y2Uuc2V0KEEsdCksQmUmJkJlLnJlZ2lzdGVyKGUsQSxlKX1mdW5jdGlvbiBIcihlKXtCZSYmQmUudW5yZWdpc3RlcihlKX1mdW5jdGlvbiBZZShlLEE9W10sdD1mdW5jdGlvbigpe30pe2xldCByPSExLG89bmV3IFByb3h5KHQse2dldChpLHMpe2lmKHVlKHIpLHM9PT1xZSlyZXR1cm4oKT0+e0hyKG8pLEJ0KGUpLHI9ITB9O2lmKHM9PT0idGhlbiIpe2lmKEEubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+b307bGV0IG09dihlLHt0eXBlOiJHRVQiLHBhdGg6QS5tYXAoZj0+Zi50b1N0cmluZygpKX0pLnRoZW4ocSk7cmV0dXJuIG0udGhlbi5iaW5kKG0pfXJldHVybiBZZShlLFsuLi5BLHNdKX0sc2V0KGkscyxtKXt1ZShyKTtsZXRbZixwXT1kZShtKTtyZXR1cm4gdihlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLkEsc10ubWFwKGE9PmEudG9TdHJpbmcoKSksdmFsdWU6Zn0scCkudGhlbihxKX0sYXBwbHkoaSxzLG0pe3VlKHIpO2xldCBmPUFbQS5sZW5ndGgtMV07aWYoZj09PXhyKXJldHVybiB2KGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4ocSk7aWYoZj09PSJiaW5kIilyZXR1cm4gWWUoZSxBLnNsaWNlKDAsLTEpKTtsZXRbcCxhXT1sdChtKTtyZXR1cm4gdihlLHt0eXBlOiJBUFBMWSIscGF0aDpBLm1hcChuPT5uLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpwfSxhKS50aGVuKHEpfSxjb25zdHJ1Y3QoaSxzKXt1ZShyKTtsZXRbbSxmXT1sdChzKTtyZXR1cm4gdihlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6QS5tYXAocD0+cC50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6bX0sZikudGhlbihxKX19KTtyZXR1cm4gTXIobyxlKSxvfWZ1bmN0aW9uIFlyKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIGx0KGUpe2xldCBBPWUubWFwKGRlKTtyZXR1cm5bQS5tYXAodD0+dFswXSksWXIoQS5tYXAodD0+dFsxXSkpXX12YXIgZHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gamUoZSxBKXtyZXR1cm4gZHQuc2V0KGUsQSksZX1mdW5jdGlvbiBxcihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbcHRdOiEwfSl9ZnVuY3Rpb24gZGUoZSl7Zm9yKGxldFtBLHRdb2YgdXQpaWYodC5jYW5IYW5kbGUoZSkpe2xldFtyLG9dPXQuc2VyaWFsaXplKGUpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTpBLHZhbHVlOnJ9LG9dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTplfSxkdC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBxKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHV0LmdldChlLm5hbWUpLmRlc2VyaWFsaXplKGUudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gZS52YWx1ZX19ZnVuY3Rpb24gdihlLEEsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbz1LcigpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaShzKXshcy5kYXRhfHwhcy5kYXRhLmlkfHxzLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpKSxyKHMuZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sQSksdCl9KX1mdW5jdGlvbiBLcigpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gcmUoZSxBKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseShBLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpqcn09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6X2V9PU9iamVjdCxFZT0oZT0+QT0+e2xldCB0PWpyLmNhbGwoQSk7cmV0dXJuIGVbdF18fChlW3RdPXQuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSx4PWU9PihlPWUudG9Mb3dlckNhc2UoKSxBPT5FZShBKT09PWUpLHllPWU9PkE9PnR5cGVvZiBBPT09ZSx7aXNBcnJheTp6fT1BcnJheSxpZT15ZSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gdnIoZSl7cmV0dXJuIGUhPT1udWxsJiYhaWUoZSkmJmUuY29uc3RydWN0b3IhPT1udWxsJiYhaWUoZS5jb25zdHJ1Y3RvcikmJlMoZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIFF0PXgoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24genIoZSl7bGV0IEE7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9BPUFycmF5QnVmZmVyLmlzVmlldyhlKTpBPWUmJmUuYnVmZmVyJiZRdChlLmJ1ZmZlciksQX12YXIgX3I9eWUoInN0cmluZyIpLFM9eWUoImZ1bmN0aW9uIiksaHQ9eWUoIm51bWJlciIpLFFlPWU9PmUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCIsVnI9ZT0+ZT09PSEwfHxlPT09ITEsQ2U9ZT0+e2lmKEVlKGUpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IEE9X2UoZSk7cmV0dXJuKEE9PT1udWxsfHxBPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKEEpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGUpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBlKX0sWnI9eCgiRGF0ZSIpLFhyPXgoIkZpbGUiKSwkcj14KCJCbG9iIiksZWk9eCgiRmlsZUxpc3QiKSxBaT1lPT5RZShlKSYmUyhlLnBpcGUpLHRpPWU9PntsZXQgQTtyZXR1cm4gZSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmZSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxTKGUuYXBwZW5kKSYmKChBPUVlKGUpKT09PSJmb3JtZGF0YSJ8fEE9PT0ib2JqZWN0IiYmUyhlLnRvU3RyaW5nKSYmZS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxyaT14KCJVUkxTZWFyY2hQYXJhbXMiKSxpaT1lPT5lLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gb2UoZSxBLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihlPT09bnVsbHx8dHlwZW9mIGU+InUiKXJldHVybjtsZXQgcixvO2lmKHR5cGVvZiBlIT0ib2JqZWN0IiYmKGU9W2VdKSx6KGUpKWZvcihyPTAsbz1lLmxlbmd0aDtyPG87cisrKUEuY2FsbChudWxsLGVbcl0scixlKTtlbHNle2xldCBpPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSk6T2JqZWN0LmtleXMoZSkscz1pLmxlbmd0aCxtO2ZvcihyPTA7cjxzO3IrKyltPWlbcl0sQS5jYWxsKG51bGwsZVttXSxtLGUpfX1mdW5jdGlvbiB3dChlLEEpe0E9QS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKGUpLHI9dC5sZW5ndGgsbztmb3IoO3ItLSA+MDspaWYobz10W3JdLEE9PT1vLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG87cmV0dXJuIG51bGx9dmFyIFJ0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsa3Q9ZT0+IWllKGUpJiZlIT09UnQ7ZnVuY3Rpb24gemUoKXtsZXR7Y2FzZWxlc3M6ZX09a3QodGhpcykmJnRoaXN8fHt9LEE9e30sdD0ocixvKT0+e2xldCBpPWUmJnd0KEEsbyl8fG87Q2UoQVtpXSkmJkNlKHIpP0FbaV09emUoQVtpXSxyKTpDZShyKT9BW2ldPXplKHt9LHIpOnoocik/QVtpXT1yLnNsaWNlKCk6QVtpXT1yfTtmb3IobGV0IHI9MCxvPWFyZ3VtZW50cy5sZW5ndGg7cjxvO3IrKylhcmd1bWVudHNbcl0mJm9lKGFyZ3VtZW50c1tyXSx0KTtyZXR1cm4gQX12YXIgb2k9KGUsQSx0LHthbGxPd25LZXlzOnJ9PXt9KT0+KG9lKEEsKG8saSk9Pnt0JiZTKG8pP2VbaV09cmUobyx0KTplW2ldPW99LHthbGxPd25LZXlzOnJ9KSxlKSxhaT1lPT4oZS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihlPWUuc2xpY2UoMSkpLGUpLG5pPShlLEEsdCxyKT0+e2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQS5wcm90b3R5cGUsciksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3VwZXIiLHt2YWx1ZTpBLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oZS5wcm90b3R5cGUsdCl9LHNpPShlLEEsdCxyKT0+e2xldCBvLGkscyxtPXt9O2lmKEE9QXx8e30sZT09bnVsbClyZXR1cm4gQTtkb3tmb3Iobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSxpPW8ubGVuZ3RoO2ktLSA+MDspcz1vW2ldLCghcnx8cihzLGUsQSkpJiYhbVtzXSYmKEFbc109ZVtzXSxtW3NdPSEwKTtlPXQhPT0hMSYmX2UoZSl9d2hpbGUoZSYmKCF0fHx0KGUsQSkpJiZlIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIEF9LGdpPShlLEEsdCk9PntlPVN0cmluZyhlKSwodD09PXZvaWQgMHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKSx0LT1BLmxlbmd0aDtsZXQgcj1lLmluZGV4T2YoQSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0sSWk9ZT0+e2lmKCFlKXJldHVybiBudWxsO2lmKHooZSkpcmV0dXJuIGU7bGV0IEE9ZS5sZW5ndGg7aWYoIWh0KEEpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShBKTtmb3IoO0EtLSA+MDspdFtBXT1lW0FdO3JldHVybiB0fSxsaT0oZT0+QT0+ZSYmQSBpbnN0YW5jZW9mIGUpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmX2UoVWludDhBcnJheSkpLHBpPShlLEEpPT57bGV0IHI9KGUmJmVbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChlKSxvO2Zvcig7KG89ci5uZXh0KCkpJiYhby5kb25lOyl7bGV0IGk9by52YWx1ZTtBLmNhbGwoZSxpWzBdLGlbMV0pfX0sbWk9KGUsQSk9PntsZXQgdCxyPVtdO2Zvcig7KHQ9ZS5leGVjKEEpKSE9PW51bGw7KXIucHVzaCh0KTtyZXR1cm4gcn0sdWk9eCgiSFRNTEZvcm1FbGVtZW50IiksZmk9ZT0+ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxyLG8pe3JldHVybiByLnRvVXBwZXJDYXNlKCkrb30pLEV0PSgoe2hhc093blByb3BlcnR5OmV9KT0+KEEsdCk9PmUuY2FsbChBLHQpKShPYmplY3QucHJvdG90eXBlKSxjaT14KCJSZWdFeHAiKSxidD0oZSxBKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGUpLHI9e307b2UodCwobyxpKT0+e2xldCBzOyhzPUEobyxpLGUpKSE9PSExJiYocltpXT1zfHxvKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUscil9LEJpPWU9PntidChlLChBLHQpPT57aWYoUyhlKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHQpIT09LTEpcmV0dXJuITE7bGV0IHI9ZVt0XTtpZihTKHIpKXtpZihBLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIEEpe0Eud3JpdGFibGU9ITE7cmV0dXJufUEuc2V0fHwoQS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrdCsiJyIpfSl9fSl9LGRpPShlLEEpPT57bGV0IHQ9e30scj1vPT57by5mb3JFYWNoKGk9Pnt0W2ldPSEwfSl9O3JldHVybiB6KGUpP3IoZSk6cihTdHJpbmcoZSkuc3BsaXQoQSkpLHR9LENpPSgpPT57fSxFaT0oZSxBKT0+KGU9K2UsTnVtYmVyLmlzRmluaXRlKGUpP2U6QSksdmU9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix5dD0iMDEyMzQ1Njc4OSIsRHQ9e0RJR0lUOnl0LEFMUEhBOnZlLEFMUEhBX0RJR0lUOnZlK3ZlLnRvVXBwZXJDYXNlKCkreXR9LHlpPShlPTE2LEE9RHQuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDpyfT1BO2Zvcig7ZS0tOyl0Kz1BW01hdGgucmFuZG9tKCkqcnwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gUWkoZSl7cmV0dXJuISEoZSYmUyhlLmFwcGVuZCkmJmVbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJmVbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIGhpPWU9PntsZXQgQT1uZXcgQXJyYXkoMTApLHQ9KHIsbyk9PntpZihRZShyKSl7aWYoQS5pbmRleE9mKHIpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gcikpe0Fbb109cjtsZXQgaT16KHIpP1tdOnt9O3JldHVybiBvZShyLChzLG0pPT57bGV0IGY9dChzLG8rMSk7IWllKGYpJiYoaVttXT1mKX0pLEFbb109dm9pZCAwLGl9fXJldHVybiByfTtyZXR1cm4gdChlLDApfSx3aT14KCJBc3luY0Z1bmN0aW9uIiksUmk9ZT0+ZSYmKFFlKGUpfHxTKGUpKSYmUyhlLnRoZW4pJiZTKGUuY2F0Y2gpLGM9e2lzQXJyYXk6eixpc0FycmF5QnVmZmVyOlF0LGlzQnVmZmVyOnZyLGlzRm9ybURhdGE6dGksaXNBcnJheUJ1ZmZlclZpZXc6enIsaXNTdHJpbmc6X3IsaXNOdW1iZXI6aHQsaXNCb29sZWFuOlZyLGlzT2JqZWN0OlFlLGlzUGxhaW5PYmplY3Q6Q2UsaXNVbmRlZmluZWQ6aWUsaXNEYXRlOlpyLGlzRmlsZTpYcixpc0Jsb2I6JHIsaXNSZWdFeHA6Y2ksaXNGdW5jdGlvbjpTLGlzU3RyZWFtOkFpLGlzVVJMU2VhcmNoUGFyYW1zOnJpLGlzVHlwZWRBcnJheTpsaSxpc0ZpbGVMaXN0OmVpLGZvckVhY2g6b2UsbWVyZ2U6emUsZXh0ZW5kOm9pLHRyaW06aWksc3RyaXBCT006YWksaW5oZXJpdHM6bmksdG9GbGF0T2JqZWN0OnNpLGtpbmRPZjpFZSxraW5kT2ZUZXN0OngsZW5kc1dpdGg6Z2ksdG9BcnJheTpJaSxmb3JFYWNoRW50cnk6cGksbWF0Y2hBbGw6bWksaXNIVE1MRm9ybTp1aSxoYXNPd25Qcm9wZXJ0eTpFdCxoYXNPd25Qcm9wOkV0LHJlZHVjZURlc2NyaXB0b3JzOmJ0LGZyZWV6ZU1ldGhvZHM6QmksdG9PYmplY3RTZXQ6ZGksdG9DYW1lbENhc2U6Zmksbm9vcDpDaSx0b0Zpbml0ZU51bWJlcjpFaSxmaW5kS2V5Ond0LGdsb2JhbDpSdCxpc0NvbnRleHREZWZpbmVkOmt0LEFMUEhBQkVUOkR0LGdlbmVyYXRlU3RyaW5nOnlpLGlzU3BlY0NvbXBsaWFudEZvcm06UWksdG9KU09OT2JqZWN0OmhpLGlzQXN5bmNGbjp3aSxpc1RoZW5hYmxlOlJpfTtmdW5jdGlvbiBfKGUsQSx0LHIsbyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPWUsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixBJiYodGhpcy5jb2RlPUEpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG8mJih0aGlzLnJlc3BvbnNlPW8pfWMuaW5oZXJpdHMoXyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIFd0PV8ucHJvdG90eXBlLEZ0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goZT0+e0Z0W2VdPXt2YWx1ZTplfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF8sRnQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShXdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtfLmZyb209KGUsQSx0LHIsbyxpKT0+e2xldCBzPU9iamVjdC5jcmVhdGUoV3QpO3JldHVybiBjLnRvRmxhdE9iamVjdChlLHMsZnVuY3Rpb24oZil7cmV0dXJuIGYhPT1FcnJvci5wcm90b3R5cGV9LG09Pm0hPT0iaXNBeGlvc0Vycm9yIiksXy5jYWxsKHMsZS5tZXNzYWdlLEEsdCxyLG8pLHMuY2F1c2U9ZSxzLm5hbWU9ZS5uYW1lLGkmJk9iamVjdC5hc3NpZ24ocyxpKSxzfTt2YXIgdz1fO3ZhciBoZT1udWxsO2Z1bmN0aW9uIFZlKGUpe3JldHVybiBjLmlzUGxhaW5PYmplY3QoZSl8fGMuaXNBcnJheShlKX1mdW5jdGlvbiBOdChlKXtyZXR1cm4gYy5lbmRzV2l0aChlLCJbXSIpP2Uuc2xpY2UoMCwtMik6ZX1mdW5jdGlvbiBVdChlLEEsdCl7cmV0dXJuIGU/ZS5jb25jYXQoQSkubWFwKGZ1bmN0aW9uKG8saSl7cmV0dXJuIG89TnQobyksIXQmJmk/IlsiK28rIl0iOm99KS5qb2luKHQ/Ii4iOiIiKTpBfWZ1bmN0aW9uIGtpKGUpe3JldHVybiBjLmlzQXJyYXkoZSkmJiFlLnNvbWUoVmUpfXZhciBiaT1jLnRvRmxhdE9iamVjdChjLHt9LG51bGwsZnVuY3Rpb24oQSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KEEpfSk7ZnVuY3Rpb24gRGkoZSxBLHQpe2lmKCFjLmlzT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO0E9QXx8bmV3KGhlfHxGb3JtRGF0YSksdD1jLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oQixRKXtyZXR1cm4hYy5pc1VuZGVmaW5lZChRW0JdKX0pO2xldCByPXQubWV0YVRva2VucyxvPXQudmlzaXRvcnx8YSxpPXQuZG90cyxzPXQuaW5kZXhlcyxmPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmMuaXNTcGVjQ29tcGxpYW50Rm9ybShBKTtpZighYy5pc0Z1bmN0aW9uKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gcChsKXtpZihsPT09bnVsbClyZXR1cm4iIjtpZihjLmlzRGF0ZShsKSlyZXR1cm4gbC50b0lTT1N0cmluZygpO2lmKCFmJiZjLmlzQmxvYihsKSl0aHJvdyBuZXcgdygiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gYy5pc0FycmF5QnVmZmVyKGwpfHxjLmlzVHlwZWRBcnJheShsKT9mJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbbF0pOkJ1ZmZlci5mcm9tKGwpOmx9ZnVuY3Rpb24gYShsLEIsUSl7bGV0IFI9bDtpZihsJiYhUSYmdHlwZW9mIGw9PSJvYmplY3QiKXtpZihjLmVuZHNXaXRoKEIsInt9IikpQj1yP0I6Qi5zbGljZSgwLC0yKSxsPUpTT04uc3RyaW5naWZ5KGwpO2Vsc2UgaWYoYy5pc0FycmF5KGwpJiZraShsKXx8KGMuaXNGaWxlTGlzdChsKXx8Yy5lbmRzV2l0aChCLCJbXSIpKSYmKFI9Yy50b0FycmF5KGwpKSlyZXR1cm4gQj1OdChCKSxSLmZvckVhY2goZnVuY3Rpb24oUCxRcil7IShjLmlzVW5kZWZpbmVkKFApfHxQPT09bnVsbCkmJkEuYXBwZW5kKHM9PT0hMD9VdChbQl0sUXIsaSk6cz09PW51bGw/QjpCKyJbXSIscChQKSl9KSwhMX1yZXR1cm4gVmUobCk/ITA6KEEuYXBwZW5kKFV0KFEsQixpKSxwKGwpKSwhMSl9bGV0IG49W10sdT1PYmplY3QuYXNzaWduKGJpLHtkZWZhdWx0VmlzaXRvcjphLGNvbnZlcnRWYWx1ZTpwLGlzVmlzaXRhYmxlOlZlfSk7ZnVuY3Rpb24gZyhsLEIpe2lmKCFjLmlzVW5kZWZpbmVkKGwpKXtpZihuLmluZGV4T2YobCkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrQi5qb2luKCIuIikpO24ucHVzaChsKSxjLmZvckVhY2gobCxmdW5jdGlvbihSLE8peyghKGMuaXNVbmRlZmluZWQoUil8fFI9PT1udWxsKSYmby5jYWxsKEEsUixjLmlzU3RyaW5nKE8pP08udHJpbSgpOk8sQix1KSk9PT0hMCYmZyhSLEI/Qi5jb25jYXQoTyk6W09dKX0pLG4ucG9wKCl9fWlmKCFjLmlzT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gZyhlKSxBfXZhciBMPURpO2Z1bmN0aW9uIFN0KGUpe2xldCBBPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBBW3JdfSl9ZnVuY3Rpb24gT3QoZSxBKXt0aGlzLl9wYWlycz1bXSxlJiZMKGUsdGhpcyxBKX12YXIgUHQ9T3QucHJvdG90eXBlO1B0LmFwcGVuZD1mdW5jdGlvbihBLHQpe3RoaXMuX3BhaXJzLnB1c2goW0EsdF0pfTtQdC50b1N0cmluZz1mdW5jdGlvbihBKXtsZXQgdD1BP2Z1bmN0aW9uKHIpe3JldHVybiBBLmNhbGwodGhpcyxyLFN0KX06U3Q7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gdChvWzBdKSsiPSIrdChvWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHdlPU90O2Z1bmN0aW9uIFdpKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIGFlKGUsQSx0KXtpZighQSlyZXR1cm4gZTtsZXQgcj10JiZ0LmVuY29kZXx8V2ksbz10JiZ0LnNlcmlhbGl6ZSxpO2lmKG8/aT1vKEEsdCk6aT1jLmlzVVJMU2VhcmNoUGFyYW1zKEEpP0EudG9TdHJpbmcoKTpuZXcgd2UoQSx0KS50b1N0cmluZyhyKSxpKXtsZXQgcz1lLmluZGV4T2YoIiMiKTtzIT09LTEmJihlPWUuc2xpY2UoMCxzKSksZSs9KGUuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikraX1yZXR1cm4gZX12YXIgWmU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShBLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOkEscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChBKXt0aGlzLmhhbmRsZXJzW0FdJiYodGhpcy5oYW5kbGVyc1tBXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKEEpe2MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZBKHIpfSl9fSxYZT1aZTt2YXIgUmU9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciB4dD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6d2U7dmFyIFR0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgR3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgSnQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6eHQsRm9ybURhdGE6VHQsQmxvYjpHdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciAkZT17fTt3cigkZSx7aGFzQnJvd3NlckVudjooKT0+THQsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5GaSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PlVpfSk7dmFyIEx0PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLEZpPShlPT5MdCYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihlKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLFVpPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgVz17Li4uJGUsLi4uSnR9O2Z1bmN0aW9uIGVBKGUsQSl7cmV0dXJuIEwoZSxuZXcgVy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixvLGkpe3JldHVybiBXLmlzTm9kZSYmYy5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOmkuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sQSkpfWZ1bmN0aW9uIE5pKGUpe3JldHVybiBjLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxlKS5tYXAoQT0+QVswXT09PSJbXSI/IiI6QVsxXXx8QVswXSl9ZnVuY3Rpb24gU2koZSl7bGV0IEE9e30sdD1PYmplY3Qua2V5cyhlKSxyLG89dC5sZW5ndGgsaTtmb3Iocj0wO3I8bztyKyspaT10W3JdLEFbaV09ZVtpXTtyZXR1cm4gQX1mdW5jdGlvbiBPaShlKXtmdW5jdGlvbiBBKHQscixvLGkpe2xldCBzPXRbaSsrXTtpZihzPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IG09TnVtYmVyLmlzRmluaXRlKCtzKSxmPWk+PXQubGVuZ3RoO3JldHVybiBzPSFzJiZjLmlzQXJyYXkobyk/by5sZW5ndGg6cyxmPyhjLmhhc093blByb3AobyxzKT9vW3NdPVtvW3NdLHJdOm9bc109ciwhbSk6KCghb1tzXXx8IWMuaXNPYmplY3Qob1tzXSkpJiYob1tzXT1bXSksQSh0LHIsb1tzXSxpKSYmYy5pc0FycmF5KG9bc10pJiYob1tzXT1TaShvW3NdKSksIW0pfWlmKGMuaXNGb3JtRGF0YShlKSYmYy5pc0Z1bmN0aW9uKGUuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBjLmZvckVhY2hFbnRyeShlLChyLG8pPT57QShOaShyKSxvLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBrZT1PaTtmdW5jdGlvbiBQaShlLEEsdCl7aWYoYy5pc1N0cmluZyhlKSl0cnl7cmV0dXJuKEF8fEpTT04ucGFyc2UpKGUpLGMudHJpbShlKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShlKX12YXIgQUE9e3RyYW5zaXRpb25hbDpSZSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKEEsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixvPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGk9Yy5pc09iamVjdChBKTtpZihpJiZjLmlzSFRNTEZvcm0oQSkmJihBPW5ldyBGb3JtRGF0YShBKSksYy5pc0Zvcm1EYXRhKEEpKXJldHVybiBvP0pTT04uc3RyaW5naWZ5KGtlKEEpKTpBO2lmKGMuaXNBcnJheUJ1ZmZlcihBKXx8Yy5pc0J1ZmZlcihBKXx8Yy5pc1N0cmVhbShBKXx8Yy5pc0ZpbGUoQSl8fGMuaXNCbG9iKEEpKXJldHVybiBBO2lmKGMuaXNBcnJheUJ1ZmZlclZpZXcoQSkpcmV0dXJuIEEuYnVmZmVyO2lmKGMuaXNVUkxTZWFyY2hQYXJhbXMoQSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksQS50b1N0cmluZygpO2xldCBtO2lmKGkpe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIGVBKEEsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigobT1jLmlzRmlsZUxpc3QoQSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGY9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBMKG0/eyJmaWxlc1tdIjpBfTpBLGYmJm5ldyBmLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gaXx8bz8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLFBpKEEpKTpBfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKEEpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxBQS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG89dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoQSYmYy5pc1N0cmluZyhBKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bykpe2xldCBzPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm87dHJ5e3JldHVybiBKU09OLnBhcnNlKEEpfWNhdGNoKG0pe2lmKHMpdGhyb3cgbS5uYW1lPT09IlN5bnRheEVycm9yIj93LmZyb20obSx3LkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOm19fXJldHVybiBBfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpXLmNsYXNzZXMuRm9ybURhdGEsQmxvYjpXLmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oQSl7cmV0dXJuIEE+PTIwMCYmQTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtjLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sZT0+e0FBLmhlYWRlcnNbZV09e319KTt2YXIgVj1BQTt2YXIgeGk9Yy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxNdD1lPT57bGV0IEE9e30sdCxyLG87cmV0dXJuIGUmJmUuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe289cy5pbmRleE9mKCI6IiksdD1zLnN1YnN0cmluZygwLG8pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9cy5zdWJzdHJpbmcobysxKS50cmltKCksISghdHx8QVt0XSYmeGlbdF0pJiYodD09PSJzZXQtY29va2llIj9BW3RdP0FbdF0ucHVzaChyKTpBW3RdPVtyXTpBW3RdPUFbdF0/QVt0XSsiLCAiK3I6cil9KSxBfTt2YXIgSHQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBuZShlKXtyZXR1cm4gZSYmU3RyaW5nKGUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGJlKGUpe3JldHVybiBlPT09ITF8fGU9PW51bGw/ZTpjLmlzQXJyYXkoZSk/ZS5tYXAoYmUpOlN0cmluZyhlKX1mdW5jdGlvbiBUaShlKXtsZXQgQT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoZSk7KUFbclsxXV09clsyXTtyZXR1cm4gQX12YXIgR2k9ZT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChlLnRyaW0oKSk7ZnVuY3Rpb24gdEEoZSxBLHQscixvKXtpZihjLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLEEsdCk7aWYobyYmKEE9dCksISFjLmlzU3RyaW5nKEEpKXtpZihjLmlzU3RyaW5nKHIpKXJldHVybiBBLmluZGV4T2YocikhPT0tMTtpZihjLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoQSl9fWZ1bmN0aW9uIEppKGUpe3JldHVybiBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKEEsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIExpKGUsQSl7bGV0IHQ9Yy50b0NhbWVsQ2FzZSgiICIrQSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG8saSxzKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsQSxvLGkscyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFo9Y2xhc3N7Y29uc3RydWN0b3IoQSl7QSYmdGhpcy5zZXQoQSl9c2V0KEEsdCxyKXtsZXQgbz10aGlzO2Z1bmN0aW9uIGkobSxmLHApe2xldCBhPW5lKGYpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgbj1jLmZpbmRLZXkobyxhKTsoIW58fG9bbl09PT12b2lkIDB8fHA9PT0hMHx8cD09PXZvaWQgMCYmb1tuXSE9PSExKSYmKG9bbnx8Zl09YmUobSkpfWxldCBzPShtLGYpPT5jLmZvckVhY2gobSwocCxhKT0+aShwLGEsZikpO3JldHVybiBjLmlzUGxhaW5PYmplY3QoQSl8fEEgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3MoQSx0KTpjLmlzU3RyaW5nKEEpJiYoQT1BLnRyaW0oKSkmJiFHaShBKT9zKE10KEEpLHQpOkEhPW51bGwmJmkodCxBLHIpLHRoaXN9Z2V0KEEsdCl7aWYoQT1uZShBKSxBKXtsZXQgcj1jLmZpbmRLZXkodGhpcyxBKTtpZihyKXtsZXQgbz10aGlzW3JdO2lmKCF0KXJldHVybiBvO2lmKHQ9PT0hMClyZXR1cm4gVGkobyk7aWYoYy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxvLHIpO2lmKGMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhvKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKEEsdCl7aWYoQT1uZShBKSxBKXtsZXQgcj1jLmZpbmRLZXkodGhpcyxBKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fHRBKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKEEsdCl7bGV0IHI9dGhpcyxvPSExO2Z1bmN0aW9uIGkocyl7aWYocz1uZShzKSxzKXtsZXQgbT1jLmZpbmRLZXkocixzKTttJiYoIXR8fHRBKHIsclttXSxtLHQpKSYmKGRlbGV0ZSByW21dLG89ITApfX1yZXR1cm4gYy5pc0FycmF5KEEpP0EuZm9yRWFjaChpKTppKEEpLG99Y2xlYXIoQSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxvPSExO2Zvcig7ci0tOyl7bGV0IGk9dFtyXTsoIUF8fHRBKHRoaXMsdGhpc1tpXSxpLEEsITApKSYmKGRlbGV0ZSB0aGlzW2ldLG89ITApfXJldHVybiBvfW5vcm1hbGl6ZShBKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIGMuZm9yRWFjaCh0aGlzLChvLGkpPT57bGV0IHM9Yy5maW5kS2V5KHIsaSk7aWYocyl7dFtzXT1iZShvKSxkZWxldGUgdFtpXTtyZXR1cm59bGV0IG09QT9KaShpKTpTdHJpbmcoaSkudHJpbSgpO20hPT1pJiZkZWxldGUgdFtpXSx0W21dPWJlKG8pLHJbbV09ITB9KSx0aGlzfWNvbmNhdCguLi5BKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5BKX10b0pTT04oQSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gYy5mb3JFYWNoKHRoaXMsKHIsbyk9PntyIT1udWxsJiZyIT09ITEmJih0W29dPUEmJmMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtBLHRdKT0+QSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKEEpe3JldHVybiBBIGluc3RhbmNlb2YgdGhpcz9BOm5ldyB0aGlzKEEpfXN0YXRpYyBjb25jYXQoQSwuLi50KXtsZXQgcj1uZXcgdGhpcyhBKTtyZXR1cm4gdC5mb3JFYWNoKG89PnIuc2V0KG8pKSxyfXN0YXRpYyBhY2Nlc3NvcihBKXtsZXQgcj0odGhpc1tIdF09dGhpc1tIdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxvPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIGkocyl7bGV0IG09bmUocyk7clttXXx8KExpKG8scyksclttXT0hMCl9cmV0dXJuIGMuaXNBcnJheShBKT9BLmZvckVhY2goaSk6aShBKSx0aGlzfX07Wi5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7Yy5yZWR1Y2VEZXNjcmlwdG9ycyhaLnByb3RvdHlwZSwoe3ZhbHVlOmV9LEEpPT57bGV0IHQ9QVswXS50b1VwcGVyQ2FzZSgpK0Euc2xpY2UoMSk7cmV0dXJue2dldDooKT0+ZSxzZXQocil7dGhpc1t0XT1yfX19KTtjLmZyZWV6ZU1ldGhvZHMoWik7dmFyIEY9WjtmdW5jdGlvbiBzZShlLEEpe2xldCB0PXRoaXN8fFYscj1BfHx0LG89Ri5mcm9tKHIuaGVhZGVycyksaT1yLmRhdGE7cmV0dXJuIGMuZm9yRWFjaChlLGZ1bmN0aW9uKG0pe2k9bS5jYWxsKHQsaSxvLm5vcm1hbGl6ZSgpLEE/QS5zdGF0dXM6dm9pZCAwKX0pLG8ubm9ybWFsaXplKCksaX1mdW5jdGlvbiBnZShlKXtyZXR1cm4hIShlJiZlLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFl0KGUsQSx0KXt3LmNhbGwodGhpcyxlPz8iY2FuY2VsZWQiLHcuRVJSX0NBTkNFTEVELEEsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1jLmluaGVyaXRzKFl0LHcse19fQ0FOQ0VMX186ITB9KTt2YXIgTT1ZdDtmdW5jdGlvbiByQShlLEEsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/ZSh0KTpBKG5ldyB3KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW3cuRVJSX0JBRF9SRVFVRVNULHcuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIHF0PVcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShlLEEsdCxyLG8saSl7bGV0IHM9W2UrIj0iK2VuY29kZVVSSUNvbXBvbmVudChBKV07Yy5pc051bWJlcih0KSYmcy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksYy5pc1N0cmluZyhyKSYmcy5wdXNoKCJwYXRoPSIrciksYy5pc1N0cmluZyhvKSYmcy5wdXNoKCJkb21haW49IitvKSxpPT09ITAmJnMucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPXMuam9pbigiOyAiKX0scmVhZChlKXtsZXQgQT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiBBP2RlY29kZVVSSUNvbXBvbmVudChBWzNdKTpudWxsfSxyZW1vdmUoZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIGlBKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9ZnVuY3Rpb24gb0EoZSxBKXtyZXR1cm4gQT9lLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitBLnJlcGxhY2UoL15cLysvLCIiKTplfWZ1bmN0aW9uIEllKGUsQSl7cmV0dXJuIGUmJiFpQShBKT9vQShlLEEpOkF9dmFyIEt0PVcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IEE9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG8oaSl7bGV0IHM9aTtyZXR1cm4gQSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixzKSxzPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLHMpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1vKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihzKXtsZXQgbT1jLmlzU3RyaW5nKHMpP28ocyk6cztyZXR1cm4gbS5wcm90b2NvbD09PXIucHJvdG9jb2wmJm0uaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gYUEoZSl7bGV0IEE9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoZSk7cmV0dXJuIEEmJkFbMV18fCIifWZ1bmN0aW9uIE1pKGUsQSl7ZT1lfHwxMDtsZXQgdD1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSksbz0wLGk9MCxzO3JldHVybiBBPUEhPT12b2lkIDA/QToxZTMsZnVuY3Rpb24oZil7bGV0IHA9RGF0ZS5ub3coKSxhPXJbaV07c3x8KHM9cCksdFtvXT1mLHJbb109cDtsZXQgbj1pLHU9MDtmb3IoO24hPT1vOyl1Kz10W24rK10sbj1uJWU7aWYobz0obysxKSVlLG89PT1pJiYoaT0oaSsxKSVlKSxwLXM8QSlyZXR1cm47bGV0IGc9YSYmcC1hO3JldHVybiBnP01hdGgucm91bmQodSoxZTMvZyk6dm9pZCAwfX12YXIganQ9TWk7ZnVuY3Rpb24gdnQoZSxBKXtsZXQgdD0wLHI9anQoNTAsMjUwKTtyZXR1cm4gbz0+e2xldCBpPW8ubG9hZGVkLHM9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLG09aS10LGY9cihtKSxwPWk8PXM7dD1pO2xldCBhPXtsb2FkZWQ6aSx0b3RhbDpzLHByb2dyZXNzOnM/aS9zOnZvaWQgMCxieXRlczptLHJhdGU6Znx8dm9pZCAwLGVzdGltYXRlZDpmJiZzJiZwPyhzLWkpL2Y6dm9pZCAwLGV2ZW50Om99O2FbQT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxlKGEpfX12YXIgSGk9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iix6dD1IaSYmZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG89ZS5kYXRhLGk9Ri5mcm9tKGUuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpzLHdpdGhYU1JGVG9rZW46bX09ZSxmO2Z1bmN0aW9uIHAoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGYpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsZil9bGV0IGE7aWYoYy5pc0Zvcm1EYXRhKG8pKXtpZihXLmhhc1N0YW5kYXJkQnJvd3NlckVudnx8Vy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpaS5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoYT1pLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtCLC4uLlFdPWE/YS5zcGxpdCgiOyIpLm1hcChSPT5SLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO2kuc2V0Q29udGVudFR5cGUoW0J8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5RXS5qb2luKCI7ICIpKX19bGV0IG49bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGUuYXV0aCl7bGV0IEI9ZS5hdXRoLnVzZXJuYW1lfHwiIixRPWUuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5hdXRoLnBhc3N3b3JkKSk6IiI7aS5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoQisiOiIrUSkpfWxldCB1PUllKGUuYmFzZVVSTCxlLnVybCk7bi5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksYWUodSxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxuLnRpbWVvdXQ9ZS50aW1lb3V0O2Z1bmN0aW9uIGcoKXtpZighbilyZXR1cm47bGV0IEI9Ri5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gbiYmbi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksUj17ZGF0YTohc3x8cz09PSJ0ZXh0Inx8cz09PSJqc29uIj9uLnJlc3BvbnNlVGV4dDpuLnJlc3BvbnNlLHN0YXR1czpuLnN0YXR1cyxzdGF0dXNUZXh0Om4uc3RhdHVzVGV4dCxoZWFkZXJzOkIsY29uZmlnOmUscmVxdWVzdDpufTtyQShmdW5jdGlvbihQKXt0KFApLHAoKX0sZnVuY3Rpb24oUCl7cihQKSxwKCl9LFIpLG49bnVsbH1pZigib25sb2FkZW5kImluIG4/bi5vbmxvYWRlbmQ9ZzpuLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFufHxuLnJlYWR5U3RhdGUhPT00fHxuLnN0YXR1cz09PTAmJiEobi5yZXNwb25zZVVSTCYmbi5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoZyl9LG4ub25hYm9ydD1mdW5jdGlvbigpe24mJihyKG5ldyB3KCJSZXF1ZXN0IGFib3J0ZWQiLHcuRUNPTk5BQk9SVEVELGUsbikpLG49bnVsbCl9LG4ub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IHcoIk5ldHdvcmsgRXJyb3IiLHcuRVJSX05FVFdPUkssZSxuKSksbj1udWxsfSxuLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBRPWUudGltZW91dD8idGltZW91dCBvZiAiK2UudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixSPWUudHJhbnNpdGlvbmFsfHxSZTtlLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihRPWUudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgdyhRLFIuY2xhcmlmeVRpbWVvdXRFcnJvcj93LkVUSU1FRE9VVDp3LkVDT05OQUJPUlRFRCxlLG4pKSxuPW51bGx9LFcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobSYmYy5pc0Z1bmN0aW9uKG0pJiYobT1tKGUpKSxtfHxtIT09ITEmJkt0KHUpKSl7bGV0IEI9ZS54c3JmSGVhZGVyTmFtZSYmZS54c3JmQ29va2llTmFtZSYmcXQucmVhZChlLnhzcmZDb29raWVOYW1lKTtCJiZpLnNldChlLnhzcmZIZWFkZXJOYW1lLEIpfW89PT12b2lkIDAmJmkuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gbiYmYy5mb3JFYWNoKGkudG9KU09OKCksZnVuY3Rpb24oUSxSKXtuLnNldFJlcXVlc3RIZWFkZXIoUixRKX0pLGMuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwobi53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscykscyYmcyE9PSJqc29uIiYmKG4ucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSx0eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJm4uYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHZ0KGUub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmbi51cGxvYWQmJm4udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix2dChlLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYoZj1CPT57biYmKHIoIUJ8fEIudHlwZT9uZXcgTShudWxsLGUsbik6Qiksbi5hYm9ydCgpLG49bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGYpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9mKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGYpKSk7bGV0IGw9YUEodSk7aWYobCYmVy5wcm90b2NvbHMuaW5kZXhPZihsKT09PS0xKXtyKG5ldyB3KCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2wrIjoiLHcuRVJSX0JBRF9SRVFVRVNULGUpKTtyZXR1cm59bi5zZW5kKG98fG51bGwpfSl9O3ZhciBuQT17aHR0cDpoZSx4aHI6enR9O2MuZm9yRWFjaChuQSwoZSxBKT0+e2lmKGUpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibmFtZSIse3ZhbHVlOkF9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImFkYXB0ZXJOYW1lIix7dmFsdWU6QX0pfX0pO3ZhciBfdD1lPT5gLSAke2V9YCxZaT1lPT5jLmlzRnVuY3Rpb24oZSl8fGU9PT1udWxsfHxlPT09ITEsRGU9e2dldEFkYXB0ZXI6ZT0+e2U9Yy5pc0FycmF5KGUpP2U6W2VdO2xldHtsZW5ndGg6QX09ZSx0LHIsbz17fTtmb3IobGV0IGk9MDtpPEE7aSsrKXt0PWVbaV07bGV0IHM7aWYocj10LCFZaSh0KSYmKHI9bkFbKHM9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgdyhgVW5rbm93biBhZGFwdGVyICcke3N9J2ApO2lmKHIpYnJlYWs7b1tzfHwiIyIraV09cn1pZighcil7bGV0IGk9T2JqZWN0LmVudHJpZXMobykubWFwKChbbSxmXSk9PmBhZGFwdGVyICR7bX0gYCsoZj09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLHM9QT9pLmxlbmd0aD4xP2BzaW5jZSA6CmAraS5tYXAoX3QpLmpvaW4oYApgKToiICIrX3QoaVswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgdygiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK3MsIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczpuQX07ZnVuY3Rpb24gc0EoZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IE0obnVsbCxlKX1mdW5jdGlvbiBXZShlKXtyZXR1cm4gc0EoZSksZS5oZWFkZXJzPUYuZnJvbShlLmhlYWRlcnMpLGUuZGF0YT1zZS5jYWxsKGUsZS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoZS5tZXRob2QpIT09LTEmJmUuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksRGUuZ2V0QWRhcHRlcihlLmFkYXB0ZXJ8fFYuYWRhcHRlcikoZSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gc0EoZSksci5kYXRhPXNlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz1GLmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gZ2Uocil8fChzQShlKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXNlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz1GLmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIFZ0PWU9PmUgaW5zdGFuY2VvZiBGP3suLi5lfTplO2Z1bmN0aW9uIEcoZSxBKXtBPUF8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIocCxhLG4pe3JldHVybiBjLmlzUGxhaW5PYmplY3QocCkmJmMuaXNQbGFpbk9iamVjdChhKT9jLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOm59LHAsYSk6Yy5pc1BsYWluT2JqZWN0KGEpP2MubWVyZ2Uoe30sYSk6Yy5pc0FycmF5KGEpP2Euc2xpY2UoKTphfWZ1bmN0aW9uIG8ocCxhLG4pe2lmKGMuaXNVbmRlZmluZWQoYSkpe2lmKCFjLmlzVW5kZWZpbmVkKHApKXJldHVybiByKHZvaWQgMCxwLG4pfWVsc2UgcmV0dXJuIHIocCxhLG4pfWZ1bmN0aW9uIGkocCxhKXtpZighYy5pc1VuZGVmaW5lZChhKSlyZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gcyhwLGEpe2lmKGMuaXNVbmRlZmluZWQoYSkpe2lmKCFjLmlzVW5kZWZpbmVkKHApKXJldHVybiByKHZvaWQgMCxwKX1lbHNlIHJldHVybiByKHZvaWQgMCxhKX1mdW5jdGlvbiBtKHAsYSxuKXtpZihuIGluIEEpcmV0dXJuIHIocCxhKTtpZihuIGluIGUpcmV0dXJuIHIodm9pZCAwLHApfWxldCBmPXt1cmw6aSxtZXRob2Q6aSxkYXRhOmksYmFzZVVSTDpzLHRyYW5zZm9ybVJlcXVlc3Q6cyx0cmFuc2Zvcm1SZXNwb25zZTpzLHBhcmFtc1NlcmlhbGl6ZXI6cyx0aW1lb3V0OnMsdGltZW91dE1lc3NhZ2U6cyx3aXRoQ3JlZGVudGlhbHM6cyx3aXRoWFNSRlRva2VuOnMsYWRhcHRlcjpzLHJlc3BvbnNlVHlwZTpzLHhzcmZDb29raWVOYW1lOnMseHNyZkhlYWRlck5hbWU6cyxvblVwbG9hZFByb2dyZXNzOnMsb25Eb3dubG9hZFByb2dyZXNzOnMsZGVjb21wcmVzczpzLG1heENvbnRlbnRMZW5ndGg6cyxtYXhCb2R5TGVuZ3RoOnMsYmVmb3JlUmVkaXJlY3Q6cyx0cmFuc3BvcnQ6cyxodHRwQWdlbnQ6cyxodHRwc0FnZW50OnMsY2FuY2VsVG9rZW46cyxzb2NrZXRQYXRoOnMscmVzcG9uc2VFbmNvZGluZzpzLHZhbGlkYXRlU3RhdHVzOm0saGVhZGVyczoocCxhKT0+byhWdChwKSxWdChhKSwhMCl9O3JldHVybiBjLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxlLEEpKSxmdW5jdGlvbihhKXtsZXQgbj1mW2FdfHxvLHU9bihlW2FdLEFbYV0sYSk7Yy5pc1VuZGVmaW5lZCh1KSYmbiE9PW18fCh0W2FdPXUpfSksdH12YXIgRmU9IjEuNi44Ijt2YXIgZ0E9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChlLEEpPT57Z0FbZV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09ZXx8ImEiKyhBPDE/Im4gIjoiICIpK2V9fSk7dmFyIFp0PXt9O2dBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihBLHQscil7ZnVuY3Rpb24gbyhpLHMpe3JldHVybiJbQXhpb3MgdiIrRmUrIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitpKyInIitzKyhyPyIuICIrcjoiIil9cmV0dXJuKGkscyxtKT0+e2lmKEE9PT0hMSl0aHJvdyBuZXcgdyhvKHMsIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLHcuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhWnRbc10mJihadFtzXT0hMCxjb25zb2xlLndhcm4obyhzLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLEE/QShpLHMsbSk6ITB9fTtmdW5jdGlvbiBxaShlLEEsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyB3KCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iix3LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhlKSxvPXIubGVuZ3RoO2Zvcig7by0tID4wOyl7bGV0IGk9cltvXSxzPUFbaV07aWYocyl7bGV0IG09ZVtpXSxmPW09PT12b2lkIDB8fHMobSxpLGUpO2lmKGYhPT0hMCl0aHJvdyBuZXcgdygib3B0aW9uICIraSsiIG11c3QgYmUgIitmLHcuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgdygiVW5rbm93biBvcHRpb24gIitpLHcuRVJSX0JBRF9PUFRJT04pfX12YXIgVWU9e2Fzc2VydE9wdGlvbnM6cWksdmFsaWRhdG9yczpnQX07dmFyIEg9VWUudmFsaWRhdG9ycyxYPWNsYXNze2NvbnN0cnVjdG9yKEEpe3RoaXMuZGVmYXVsdHM9QSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgWGUscmVzcG9uc2U6bmV3IFhlfX1hc3luYyByZXF1ZXN0KEEsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KEEsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvPXt9KTpvPW5ldyBFcnJvcjtsZXQgaT1vLnN0YWNrP28uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP2kmJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoaS5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmAraSk6ci5zdGFjaz1pfXRocm93IHJ9fV9yZXF1ZXN0KEEsdCl7dHlwZW9mIEE9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPUEpOnQ9QXx8e30sdD1HKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6byxoZWFkZXJzOml9PXQ7ciE9PXZvaWQgMCYmVWUuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkgudHJhbnNpdGlvbmFsKEguYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pfSwhMSksbyE9bnVsbCYmKGMuaXNGdW5jdGlvbihvKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpvfTpVZS5hc3NlcnRPcHRpb25zKG8se2VuY29kZTpILmZ1bmN0aW9uLHNlcmlhbGl6ZTpILmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBzPWkmJmMubWVyZ2UoaS5jb21tb24saVt0Lm1ldGhvZF0pO2kmJmMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxsPT57ZGVsZXRlIGlbbF19KSx0LmhlYWRlcnM9Ri5jb25jYXQocyxpKTtsZXQgbT1bXSxmPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihCKXt0eXBlb2YgQi5ydW5XaGVuPT0iZnVuY3Rpb24iJiZCLnJ1bldoZW4odCk9PT0hMXx8KGY9ZiYmQi5zeW5jaHJvbm91cyxtLnVuc2hpZnQoQi5mdWxmaWxsZWQsQi5yZWplY3RlZCkpfSk7bGV0IHA9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihCKXtwLnB1c2goQi5mdWxmaWxsZWQsQi5yZWplY3RlZCl9KTtsZXQgYSxuPTAsdTtpZighZil7bGV0IGw9W1dlLmJpbmQodGhpcyksdm9pZCAwXTtmb3IobC51bnNoaWZ0LmFwcGx5KGwsbSksbC5wdXNoLmFwcGx5KGwscCksdT1sLmxlbmd0aCxhPVByb21pc2UucmVzb2x2ZSh0KTtuPHU7KWE9YS50aGVuKGxbbisrXSxsW24rK10pO3JldHVybiBhfXU9bS5sZW5ndGg7bGV0IGc9dDtmb3Iobj0wO248dTspe2xldCBsPW1bbisrXSxCPW1bbisrXTt0cnl7Zz1sKGcpfWNhdGNoKFEpe0IuY2FsbCh0aGlzLFEpO2JyZWFrfX10cnl7YT1XZS5jYWxsKHRoaXMsZyl9Y2F0Y2gobCl7cmV0dXJuIFByb21pc2UucmVqZWN0KGwpfWZvcihuPTAsdT1wLmxlbmd0aDtuPHU7KWE9YS50aGVuKHBbbisrXSxwW24rK10pO3JldHVybiBhfWdldFVyaShBKXtBPUcodGhpcy5kZWZhdWx0cyxBKTtsZXQgdD1JZShBLmJhc2VVUkwsQS51cmwpO3JldHVybiBhZSh0LEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplcil9fTtjLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKEEpe1gucHJvdG90eXBlW0FdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChHKHJ8fHt9LHttZXRob2Q6QSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtjLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihBKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihpLHMsbSl7cmV0dXJuIHRoaXMucmVxdWVzdChHKG18fHt9LHttZXRob2Q6QSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOmksZGF0YTpzfSkpfX1YLnByb3RvdHlwZVtBXT10KCksWC5wcm90b3R5cGVbQSsiRm9ybSJdPXQoITApfSk7dmFyIGxlPVg7dmFyIElBPWNsYXNzIGV7Y29uc3RydWN0b3IoQSl7aWYodHlwZW9mIEEhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpKXt0PWl9KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG89PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgaT1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7aS0tID4wOylyLl9saXN0ZW5lcnNbaV0obyk7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1vPT57bGV0IGkscz1uZXcgUHJvbWlzZShtPT57ci5zdWJzY3JpYmUobSksaT1tfSkudGhlbihvKTtyZXR1cm4gcy5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKGkpfSxzfSxBKGZ1bmN0aW9uKGkscyxtKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBNKGkscyxtKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKEEpe2lmKHRoaXMucmVhc29uKXtBKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKEEpOnRoaXMuX2xpc3RlbmVycz1bQV19dW5zdWJzY3JpYmUoQSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoQSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBBO3JldHVybnt0b2tlbjpuZXcgZShmdW5jdGlvbihvKXtBPW99KSxjYW5jZWw6QX19fSxYdD1JQTtmdW5jdGlvbiBsQShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gcEEoZSl7cmV0dXJuIGMuaXNPYmplY3QoZSkmJmUuaXNBeGlvc0Vycm9yPT09ITB9dmFyIG1BPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhtQSkuZm9yRWFjaCgoW2UsQV0pPT57bUFbQV09ZX0pO3ZhciAkdD1tQTtmdW5jdGlvbiBlcihlKXtsZXQgQT1uZXcgbGUoZSksdD1yZShsZS5wcm90b3R5cGUucmVxdWVzdCxBKTtyZXR1cm4gYy5leHRlbmQodCxsZS5wcm90b3R5cGUsQSx7YWxsT3duS2V5czohMH0pLGMuZXh0ZW5kKHQsQSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obyl7cmV0dXJuIGVyKEcoZSxvKSl9LHR9dmFyIGs9ZXIoVik7ay5BeGlvcz1sZTtrLkNhbmNlbGVkRXJyb3I9TTtrLkNhbmNlbFRva2VuPVh0O2suaXNDYW5jZWw9Z2U7ay5WRVJTSU9OPUZlO2sudG9Gb3JtRGF0YT1MO2suQXhpb3NFcnJvcj13O2suQ2FuY2VsPWsuQ2FuY2VsZWRFcnJvcjtrLmFsbD1mdW5jdGlvbihBKXtyZXR1cm4gUHJvbWlzZS5hbGwoQSl9O2suc3ByZWFkPWxBO2suaXNBeGlvc0Vycm9yPXBBO2subWVyZ2VDb25maWc9RztrLkF4aW9zSGVhZGVycz1GO2suZm9ybVRvSlNPTj1lPT5rZShjLmlzSFRNTEZvcm0oZSk/bmV3IEZvcm1EYXRhKGUpOmUpO2suZ2V0QWRhcHRlcj1EZS5nZXRBZGFwdGVyO2suSHR0cFN0YXR1c0NvZGU9JHQ7ay5kZWZhdWx0PWs7dmFyIFQ9azt2YXJ7QXhpb3M6eGcsQXhpb3NFcnJvcjpUZyxDYW5jZWxlZEVycm9yOkdnLGlzQ2FuY2VsOkpnLENhbmNlbFRva2VuOkxnLFZFUlNJT046TWcsYWxsOkhnLENhbmNlbDpZZyxpc0F4aW9zRXJyb3I6cWcsc3ByZWFkOktnLHRvRm9ybURhdGE6amcsQXhpb3NIZWFkZXJzOnZnLEh0dHBTdGF0dXNDb2RlOnpnLGZvcm1Ub0pTT046X2csZ2V0QWRhcHRlcjpWZyxtZXJnZUNvbmZpZzpaZ309VDthc3luYyBmdW5jdGlvbiBLaShlLEEpe2xldCB0PWUscj1udWxsO2lmKHQ9PW51bGwpcj1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG89YXdhaXQgVC5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6QX0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChvLmRhdGEpO3I9bmV3IFdvcmtlcihpLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBwZT1LaTtmdW5jdGlvbiBBcihlKXtsZXQgQT1LZShlKSx0PWU7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PUEsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W3FlXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OkEsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIGppKGUsQSx0KXtsZXQgcjtpZihlIT1udWxsKXtsZXQgaT1lO3JldHVybiBpLndvcmtlclByb3h5IT09dm9pZCAwPyhyPWkud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOml9KTpBcihlKX1sZXQgbz1hd2FpdCBwZShBLHQpO3JldHVybiBBcihvKX12YXIgdHI9amk7YXN5bmMgZnVuY3Rpb24gdmkoZSxBLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgZSE9InN0cmluZyI/cj1lLmhyZWY6ZS5zdGFydHNXaXRoKCJodHRwIik/cj1lOnI9dHlwZW9mIEE8InUiP2Ake0F9LyR7ZX1gOmUsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBvPWAke3J9Lndhc21gLHM9KGF3YWl0IFQuZ2V0KG8se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OnN9KX12YXIgcnI9dmk7dmFyIGlyPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBucj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixvcj1uZXcgVGV4dEVuY29kZXIsYXI9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIHppKGUsQSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1lLmZzX29wZW4oQSx0LmZsYWdzKSxpPWUuZnNfc3RhdChBKS5zaXplLHM9bnVsbDtucj9zPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihpKTpzPW5ldyBBcnJheUJ1ZmZlcihpKTtsZXQgbT1uZXcgVWludDhBcnJheShzKTtyZXR1cm4gZS5mc19yZWFkKHIsbSwwLGksMCksZS5mc19jbG9zZShyKSxtfWZ1bmN0aW9uIHNyKGUsQSx0KXtsZXQgcj1udWxsO25yP3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBvPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IFVpbnQ4QXJyYXkoZS5IRUFQVTguYnVmZmVyLEEsdCk7cmV0dXJuIG8uc2V0KGkpLG99ZnVuY3Rpb24gYihlLEEsdCxyKXtsZXQgbz0wO3JldHVybiBBIT09bnVsbCYmKG89ZS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLEEuYnVmZmVyLmJ5dGVMZW5ndGhdKSxlLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoQS5idWZmZXIpLG8pKSxvfWZ1bmN0aW9uIEsoZSxBLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KEEpLG89ZS5sZW5ndGhCeXRlc1VURjgocikrMSxpPWUuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxvXSk7ZS5zdHJpbmdUb1VURjgocixpLG8pfWZ1bmN0aW9uIFUoZSxBLHQscil7bGV0IG89ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQSx0XSksaT1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxBLHRdKSxzPXNyKGUsbyxpKTtyZXR1cm4gTihyLHMuYnVmZmVyKX1mdW5jdGlvbiBOZShlLEEpe2xldCB0PWUuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsQV0pLHI9ZS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24gX2koZSxBLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKHAsYSl7c3dpdGNoKHAudHlwZSl7Y2FzZSBJLlRleHRTdHJlYW06e2xldCBuPW9yLmVuY29kZShwLmRhdGEuZGF0YSksdT1iKGUsbixhLDApLGc9e3NpemU6bi5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gfTtLKGUsZyxhKTticmVha31jYXNlIEkuSnNvbkNvbXBhdGlibGU6e2xldCBuPW9yLmVuY29kZShKU09OLnN0cmluZ2lmeShwLmRhdGEpKSx1PWIoZSxuLGEsMCksZz17c2l6ZTpuLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWB9O0soZSxnLGEpO2JyZWFrfWNhc2UgSS5CaW5hcnlTdHJlYW06e2xldCBuPXAuZGF0YS5kYXRhLHU9YihlLG4sYSwwKSxnPXtzaXplOm4uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07SyhlLGcsYSk7YnJlYWt9Y2FzZSBJLlRleHRGaWxlOntlLmZzX3dyaXRlRmlsZShwLmRhdGEucGF0aCxwLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBJLkJpbmFyeUZpbGU6e2UuZnNfd3JpdGVGaWxlKHAuZGF0YS5wYXRoLHAuZGF0YS5kYXRhKTticmVha31jYXNlIEkuSW1hZ2U6e2xldCBuPXAuZGF0YSx1PWIoZSxuLmRhdGEsYSwwKSxnPWIoZSxuLmRpcmVjdGlvbixhLDEpLGw9dHlwZW9mIG4ubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20obi5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLEI9e2ltYWdlVHlwZTpuLmltYWdlVHlwZSxuYW1lOm4ubmFtZSxvcmlnaW46bi5vcmlnaW4sc3BhY2luZzpuLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLHNpemU6bi5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbWV0YWRhdGE6bH07SyhlLEIsYSk7YnJlYWt9Y2FzZSBJLk1lc2g6e2xldCBuPXAuZGF0YSx1PWIoZSxuLnBvaW50cyxhLDApLGc9YihlLG4uY2VsbHMsYSwxKSxsPWIoZSxuLnBvaW50RGF0YSxhLDIpLEI9YihlLG4uY2VsbERhdGEsYSwzKSxRPXttZXNoVHlwZTpuLm1lc2hUeXBlLG5hbWU6bi5uYW1lLG51bWJlck9mUG9pbnRzOm4ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mQ2VsbHM6bi5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLGNlbGxCdWZmZXJTaXplOm4uY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpuLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLG51bWJlck9mQ2VsbFBpeGVsczpuLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07SyhlLFEsYSk7YnJlYWt9Y2FzZSBJLlBvaW50U2V0OntsZXQgbj1wLmRhdGEsdT1iKGUsbi5wb2ludHMsYSwwKSxnPWIoZSxuLnBvaW50RGF0YSxhLDEpLGw9e3BvaW50U2V0VHlwZTpuLnBvaW50U2V0VHlwZSxuYW1lOm4ubmFtZSxudW1iZXJPZlBvaW50czpuLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOm4ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtnfWB9O0soZSxsLGEpO2JyZWFrfWNhc2UgSS5Qb2x5RGF0YTp7bGV0IG49cC5kYXRhLHU9YihlLG4ucG9pbnRzLGEsMCksZz1iKGUsbi52ZXJ0aWNlcyxhLDEpLGw9YihlLG4ubGluZXMsYSwyKSxCPWIoZSxuLnBvbHlnb25zLGEsMyksUT1iKGUsbi50cmlhbmdsZVN0cmlwcyxhLDQpLFI9YihlLG4ucG9pbnREYXRhLGEsNSksTz1iKGUsbi5wb2ludERhdGEsYSw2KSxQPXtwb2x5RGF0YVR5cGU6bi5wb2x5RGF0YVR5cGUsbmFtZTpuLm5hbWUsbnVtYmVyT2ZQb2ludHM6bi5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsdmVydGljZXNCdWZmZXJTaXplOm4udmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLGxpbmVzQnVmZmVyU2l6ZTpuLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxwb2x5Z29uc0J1ZmZlclNpemU6bi5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOm4udHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG51bWJlck9mUG9pbnRQaXhlbHM6bi5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YCxudW1iZXJPZkNlbGxQaXhlbHM6bi5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtPfWB9O0soZSxQLGEpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxlLnJlc2V0TW9kdWxlU3Rkb3V0KCksZS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBvPWUuc3RhY2tTYXZlKCksaT0wO3RyeXtpPWUuY2FsbE1haW4oQS5zbGljZSgpKX1jYXRjaChwKXt0aHJvdyB0eXBlb2YgcD09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLGUuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLGUuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBlLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLGUuZ2V0RXhjZXB0aW9uTWVzc2FnZShwKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxwfWZpbmFsbHl7ZS5zdGFja1Jlc3RvcmUobyl9bGV0IHM9ZS5nZXRNb2R1bGVTdGRvdXQoKSxtPWUuZ2V0TW9kdWxlU3RkZXJyKCksZj1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmaT09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihwLGEpe2xldCBuPW51bGw7c3dpdGNoKHAudHlwZSl7Y2FzZSBJLlRleHRTdHJlYW06e2xldCBnPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLGw9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQj1uZXcgVWludDhBcnJheShlLkhFQVBVOC5idWZmZXIsZyxsKTtuPXtkYXRhOmFyLmRlY29kZShCKX07YnJlYWt9Y2FzZSBJLkpzb25Db21wYXRpYmxlOntsZXQgZz1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxsPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEI9bmV3IFVpbnQ4QXJyYXkoZS5IRUFQVTguYnVmZmVyLGcsbCk7bj1KU09OLnBhcnNlKGFyLmRlY29kZShCKSk7YnJlYWt9Y2FzZSBJLkJpbmFyeVN0cmVhbTp7bGV0IGc9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksbD1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKTtuPXtkYXRhOnNyKGUsZyxsKX07YnJlYWt9Y2FzZSBJLlRleHRGaWxlOntuPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6ZS5mc19yZWFkRmlsZShwLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgSS5CaW5hcnlGaWxlOntuPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6emkoZSxwLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgSS5JbWFnZTp7bGV0IGc9TmUoZSxhKTtnLmRhdGE9VShlLGEsMCxnLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxnLmRpcmVjdGlvbj1VKGUsYSwxLEQuRmxvYXQ2NCksZy5tZXRhZGF0YT1uZXcgTWFwKGcubWV0YWRhdGEpLG49ZzticmVha31jYXNlIEkuTWVzaDp7bGV0IGc9TmUoZSxhKTtnLm51bWJlck9mUG9pbnRzPjA/Zy5wb2ludHM9VShlLGEsMCxnLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Zy5wb2ludHM9TihnLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZDZWxscz4wP2cuY2VsbHM9VShlLGEsMSxnLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpnLmNlbGxzPU4oZy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZQb2ludFBpeGVscz4wP2cucG9pbnREYXRhPVUoZSxhLDIsZy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9TihnLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZkNlbGxQaXhlbHM+MD9nLmNlbGxEYXRhPVUoZSxhLDMsZy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpnLmNlbGxEYXRhPU4oZy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbj1nO2JyZWFrfWNhc2UgSS5Qb2ludFNldDp7bGV0IGc9TmUoZSxhKTtjb25zb2xlLmxvZyhnKSxnLm51bWJlck9mUG9pbnRzPjA/Zy5wb2ludHM9VShlLGEsMCxnLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmcucG9pbnRzPU4oZy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Zy5wb2ludERhdGE9VShlLGEsMSxnLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9TihnLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG49ZzticmVha31jYXNlIEkuUG9seURhdGE6e2xldCBnPU5lKGUsYSk7Zy5udW1iZXJPZlBvaW50cz4wP2cucG9pbnRzPVUoZSxhLDAsRC5GbG9hdDMyKTpnLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGcudmVydGljZXNCdWZmZXJTaXplPjA/Zy52ZXJ0aWNlcz1VKGUsYSwxLGguVUludDMyKTpnLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxnLmxpbmVzQnVmZmVyU2l6ZT4wP2cubGluZXM9VShlLGEsMixoLlVJbnQzMik6Zy5saW5lcz1uZXcgVWludDMyQXJyYXksZy5wb2x5Z29uc0J1ZmZlclNpemU+MD9nLnBvbHlnb25zPVUoZSxhLDMsaC5VSW50MzIpOmcucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGcudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/Zy50cmlhbmdsZVN0cmlwcz1VKGUsYSw0LGguVUludDMyKTpnLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxnLm51bWJlck9mUG9pbnRQaXhlbHM+MD9nLnBvaW50RGF0YT1VKGUsYSw1LGcucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpnLnBvaW50RGF0YT1OKGcucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZkNlbGxQaXhlbHM+MD9nLmNlbGxEYXRhPVUoZSxhLDYsZy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5jZWxsRGF0YT1OKGcucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuPWc7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgdT17dHlwZTpwLnR5cGUsZGF0YTpufTtmLnB1c2godSl9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6cyxzdGRlcnI6bSxvdXRwdXRzOmZ9fXZhciBncj1faTt2YXIgVmk9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFppKGUsQSl7aWYoZT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89WGkoZVtyXSxBKTtvIT09bnVsbCYmdC5wdXNoKG8pfXJldHVybiB0fWZ1bmN0aW9uIFhpKGUsQSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBlLmJ1ZmZlciE9PXZvaWQgMD90PWUuYnVmZmVyOmUuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9ZSksVmkmJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOkE/dDp0LnNsaWNlKDApfXZhciBJcj1aaTtmdW5jdGlvbiAkaShlKXtyZXR1cm5bZS5kYXRhLGUuZGlyZWN0aW9uXX12YXIgbHI9JGk7ZnVuY3Rpb24gZW8oZSl7cmV0dXJuW2UucG9pbnRzLGUucG9pbnREYXRhLGUuY2VsbHMsZS5jZWxsRGF0YV19dmFyIHByPWVvO2Z1bmN0aW9uIEFvKGUpe3JldHVybltlLnBvaW50cyxlLnZlcnRpY2VzLGUubGluZXMsZS5wb2x5Z29ucyxlLnRyaWFuZ2xlU3RyaXBzLGUucG9pbnREYXRhLGUuY2VsbERhdGFdfXZhciBtcj1Bbzt2YXIgdG87ZnVuY3Rpb24gU2UoKXtyZXR1cm4gdG99dmFyIHJvO2Z1bmN0aW9uIHVyKCl7cmV0dXJuIHJvfXZhciBpbztmdW5jdGlvbiBPZSgpe3JldHVybiBpb312YXIgdUE9bmV3IE1hcDtmdW5jdGlvbiBvbygpe2xldCBlPU9lKCk7cmV0dXJuIHR5cGVvZiBlPiJ1IiYmKGU9bnVsbCksZX1mdW5jdGlvbiBmcigpe2xldCBlPVNlKCk7cmV0dXJuIHR5cGVvZiBlPiJ1IiYmKGU9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxlfWZ1bmN0aW9uIFBlKCl7bGV0IGU9dXIoKTtyZXR1cm4gdHlwZW9mIGU+InUiJiYoZT17fSksZX1hc3luYyBmdW5jdGlvbiBhbyhlLEEsdCl7bGV0IHI9ZSxvPWU7aWYodHlwZW9mIGUhPSJzdHJpbmciJiYocj1uZXcgVVJMKGUuaHJlZiksbz1yLmhyZWYpLHVBLmhhcyhvKSlyZXR1cm4gdUEuZ2V0KG8pO3tsZXQgaT1hd2FpdCBycihlLEE/LnRvU3RyaW5nKCk/P2ZyKCksdD8/UGUoKSk7cmV0dXJuIHVBLnNldChvLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIG5vKGUsQSx0LHIsbyl7aWYoIWF3YWl0IGlyKCkpe2xldCBRPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChRKSxuZXcgRXJyb3IoUSl9bGV0IGk9bz8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IFE9YXdhaXQgYW8oZS50b1N0cmluZygpLG8/LnBpcGVsaW5lQmFzZVVybCxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9QZSgpKTtyZXR1cm4gZ3IoUSxBLHQscil9bGV0IHM9aSxtPW8/LnBpcGVsaW5lV29ya2VyVXJsPz9vbygpLGY9dHlwZW9mIG0hPSJzdHJpbmciJiZ0eXBlb2YgbT8uaHJlZjwidSI/bS5ocmVmOm0se3dvcmtlclByb3h5OnAsd29ya2VyOmF9PWF3YWl0IHRyKHMsZixvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9QZSgpKTtzPWE7bGV0IG49W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKFEudHlwZT09PUkuQmluYXJ5U3RyZWFtKXtsZXQgUj1RLmRhdGEuZGF0YTtuLnB1c2goUil9ZWxzZSBpZihRLnR5cGU9PT1JLkJpbmFyeUZpbGUpe2xldCBSPVEuZGF0YS5kYXRhO24ucHVzaChSKX1lbHNlIGlmKFEudHlwZT09PUkuSW1hZ2Upe2xldCBSPVEuZGF0YTtSLmRhdGEhPT1udWxsJiZuLnB1c2goLi4ubHIoUikpfWVsc2UgaWYoUS50eXBlPT09SS5NZXNoKXtsZXQgUj1RLmRhdGE7bi5wdXNoKC4uLnByKFIpKX1lbHNlIGlmKFEudHlwZT09PUkuUG9seURhdGEpe2xldCBSPVEuZGF0YTtuLnB1c2goLi4ubXIoUikpfX0pO2xldCB1PW8/LnBpcGVsaW5lQmFzZVVybD8/ZnIoKSxnPXR5cGVvZiB1IT0ic3RyaW5nIiYmdHlwZW9mIHU/LmhyZWY8InUiP3UuaHJlZjp1LGw9ciE9bnVsbD9qZShyLElyKG4sbz8ubm9Db3B5KSk6bnVsbCxCPWF3YWl0IHAucnVuUGlwZWxpbmUoZS50b1N0cmluZygpLGcsQSx0LGwsbz8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/UGUoKSk7cmV0dXJue3JldHVyblZhbHVlOkIucmV0dXJuVmFsdWUsc3Rkb3V0OkIuc3Rkb3V0LHN0ZGVycjpCLnN0ZGVycixvdXRwdXRzOkIub3V0cHV0cyx3ZWJXb3JrZXI6c319dmFyIEM9bm87dmFyIHNvPW51bGw7ZnVuY3Rpb24gY3IoKXtyZXR1cm4gc299dmFyIGdvPSIxLjMuMCIsQnI9Z287dmFyIGZBLElvPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9pbWFnZS1pb0Ake0JyfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gSEkoZSl7ZkE9ZX1mdW5jdGlvbiBFKCl7aWYodHlwZW9mIGZBPCJ1IilyZXR1cm4gZkE7bGV0IGU9U2UoKTtyZXR1cm4gdHlwZW9mIGU8InUiP2U6SW99dmFyIGNBLGxvPW51bGw7ZnVuY3Rpb24gZHIoZSl7Y0E9ZX1mdW5jdGlvbiBkKCl7aWYodHlwZW9mIGNBPCJ1IilyZXR1cm4gY0E7bGV0IGU9T2UoKTtyZXR1cm4gdHlwZW9mIGU8InUiP2U6bG99dmFyICQ9bnVsbDthc3luYyBmdW5jdGlvbiBDcigpe2xldCBlPWQoKSxBPXR5cGVvZiBlIT0ic3RyaW5nIiYmdHlwZW9mIGU/LmhyZWY8InUiP2UuaHJlZjplOyQ9YXdhaXQgcGUoQSl9ZnVuY3Rpb24gX0koZSl7JD1lfWFzeW5jIGZ1bmN0aW9uIHkoKXtpZigkIT09bnVsbClyZXR1cm4gJC50ZXJtaW5hdGVkJiZhd2FpdCBDcigpLCQ7bGV0IGU9Y3IoKTtyZXR1cm4gZSE9PW51bGw/ZTooYXdhaXQgQ3IoKSwkKX1hc3luYyBmdW5jdGlvbiBwbyhlKXtsZXQgdD0oYXdhaXQgVC5nZXQoYCR7ZX0vaW5kZXguanNvbmAse3Jlc3BvbnNlVHlwZToianNvbiJ9KSkuZGF0YSxyPWF3YWl0IFQuZ2V0KGAke2V9L2RhdGEvZGF0YS5yYXdgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIn0pO3QuZGF0YT1OKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUsci5kYXRhKTtsZXQgbz1hd2FpdCBULmdldChgJHtlfS9kYXRhL2RpcmVjdGlvbi5yYXdgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIn0pO3JldHVybiB0LmRpcmVjdGlvbj1OKEQuRmxvYXQ2NCxvLmRhdGEpLHR9dmFyIG1vPXBvO3ZhciB1bz1uZXcgTWFwKFtbImltYWdlL2pwZWciLCJqcGVnIl0sWyJpbWFnZS9wbmciLCJwbmciXSxbImltYWdlL3RpZmYiLCJ0aWZmIl0sWyJpbWFnZS94LW1zLWJtcCIsImJtcCJdLFsiaW1hZ2UveC1ibXAiLCJibXAiXSxbImltYWdlL2JtcCIsImJtcCJdLFsiYXBwbGljYXRpb24vZGljb20iLCJnZGNtIl1dKSxlZT11bzthc3luYyBmdW5jdGlvbiBmbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJwbmctcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgQkE9Zm87YXN5bmMgZnVuY3Rpb24gY28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJwbmctd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgZEE9Y287YXN5bmMgZnVuY3Rpb24gQm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibWV0YS1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBDQT1Cbzthc3luYyBmdW5jdGlvbiBDbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Im1ldGEtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgRUE9Q287YXN5bmMgZnVuY3Rpb24gRW8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0idGlmZi1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciB5QT1Fbzthc3luYyBmdW5jdGlvbiB5byhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9InRpZmYtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgUUE9eW87YXN5bmMgZnVuY3Rpb24gUW8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibmlmdGktcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgaEE9UW87YXN5bmMgZnVuY3Rpb24gaG8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJuaWZ0aS13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciB3QT1obzthc3luYyBmdW5jdGlvbiB3byhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJqcGVnLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFJBPXdvO2FzeW5jIGZ1bmN0aW9uIFJvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ianBlZy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBrQT1Sbzthc3luYyBmdW5jdGlvbiBrbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJucnJkLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIGJBPWtvO2FzeW5jIGZ1bmN0aW9uIGJvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ibnJyZC13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBEQT1ibzthc3luYyBmdW5jdGlvbiBEbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJ2dGstcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgV0E9RG87YXN5bmMgZnVuY3Rpb24gV28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJ2dGstd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgRkE9V287YXN5bmMgZnVuY3Rpb24gRm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iYm1wLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFVBPUZvO2FzeW5jIGZ1bmN0aW9uIFVvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iYm1wLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIE5BPVVvO2FzeW5jIGZ1bmN0aW9uIE5vKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImhkZjUtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgU0E9Tm87YXN5bmMgZnVuY3Rpb24gU28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJoZGY1LXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIE9BPVNvO2FzeW5jIGZ1bmN0aW9uIE9vKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Im1pbmMtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgUEE9T287YXN5bmMgZnVuY3Rpb24gUG8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJtaW5jLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIHhBPVBvO2FzeW5jIGZ1bmN0aW9uIHhvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Im1yYy1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBUQT14bzthc3luYyBmdW5jdGlvbiBUbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Im1yYy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBHQT1Ubzthc3luYyBmdW5jdGlvbiBHbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJsc20tcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgSkE9R287YXN5bmMgZnVuY3Rpb24gSm8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJsc20td3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgTEE9Sm87YXN5bmMgZnVuY3Rpb24gTG8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibWdoLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIE1BPUxvO2FzeW5jIGZ1bmN0aW9uIE1vKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ibWdoLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIEhBPU1vO2FzeW5jIGZ1bmN0aW9uIEhvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImJpby1yYWQtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgWUE9SG87YXN5bmMgZnVuY3Rpb24gWW8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJiaW8tcmFkLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIHFBPVlvO2FzeW5jIGZ1bmN0aW9uIHFvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdpcGwtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgS0E9cW87YXN5bmMgZnVuY3Rpb24gS28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnaXBsLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGpBPUtvO2FzeW5jIGZ1bmN0aW9uIGpvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdlLWFkdy1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciB2QT1qbzthc3luYyBmdW5jdGlvbiB2byhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImdlLWFkdy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciB6QT12bzthc3luYyBmdW5jdGlvbiB6byhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJnZTQtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgX0E9em87YXN5bmMgZnVuY3Rpb24gX28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnZTQtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgVkE9X287YXN5bmMgZnVuY3Rpb24gVm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iZ2U1LXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFpBPVZvO2FzeW5jIGZ1bmN0aW9uIFpvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iZ2U1LXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIFhBPVpvO2FzeW5jIGZ1bmN0aW9uIFhvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdkY20tcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgJEE9WG87YXN5bmMgZnVuY3Rpb24gJG8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnZGNtLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGV0PSRvO2FzeW5jIGZ1bmN0aW9uIGVhKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9InNjYW5jby1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBBdD1lYTthc3luYyBmdW5jdGlvbiBBYShlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9InNjYW5jby13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciB0dD1BYTthc3luYyBmdW5jdGlvbiB0YShlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJmZGYtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgcnQ9dGE7YXN5bmMgZnVuY3Rpb24gcmEoZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0id2FzbS1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBpdD1yYTthc3luYyBmdW5jdGlvbiBpYShlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Indhc20td3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgb3Q9aWE7YXN5bmMgZnVuY3Rpb24gb2EoZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0id2FzbS16c3RkLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIGF0PW9hO2FzeW5jIGZ1bmN0aW9uIGFhKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0id2FzbS16c3RkLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIG50PWFhO3ZhciBuYT1uZXcgTWFwKFtbInBuZyIsW0JBLGRBXV0sWyJtZXRhIixbQ0EsRUFdXSxbInRpZmYiLFt5QSxRQV1dLFsibmlmdGkiLFtoQSx3QV1dLFsianBlZyIsW1JBLGtBXV0sWyJucnJkIixbYkEsREFdXSxbInZ0ayIsW1dBLEZBXV0sWyJibXAiLFtVQSxOQV1dLFsiaGRmNSIsW1NBLE9BXV0sWyJtbmMiLFtQQSx4QV1dLFsibXJjIixbVEEsR0FdXSxbImxzbSIsW0pBLExBXV0sWyJtZ2giLFtNQSxIQV1dLFsiYmlvUmFkIixbWUEscUFdXSxbImdpcGwiLFtLQSxqQV1dLFsiZ2VBZHciLFt2QSx6QV1dLFsiZ2U0IixbX0EsVkFdXSxbImdlNSIsW1pBLFhBXV0sWyJnZGNtIixbJEEsZXRdXSxbInNjYW5jbyIsW0F0LHR0XV0sWyJmZGYiLFtydCxudWxsXV0sWyJ3YXNtIixbaXQsb3RdXSxbIndhc21ac3RkIixbYXQsbnRdXV0pLEFlPW5hO2FzeW5jIGZ1bmN0aW9uIHNhKGUsQT17fSl7bGV0IHQ9ZS50eXBlPz8iIixyPWUubmFtZT8/ZS5wYXRoPz8iZmlsZU5hbWUiLG89dGUocikudG9Mb3dlckNhc2UoKSxpPUE/LndlYldvcmtlcixzPWU7aWYoZSBpbnN0YW5jZW9mIEJsb2Ipe2xldCBnPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtzPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGcpfX1sZXQgbT1udWxsO2lmKHQmJmVlLmhhcyh0KSltPWVlLmdldCh0KTtlbHNlIGlmKFkuaGFzKG8pKW09WS5nZXQobyk7ZWxzZSBmb3IobGV0IGcgb2YgQWUudmFsdWVzKCkpaWYoZ1swXSE9PW51bGwpe2xldHt3ZWJXb3JrZXI6bCxjb3VsZFJlYWQ6QixpbWFnZTpRfT1hd2FpdCBnWzBdKHtwYXRoOnMucGF0aCxkYXRhOnMuZGF0YS5zbGljZSgpfSx7d2ViV29ya2VyOmksaW5mb3JtYXRpb25Pbmx5OkE/LmluZm9ybWF0aW9uT25seSxub0NvcHk6QT8ubm9Db3B5fSk7aWYoaT1sLEIpcmV0dXJuIHR5cGVvZiBBPCJ1IiYmKFE9SihRLEEpKSx7d2ViV29ya2VyOmksaW1hZ2U6UX19aWYoIW0pdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIElPIGZvcjogIityKTtsZXQgcD1BZS5nZXQobSlbMF0se3dlYldvcmtlcjphLGNvdWxkUmVhZDpuLGltYWdlOnV9PWF3YWl0IHAocyx7d2ViV29ya2VyOmksaW5mb3JtYXRpb25Pbmx5OkE/LmluZm9ybWF0aW9uT25seSxub0NvcHk6QT8ubm9Db3B5fSk7aWYoaT1hLCFuKXRocm93IEVycm9yKCJDb3VsZCBub3QgcmVhZDogIityKTtyZXR1cm4gdHlwZW9mIEE8InUiJiYodT1KKHUsQSkpLHt3ZWJXb3JrZXI6aSxpbWFnZTp1fX12YXIgc3Q9c2E7dmFyIGdhPXR5cGVvZiBnbG9iYWxUaGlzLm5hdmlnYXRvcj8uaGFyZHdhcmVDb25jdXJyZW5jeT09Im51bWJlciI/Z2xvYmFsVGhpcy5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTo2LEVyPW5ldyBNZShnYSxzdCk7YXN5bmMgZnVuY3Rpb24gSWEoZSxBPXt9KXtsZXQgdD0xLHI9MCxvPSExO3R5cGVvZiBBPT0ib2JqZWN0IiYmKHR5cGVvZiBBLnpTcGFjaW5nPCJ1IiYmKHQ9QS56U3BhY2luZyksdHlwZW9mIEEuek9yaWdpbjwidSImJihyPUEuek9yaWdpbiksdHlwZW9mIEEuc29ydGVkU2VyaWVzPCJ1IiYmKG89QS5zb3J0ZWRTZXJpZXMpKTtsZXQgaT1BcnJheS5mcm9tKGUsYXN5bmMgZnVuY3Rpb24obil7aWYobiBpbnN0YW5jZW9mIEZpbGUpe2xldCB1PWF3YWl0IG4uYXJyYXlCdWZmZXIoKTtyZXR1cm57cGF0aDpuLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19cmV0dXJuIG59KSxzPWF3YWl0IFByb21pc2UuYWxsKGkpO298fHMuc29ydCgobix1KT0+bi5wYXRoPHUucGF0aD8tMTpuLnBhdGg+dS5wYXRoPzE6MCk7bGV0IG09W107Zm9yKGxldCBuPTA7bjxzLmxlbmd0aDtuKyspbS5wdXNoKFtzW25dLHt9XSk7bGV0IHA9KGF3YWl0IEVyLnJ1blRhc2tzKG0pLnByb21pc2UpLm1hcChuPT57bGV0IHU9bi5pbWFnZTtyZXR1cm4gdS5pbWFnZVR5cGUuZGltZW5zaW9uPTMsdS5zaXplLnB1c2goMSksdS5zcGFjaW5nLnB1c2godCksdS5vcmlnaW4ucHVzaChyKSx1LmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KDkpLHUuZGlyZWN0aW9uLmZpbGwoMCksdS5kaXJlY3Rpb25bMF09MSx1LmRpcmVjdGlvbls0XT0xLHUuZGlyZWN0aW9uWzhdPTEsdX0pLGE9SmUocCk7cmV0dXJuIHR5cGVvZiBBPT0ib2JqZWN0IiYmKHR5cGVvZiBBLmNvbXBvbmVudFR5cGU8InUifHx0eXBlb2YgQS5waXhlbFR5cGU8InUiKSYmKGE9SihhLEEpKSx7aW1hZ2U6YSx3ZWJXb3JrZXJQb29sOkVyfX12YXIgbGE9SWE7YXN5bmMgZnVuY3Rpb24gcGEoZSxBLHQ9e30pe2xldCByPWU7KHR5cGVvZiB0LmNvbXBvbmVudFR5cGU8InUifHx0eXBlb2YgdC5waXhlbFR5cGU8InUiKSYmKHI9SihlLHQpKTtsZXQgbz10Lm1pbWVUeXBlLGk9dGUoQSkudG9Mb3dlckNhc2UoKSxzPXQud2ViV29ya2VyLG09bnVsbDtpZih0eXBlb2YgbzwidSImJmVlLmhhcyhvKSltPWVlLmdldChvKTtlbHNlIGlmKFkuaGFzKGkpKW09WS5nZXQoaSk7ZWxzZSBmb3IobGV0IGwgb2YgQWUudmFsdWVzKCkpaWYobFsxXSE9PW51bGwpe2xldHt3ZWJXb3JrZXI6Qixjb3VsZFdyaXRlOlEsc2VyaWFsaXplZEltYWdlOlJ9PWF3YWl0IGxbMV0oR2UociksQSx0KTtpZihzPUIsUSlyZXR1cm57d2ViV29ya2VyOnMsc2VyaWFsaXplZEltYWdlOlJ9fWlmKCFtKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIrQSk7bGV0IHA9QWUuZ2V0KG0pWzFdLHt3ZWJXb3JrZXI6YSxjb3VsZFdyaXRlOm4sc2VyaWFsaXplZEltYWdlOnV9PWF3YWl0IHAocixBLHQpO2lmKHM9YSwhbil0aHJvdyBFcnJvcigiQ291bGQgbm90IHdyaXRlOiAiK0EpO3JldHVybnt3ZWJXb3JrZXI6cyxzZXJpYWxpemVkSW1hZ2U6dX19dmFyIG1hPXBhO2FzeW5jIGZ1bmN0aW9uIHVhKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iZmRmLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGZhPXVhO3ZhciB5cj0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgSUk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBlST0oQSx0KT0+e2Zvcih2YXIgSSBpbiB0KUlJKEEsSSx7Z2V0OnRbSV0sZW51bWVyYWJsZTohMH0pfTt2YXIgdkE9U3ltYm9sKCJDb21saW5rLnByb3h5IiksZ0k9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50Iiksckk9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLHBBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxlQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksJEE9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsb0k9e2NhbkhhbmRsZTpBPT4kQShBKSYmQVt2QV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTp0LHBvcnQyOkl9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gaUEoQSx0KSxbSSxbSV1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLG5JKEEpfX0saUk9e2NhbkhhbmRsZTpBPT4kQShBKSYmZUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgdDtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOkF9LFt0LFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LEF0PW5ldyBNYXAoW1sicHJveHkiLG9JXSxbInRocm93IixpSV1dKTtmdW5jdGlvbiBDSShBLHQpe2ZvcihsZXQgSSBvZiBBKWlmKHQ9PT1JfHxJPT09IioifHxJIGluc3RhbmNlb2YgUmVnRXhwJiZJLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaUEoQSx0PWdsb2JhbFRoaXMsST1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBlKGcpe2lmKCFnfHwhZy5kYXRhKXJldHVybjtpZighQ0koSSxnLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke2cub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpyLHR5cGU6byxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGcuZGF0YSksYT0oZy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChiKSxRO3RyeXtsZXQgQj1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixzKT0+ZltzXSxBKSxpPW4ucmVkdWNlKChmLHMpPT5mW3NdLEEpO3N3aXRjaChvKXtjYXNlIkdFVCI6UT1pO2JyZWFrO2Nhc2UiU0VUIjpCW24uc2xpY2UoLTEpWzBdXT1iKGcuZGF0YS52YWx1ZSksUT0hMDticmVhaztjYXNlIkFQUExZIjpRPWkuYXBwbHkoQixhKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBpKC4uLmEpO1E9YUkoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOnN9PW5ldyBNZXNzYWdlQ2hhbm5lbDtpQShBLHMpLFE9RkEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6UT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEIpe1E9e3ZhbHVlOkIsW2VBXTowfX1Qcm9taXNlLnJlc29sdmUoUSkuY2F0Y2goQj0+KHt2YWx1ZTpCLFtlQV06MH0pKS50aGVuKEI9PntsZXRbaSxmXT1vQShCKTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpLG89PT0iUkVMRUFTRSImJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGUpLHR0KHQpLHBBIGluIEEmJnR5cGVvZiBBW3BBXT09ImZ1bmN0aW9uIiYmQVtwQV0oKSl9KS5jYXRjaChCPT57bGV0W2ksZl09b0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtlQV06MH0pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZil9KX0pLHQuc3RhcnQmJnQuc3RhcnQoKX1mdW5jdGlvbiBCSShBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiB0dChBKXtCSShBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIG5JKEEsdCl7cmV0dXJuIFNBKEEsW10sdCl9ZnVuY3Rpb24gSUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIEl0KEEpe3JldHVybiBxKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3R0KEEpfSl9dmFyIGdBPW5ldyBXZWFrTWFwLHJBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCB0PShnQS5nZXQoQSl8fDApLTE7Z0Euc2V0KEEsdCksdD09PTAmJkl0KEEpfSk7ZnVuY3Rpb24gc0koQSx0KXtsZXQgST0oZ0EuZ2V0KHQpfHwwKSsxO2dBLnNldCh0LEkpLHJBJiZyQS5yZWdpc3RlcihBLHQsQSl9ZnVuY3Rpb24gUUkoQSl7ckEmJnJBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gU0EoQSx0PVtdLEk9ZnVuY3Rpb24oKXt9KXtsZXQgZT0hMSxnPW5ldyBQcm94eShJLHtnZXQocixvKXtpZihJQShlKSxvPT09ckkpcmV0dXJuKCk9PntRSShnKSxJdChBKSxlPSEwfTtpZihvPT09InRoZW4iKXtpZih0Lmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pmd9O2xldCBuPXEoQSx7dHlwZToiR0VUIixwYXRoOnQubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKGIpO3JldHVybiBuLnRoZW4uYmluZChuKX1yZXR1cm4gU0EoQSxbLi4udCxvXSl9LHNldChyLG8sbil7SUEoZSk7bGV0W2EsUV09b0Eobik7cmV0dXJuIHEoQSx7dHlwZToiU0VUIixwYXRoOlsuLi50LG9dLm1hcChCPT5CLnRvU3RyaW5nKCkpLHZhbHVlOmF9LFEpLnRoZW4oYil9LGFwcGx5KHIsbyxuKXtJQShlKTtsZXQgYT10W3QubGVuZ3RoLTFdO2lmKGE9PT1nSSlyZXR1cm4gcShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKGIpO2lmKGE9PT0iYmluZCIpcmV0dXJuIFNBKEEsdC5zbGljZSgwLC0xKSk7bGV0W1EsQl09X0Eobik7cmV0dXJuIHEoQSx7dHlwZToiQVBQTFkiLHBhdGg6dC5tYXAoaT0+aS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6UX0sQikudGhlbihiKX0sY29uc3RydWN0KHIsbyl7SUEoZSk7bGV0W24sYV09X0Eobyk7cmV0dXJuIHEoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOnQubWFwKFE9PlEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Om59LGEpLnRoZW4oYil9fSk7cmV0dXJuIHNJKGcsQSksZ31mdW5jdGlvbiBFSShBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBfQShBKXtsZXQgdD1BLm1hcChvQSk7cmV0dXJuW3QubWFwKEk9PklbMF0pLEVJKHQubWFwKEk9PklbMV0pKV19dmFyIGV0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEZBKEEsdCl7cmV0dXJuIGV0LnNldChBLHQpLEF9ZnVuY3Rpb24gYUkoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3ZBXTohMH0pfWZ1bmN0aW9uIG9BKEEpe2ZvcihsZXRbdCxJXW9mIEF0KWlmKEkuY2FuSGFuZGxlKEEpKXtsZXRbZSxnXT1JLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6dCx2YWx1ZTplfSxnXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZXQuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gYihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBBdC5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIHEoQSx0LEkpe3JldHVybiBuZXcgUHJvbWlzZShlPT57bGV0IGc9Y0koKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobyl7IW8uZGF0YXx8IW8uZGF0YS5pZHx8by5kYXRhLmlkIT09Z3x8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZShvLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmd9LHQpLEkpfSl9ZnVuY3Rpb24gY0koKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFcoQSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseSh0LGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpmSX09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6VUF9PU9iamVjdCxCQT0oQT0+dD0+e2xldCBJPWZJLmNhbGwodCk7cmV0dXJuIEFbSV18fChBW0ldPUkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxVPUE9PihBPUEudG9Mb3dlckNhc2UoKSx0PT5CQSh0KT09PUEpLG5BPUE9PnQ9PnR5cGVvZiB0PT09QSx7aXNBcnJheTpLfT1BcnJheSxaPW5BKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBsSShBKXtyZXR1cm4gQSE9PW51bGwmJiFaKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIVooQS5jb25zdHJ1Y3RvcikmJkYoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIGl0PVUoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gREkoQSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz90PUFycmF5QnVmZmVyLmlzVmlldyhBKTp0PUEmJkEuYnVmZmVyJiZpdChBLmJ1ZmZlciksdH12YXIgdUk9bkEoInN0cmluZyIpLEY9bkEoImZ1bmN0aW9uIiksQ3Q9bkEoIm51bWJlciIpLHNBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsaEk9QT0+QT09PSEwfHxBPT09ITEsQ0E9QT0+e2lmKEJBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IHQ9VUEoQSk7cmV0dXJuKHQ9PT1udWxsfHx0PT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZEk9VSgiRGF0ZSIpLHlJPVUoIkZpbGUiKSx3ST1VKCJCbG9iIiksbUk9VSgiRmlsZUxpc3QiKSxwST1BPT5zQShBKSYmRihBLnBpcGUpLFNJPUE9PntsZXQgdDtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxGKEEuYXBwZW5kKSYmKCh0PUJBKEEpKT09PSJmb3JtZGF0YSJ8fHQ9PT0ib2JqZWN0IiYmRihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxGST1VKCJVUkxTZWFyY2hQYXJhbXMiKSxSST1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gVihBLHQse2FsbE93bktleXM6ST0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBlLGc7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEsoQSkpZm9yKGU9MCxnPUEubGVuZ3RoO2U8ZztlKyspdC5jYWxsKG51bGwsQVtlXSxlLEEpO2Vsc2V7bGV0IHI9ST9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxvPXIubGVuZ3RoLG47Zm9yKGU9MDtlPG87ZSsrKW49cltlXSx0LmNhbGwobnVsbCxBW25dLG4sQSl9fWZ1bmN0aW9uIEJ0KEEsdCl7dD10LnRvTG93ZXJDYXNlKCk7bGV0IEk9T2JqZWN0LmtleXMoQSksZT1JLmxlbmd0aCxnO2Zvcig7ZS0tID4wOylpZihnPUlbZV0sdD09PWcudG9Mb3dlckNhc2UoKSlyZXR1cm4gZztyZXR1cm4gbnVsbH12YXIgbnQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxzdD1BPT4hWihBKSYmQSE9PW50O2Z1bmN0aW9uIE5BKCl7bGV0e2Nhc2VsZXNzOkF9PXN0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LEk9KGUsZyk9PntsZXQgcj1BJiZCdCh0LGcpfHxnO0NBKHRbcl0pJiZDQShlKT90W3JdPU5BKHRbcl0sZSk6Q0EoZSk/dFtyXT1OQSh7fSxlKTpLKGUpP3Rbcl09ZS5zbGljZSgpOnRbcl09ZX07Zm9yKGxldCBlPTAsZz1hcmd1bWVudHMubGVuZ3RoO2U8ZztlKyspYXJndW1lbnRzW2VdJiZWKGFyZ3VtZW50c1tlXSxJKTtyZXR1cm4gdH12YXIgTkk9KEEsdCxJLHthbGxPd25LZXlzOmV9PXt9KT0+KFYodCwoZyxyKT0+e0kmJkYoZyk/QVtyXT1XKGcsSSk6QVtyXT1nfSx7YWxsT3duS2V5czplfSksQSksVUk9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxHST0oQSx0LEksZSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6dC5wcm90b3R5cGV9KSxJJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLEkpfSxrST0oQSx0LEksZSk9PntsZXQgZyxyLG8sbj17fTtpZih0PXR8fHt9LEE9PW51bGwpcmV0dXJuIHQ7ZG97Zm9yKGc9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSkscj1nLmxlbmd0aDtyLS0gPjA7KW89Z1tyXSwoIWV8fGUobyxBLHQpKSYmIW5bb10mJih0W29dPUFbb10sbltvXT0hMCk7QT1JIT09ITEmJlVBKEEpfXdoaWxlKEEmJighSXx8SShBLHQpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB0fSxMST0oQSx0LEkpPT57QT1TdHJpbmcoQSksKEk9PT12b2lkIDB8fEk+QS5sZW5ndGgpJiYoST1BLmxlbmd0aCksSS09dC5sZW5ndGg7bGV0IGU9QS5pbmRleE9mKHQsSSk7cmV0dXJuIGUhPT0tMSYmZT09PUl9LEpJPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihLKEEpKXJldHVybiBBO2xldCB0PUEubGVuZ3RoO2lmKCFDdCh0KSlyZXR1cm4gbnVsbDtsZXQgST1uZXcgQXJyYXkodCk7Zm9yKDt0LS0gPjA7KUlbdF09QVt0XTtyZXR1cm4gSX0sSEk9KEE9PnQ9PkEmJnQgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJlVBKFVpbnQ4QXJyYXkpKSxZST0oQSx0KT0+e2xldCBlPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksZztmb3IoOyhnPWUubmV4dCgpKSYmIWcuZG9uZTspe2xldCByPWcudmFsdWU7dC5jYWxsKEEsclswXSxyWzFdKX19LGJJPShBLHQpPT57bGV0IEksZT1bXTtmb3IoOyhJPUEuZXhlYyh0KSkhPT1udWxsOyllLnB1c2goSSk7cmV0dXJuIGV9LE1JPVUoIkhUTUxGb3JtRWxlbWVudCIpLHFJPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKEksZSxnKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK2d9KSxydD0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9Pih0LEkpPT5BLmNhbGwodCxJKSkoT2JqZWN0LnByb3RvdHlwZSksS0k9VSgiUmVnRXhwIiksUXQ9KEEsdCk9PntsZXQgST1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxlPXt9O1YoSSwoZyxyKT0+e2xldCBvOyhvPXQoZyxyLEEpKSE9PSExJiYoZVtyXT1vfHxnKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsZSl9LE9JPUE9PntRdChBLCh0LEkpPT57aWYoRihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKEkpIT09LTEpcmV0dXJuITE7bGV0IGU9QVtJXTtpZihGKGUpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK0krIlwnIil9KX19KX0sVEk9KEEsdCk9PntsZXQgST17fSxlPWc9PntnLmZvckVhY2gocj0+e0lbcl09ITB9KX07cmV0dXJuIEsoQSk/ZShBKTplKFN0cmluZyhBKS5zcGxpdCh0KSksSX0sUEk9KCk9Pnt9LHhJPShBLHQpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTp0KSxSQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLG90PSIwMTIzNDU2Nzg5IixFdD17RElHSVQ6b3QsQUxQSEE6UkEsQUxQSEFfRElHSVQ6UkErUkEudG9VcHBlckNhc2UoKStvdH0sakk9KEE9MTYsdD1FdC5BTFBIQV9ESUdJVCk9PntsZXQgST0iIix7bGVuZ3RoOmV9PXQ7Zm9yKDtBLS07KUkrPXRbTWF0aC5yYW5kb20oKSplfDBdO3JldHVybiBJfTtmdW5jdGlvbiBXSShBKXtyZXR1cm4hIShBJiZGKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgWkk9QT0+e2xldCB0PW5ldyBBcnJheSgxMCksST0oZSxnKT0+e2lmKHNBKGUpKXtpZih0LmluZGV4T2YoZSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBlKSl7dFtnXT1lO2xldCByPUsoZSk/W106e307cmV0dXJuIFYoZSwobyxuKT0+e2xldCBhPUkobyxnKzEpOyFaKGEpJiYocltuXT1hKX0pLHRbZ109dm9pZCAwLHJ9fXJldHVybiBlfTtyZXR1cm4gSShBLDApfSxWST1VKCJBc3luY0Z1bmN0aW9uIiksWEk9QT0+QSYmKHNBKEEpfHxGKEEpKSYmRihBLnRoZW4pJiZGKEEuY2F0Y2gpLEM9e2lzQXJyYXk6Syxpc0FycmF5QnVmZmVyOml0LGlzQnVmZmVyOmxJLGlzRm9ybURhdGE6U0ksaXNBcnJheUJ1ZmZlclZpZXc6REksaXNTdHJpbmc6dUksaXNOdW1iZXI6Q3QsaXNCb29sZWFuOmhJLGlzT2JqZWN0OnNBLGlzUGxhaW5PYmplY3Q6Q0EsaXNVbmRlZmluZWQ6Wixpc0RhdGU6ZEksaXNGaWxlOnlJLGlzQmxvYjp3SSxpc1JlZ0V4cDpLSSxpc0Z1bmN0aW9uOkYsaXNTdHJlYW06cEksaXNVUkxTZWFyY2hQYXJhbXM6RkksaXNUeXBlZEFycmF5OkhJLGlzRmlsZUxpc3Q6bUksZm9yRWFjaDpWLG1lcmdlOk5BLGV4dGVuZDpOSSx0cmltOlJJLHN0cmlwQk9NOlVJLGluaGVyaXRzOkdJLHRvRmxhdE9iamVjdDprSSxraW5kT2Y6QkEsa2luZE9mVGVzdDpVLGVuZHNXaXRoOkxJLHRvQXJyYXk6SkksZm9yRWFjaEVudHJ5OllJLG1hdGNoQWxsOmJJLGlzSFRNTEZvcm06TUksaGFzT3duUHJvcGVydHk6cnQsaGFzT3duUHJvcDpydCxyZWR1Y2VEZXNjcmlwdG9yczpRdCxmcmVlemVNZXRob2RzOk9JLHRvT2JqZWN0U2V0OlRJLHRvQ2FtZWxDYXNlOnFJLG5vb3A6UEksdG9GaW5pdGVOdW1iZXI6eEksZmluZEtleTpCdCxnbG9iYWw6bnQsaXNDb250ZXh0RGVmaW5lZDpzdCxBTFBIQUJFVDpFdCxnZW5lcmF0ZVN0cmluZzpqSSxpc1NwZWNDb21wbGlhbnRGb3JtOldJLHRvSlNPTk9iamVjdDpaSSxpc0FzeW5jRm46VkksaXNUaGVuYWJsZTpYSX07ZnVuY3Rpb24gTyhBLHQsSSxlLGcpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxJJiYodGhpcy5jb25maWc9SSksZSYmKHRoaXMucmVxdWVzdD1lKSxnJiYodGhpcy5yZXNwb25zZT1nKX1DLmluaGVyaXRzKE8sRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpDLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBhdD1PLnByb3RvdHlwZSxjdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntjdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLGN0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXQsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Ty5mcm9tPShBLHQsSSxlLGcscik9PntsZXQgbz1PYmplY3QuY3JlYXRlKGF0KTtyZXR1cm4gQy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGEpe3JldHVybiBhIT09RXJyb3IucHJvdG90eXBlfSxuPT5uIT09ImlzQXhpb3NFcnJvciIpLE8uY2FsbChvLEEubWVzc2FnZSx0LEksZSxnKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxyJiZPYmplY3QuYXNzaWduKG8sciksb307dmFyIGw9Tzt2YXIgUUE9bnVsbDtmdW5jdGlvbiBHQShBKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KEEpfHxDLmlzQXJyYXkoQSl9ZnVuY3Rpb24gbHQoQSl7cmV0dXJuIEMuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gZnQoQSx0LEkpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihnLHIpe3JldHVybiBnPWx0KGcpLCFJJiZyPyJbIitnKyJdIjpnfSkuam9pbihJPyIuIjoiIik6dH1mdW5jdGlvbiB6SShBKXtyZXR1cm4gQy5pc0FycmF5KEEpJiYhQS5zb21lKEdBKX12YXIgX0k9Qy50b0ZsYXRPYmplY3QoQyx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHZJKEEsdCxJKXtpZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhRQXx8Rm9ybURhdGEpLEk9Qy50b0ZsYXRPYmplY3QoSSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIUMuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgZT1JLm1ldGFUb2tlbnMsZz1JLnZpc2l0b3J8fEIscj1JLmRvdHMsbz1JLmluZGV4ZXMsYT0oSS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZDLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIUMuaXNGdW5jdGlvbihnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIFEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoQy5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYSYmQy5pc0Jsb2IoRSkpdGhyb3cgbmV3IGwoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEMuaXNBcnJheUJ1ZmZlcihFKXx8Qy5pc1R5cGVkQXJyYXkoRSk/YSYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEIoRSxjLHUpe2xldCB5PUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoQy5lbmRzV2l0aChjLCJ7fSIpKWM9ZT9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKEMuaXNBcnJheShFKSYmekkoRSl8fChDLmlzRmlsZUxpc3QoRSl8fEMuZW5kc1dpdGgoYywiW10iKSkmJih5PUMudG9BcnJheShFKSkpcmV0dXJuIGM9bHQoYykseS5mb3JFYWNoKGZ1bmN0aW9uKE4sdEkpeyEoQy5pc1VuZGVmaW5lZChOKXx8Tj09PW51bGwpJiZ0LmFwcGVuZChvPT09ITA/ZnQoW2NdLHRJLHIpOm89PT1udWxsP2M6YysiW10iLFEoTikpfSksITF9cmV0dXJuIEdBKEUpPyEwOih0LmFwcGVuZChmdCh1LGMsciksUShFKSksITEpfWxldCBpPVtdLGY9T2JqZWN0LmFzc2lnbihfSSx7ZGVmYXVsdFZpc2l0b3I6Qixjb252ZXJ0VmFsdWU6USxpc1Zpc2l0YWJsZTpHQX0pO2Z1bmN0aW9uIHMoRSxjKXtpZighQy5pc1VuZGVmaW5lZChFKSl7aWYoaS5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTtpLnB1c2goRSksQy5mb3JFYWNoKEUsZnVuY3Rpb24oeSxSKXsoIShDLmlzVW5kZWZpbmVkKHkpfHx5PT09bnVsbCkmJmcuY2FsbCh0LHksQy5pc1N0cmluZyhSKT9SLnRyaW0oKTpSLGMsZikpPT09ITAmJnMoeSxjP2MuY29uY2F0KFIpOltSXSl9KSxpLnBvcCgpfX1pZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIHMoQSksdH12YXIgSj12STtmdW5jdGlvbiBEdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIHV0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmSihBLHRoaXMsdCl9dmFyIGh0PXV0LnByb3RvdHlwZTtodC5hcHBlbmQ9ZnVuY3Rpb24odCxJKXt0aGlzLl9wYWlycy5wdXNoKFt0LEldKX07aHQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IEk9dD9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxEdCl9OkR0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIEkoZ1swXSkrIj0iK0koZ1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciBFQT11dDtmdW5jdGlvbiAkSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiBYKEEsdCxJKXtpZighdClyZXR1cm4gQTtsZXQgZT1JJiZJLmVuY29kZXx8JEksZz1JJiZJLnNlcmlhbGl6ZSxyO2lmKGc/cj1nKHQsSSk6cj1DLmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcgRUEodCxJKS50b1N0cmluZyhlKSxyKXtsZXQgbz1BLmluZGV4T2YoIiUyMyIpO28hPT0tMSYmKEE9QS5zbGljZSgwLG8pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStyfXJldHVybiBBfXZhciBrQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsSSxlKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDpJLHN5bmNocm9ub3VzOmU/ZS5zeW5jaHJvbm91czohMSxydW5XaGVuOmU/ZS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7Qy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oZSl7ZSE9PW51bGwmJnQoZSl9KX19LExBPWtBO3ZhciBhQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGR0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpFQTt2YXIgeXQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciB3dD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBtdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpkdCxGb3JtRGF0YTp5dCxCbG9iOnd0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIEpBPXt9O2VJKEpBLHtoYXNCcm93c2VyRW52OigpPT5wdCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFlLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+dGV9KTt2YXIgcHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsQWU9KEE9PnB0JiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksdGU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciB3PXsuLi5KQSwuLi5tdH07ZnVuY3Rpb24gSEEoQSx0KXtyZXR1cm4gSihBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oSSxlLGcscil7cmV0dXJuIHcuaXNOb2RlJiZDLmlzQnVmZmVyKEkpPyh0aGlzLmFwcGVuZChlLEkudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6ci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gSWUoQSl7cmV0dXJuIEMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBlZShBKXtsZXQgdD17fSxJPU9iamVjdC5rZXlzKEEpLGUsZz1JLmxlbmd0aCxyO2ZvcihlPTA7ZTxnO2UrKylyPUlbZV0sdFtyXT1BW3JdO3JldHVybiB0fWZ1bmN0aW9uIGdlKEEpe2Z1bmN0aW9uIHQoSSxlLGcscil7bGV0IG89SVtyKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgbj1OdW1iZXIuaXNGaW5pdGUoK28pLGE9cj49SS5sZW5ndGg7cmV0dXJuIG89IW8mJkMuaXNBcnJheShnKT9nLmxlbmd0aDpvLGE/KEMuaGFzT3duUHJvcChnLG8pP2dbb109W2dbb10sZV06Z1tvXT1lLCFuKTooKCFnW29dfHwhQy5pc09iamVjdChnW29dKSkmJihnW29dPVtdKSx0KEksZSxnW29dLHIpJiZDLmlzQXJyYXkoZ1tvXSkmJihnW29dPWVlKGdbb10pKSwhbil9aWYoQy5pc0Zvcm1EYXRhKEEpJiZDLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IEk9e307cmV0dXJuIEMuZm9yRWFjaEVudHJ5KEEsKGUsZyk9Pnt0KEllKGUpLGcsSSwwKX0pLEl9cmV0dXJuIG51bGx9dmFyIGNBPWdlO2Z1bmN0aW9uIHJlKEEsdCxJKXtpZihDLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksQy50cmltKEEpfWNhdGNoKGUpe2lmKGUubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgZX1yZXR1cm4oSXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBZQT17dHJhbnNpdGlvbmFsOmFBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxJKXtsZXQgZT1JLmdldENvbnRlbnRUeXBlKCl8fCIiLGc9ZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEscj1DLmlzT2JqZWN0KHQpO2lmKHImJkMuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxDLmlzRm9ybURhdGEodCkpcmV0dXJuIGc/SlNPTi5zdHJpbmdpZnkoY0EodCkpOnQ7aWYoQy5pc0FycmF5QnVmZmVyKHQpfHxDLmlzQnVmZmVyKHQpfHxDLmlzU3RyZWFtKHQpfHxDLmlzRmlsZSh0KXx8Qy5pc0Jsb2IodCkpcmV0dXJuIHQ7aWYoQy5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoQy5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IG47aWYocil7aWYoZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gSEEodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChuPUMuaXNGaWxlTGlzdCh0KSl8fGUuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEoobj97ImZpbGVzW10iOnR9OnQsYSYmbmV3IGEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiByfHxnPyhJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSkscmUodCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IEk9dGhpcy50cmFuc2l0aW9uYWx8fFlBLnRyYW5zaXRpb25hbCxlPUkmJkkuZm9yY2VkSlNPTlBhcnNpbmcsZz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZih0JiZDLmlzU3RyaW5nKHQpJiYoZSYmIXRoaXMucmVzcG9uc2VUeXBlfHxnKSl7bGV0IG89IShJJiZJLnNpbGVudEpTT05QYXJzaW5nKSYmZzt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2gobil7aWYobyl0aHJvdyBuLm5hbWU9PT0iU3ludGF4RXJyb3IiP2wuZnJvbShuLGwuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bn19cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57WUEuaGVhZGVyc1tBXT17fX0pO3ZhciBUPVlBO3ZhciBvZT1DLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLFN0PUE9PntsZXQgdD17fSxJLGUsZztyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihvKXtnPW8uaW5kZXhPZigiOiIpLEk9by5zdWJzdHJpbmcoMCxnKS50cmltKCkudG9Mb3dlckNhc2UoKSxlPW8uc3Vic3RyaW5nKGcrMSkudHJpbSgpLCEoIUl8fHRbSV0mJm9lW0ldKSYmKEk9PT0ic2V0LWNvb2tpZSI/dFtJXT90W0ldLnB1c2goZSk6dFtJXT1bZV06dFtJXT10W0ldP3RbSV0rIiwgIitlOmUpfSksdH07dmFyIEZ0PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24geihBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpDLmlzQXJyYXkoQSk/QS5tYXAoZkEpOlN0cmluZyhBKX1mdW5jdGlvbiBpZShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLEk9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxlO2Zvcig7ZT1JLmV4ZWMoQSk7KXRbZVsxXV09ZVsyXTtyZXR1cm4gdH12YXIgQ2U9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gYkEoQSx0LEksZSxnKXtpZihDLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHQsSSk7aWYoZyYmKHQ9SSksISFDLmlzU3RyaW5nKHQpKXtpZihDLmlzU3RyaW5nKGUpKXJldHVybiB0LmluZGV4T2YoZSkhPT0tMTtpZihDLmlzUmVnRXhwKGUpKXJldHVybiBlLnRlc3QodCl9fWZ1bmN0aW9uIEJlKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxJLGUpPT5JLnRvVXBwZXJDYXNlKCkrZSl9ZnVuY3Rpb24gbmUoQSx0KXtsZXQgST1DLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGUrSSx7dmFsdWU6ZnVuY3Rpb24oZyxyLG8pe3JldHVybiB0aGlzW2VdLmNhbGwodGhpcyx0LGcscixvKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxJLGUpe2xldCBnPXRoaXM7ZnVuY3Rpb24gcihuLGEsUSl7bGV0IEI9eihhKTtpZighQil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGk9Qy5maW5kS2V5KGcsQik7KCFpfHxnW2ldPT09dm9pZCAwfHxRPT09ITB8fFE9PT12b2lkIDAmJmdbaV0hPT0hMSkmJihnW2l8fGFdPWZBKG4pKX1sZXQgbz0obixhKT0+Qy5mb3JFYWNoKG4sKFEsQik9PnIoUSxCLGEpKTtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKHQsSSk6Qy5pc1N0cmluZyh0KSYmKHQ9dC50cmltKCkpJiYhQ2UodCk/byhTdCh0KSxJKTp0IT1udWxsJiZyKEksdCxlKSx0aGlzfWdldCh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtpZihlKXtsZXQgZz10aGlzW2VdO2lmKCFJKXJldHVybiBnO2lmKEk9PT0hMClyZXR1cm4gaWUoZyk7aWYoQy5pc0Z1bmN0aW9uKEkpKXJldHVybiBJLmNhbGwodGhpcyxnLGUpO2lmKEMuaXNSZWdFeHAoSSkpcmV0dXJuIEkuZXhlYyhnKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKGUmJnRoaXNbZV0hPT12b2lkIDAmJighSXx8YkEodGhpcyx0aGlzW2VdLGUsSSkpKX1yZXR1cm4hMX1kZWxldGUodCxJKXtsZXQgZT10aGlzLGc9ITE7ZnVuY3Rpb24gcihvKXtpZihvPXoobyksbyl7bGV0IG49Qy5maW5kS2V5KGUsbyk7biYmKCFJfHxiQShlLGVbbl0sbixJKSkmJihkZWxldGUgZVtuXSxnPSEwKX19cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSxnfWNsZWFyKHQpe2xldCBJPU9iamVjdC5rZXlzKHRoaXMpLGU9SS5sZW5ndGgsZz0hMTtmb3IoO2UtLTspe2xldCByPUlbZV07KCF0fHxiQSh0aGlzLHRoaXNbcl0scix0LCEwKSkmJihkZWxldGUgdGhpc1tyXSxnPSEwKX1yZXR1cm4gZ31ub3JtYWxpemUodCl7bGV0IEk9dGhpcyxlPXt9O3JldHVybiBDLmZvckVhY2godGhpcywoZyxyKT0+e2xldCBvPUMuZmluZEtleShlLHIpO2lmKG8pe0lbb109ZkEoZyksZGVsZXRlIElbcl07cmV0dXJufWxldCBuPXQ/QmUocik6U3RyaW5nKHIpLnRyaW0oKTtuIT09ciYmZGVsZXRlIElbcl0sSVtuXT1mQShnKSxlW25dPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChlLGcpPT57ZSE9bnVsbCYmZSE9PSExJiYoSVtnXT10JiZDLmlzQXJyYXkoZSk/ZS5qb2luKCIsICIpOmUpfSksSX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxJXSk9PnQrIjogIitJKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5JKXtsZXQgZT1uZXcgdGhpcyh0KTtyZXR1cm4gSS5mb3JFYWNoKGc9PmUuc2V0KGcpKSxlfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgZT0odGhpc1tGdF09dGhpc1tGdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxnPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIobyl7bGV0IG49eihvKTtlW25dfHwobmUoZyxvKSxlW25dPSEwKX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLHRoaXN9fTtQLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtDLnJlZHVjZURlc2NyaXB0b3JzKFAucHJvdG90eXBlLCh7dmFsdWU6QX0sdCk9PntsZXQgST10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChlKXt0aGlzW0ldPWV9fX0pO0MuZnJlZXplTWV0aG9kcyhQKTt2YXIgbT1QO2Z1bmN0aW9uIF8oQSx0KXtsZXQgST10aGlzfHxULGU9dHx8SSxnPW0uZnJvbShlLmhlYWRlcnMpLHI9ZS5kYXRhO3JldHVybiBDLmZvckVhY2goQSxmdW5jdGlvbihuKXtyPW4uY2FsbChJLHIsZy5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxnLm5vcm1hbGl6ZSgpLHJ9ZnVuY3Rpb24gdihBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFJ0KEEsdCxJKXtsLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGwuRVJSX0NBTkNFTEVELHQsSSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1DLmluaGVyaXRzKFJ0LGwse19fQ0FOQ0VMX186ITB9KTt2YXIgSD1SdDtmdW5jdGlvbiBNQShBLHQsSSl7bGV0IGU9SS5jb25maWcudmFsaWRhdGVTdGF0dXM7IUkuc3RhdHVzfHwhZXx8ZShJLnN0YXR1cyk/QShJKTp0KG5ldyBsKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrSS5zdGF0dXMsW2wuRVJSX0JBRF9SRVFVRVNULGwuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihJLnN0YXR1cy8xMDApLTRdLEkuY29uZmlnLEkucmVxdWVzdCxJKSl9dmFyIE50PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsSSxlLGcscil7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07Qy5pc051bWJlcihJKSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoSSkudG9HTVRTdHJpbmcoKSksQy5pc1N0cmluZyhlKSYmby5wdXNoKCJwYXRoPSIrZSksQy5pc1N0cmluZyhnKSYmby5wdXNoKCJkb21haW49IitnKSxyPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gcUEoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gS0EoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uICQoQSx0KXtyZXR1cm4gQSYmIXFBKHQpP0tBKEEsdCk6dH12YXIgVXQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLGU7ZnVuY3Rpb24gZyhyKXtsZXQgbz1yO3JldHVybiB0JiYoSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLG89SS5ocmVmKSxJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbykse2hyZWY6SS5ocmVmLHByb3RvY29sOkkucHJvdG9jb2w/SS5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6SS5ob3N0LHNlYXJjaDpJLnNlYXJjaD9JLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDpJLmhhc2g/SS5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTpJLmhvc3RuYW1lLHBvcnQ6SS5wb3J0LHBhdGhuYW1lOkkucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP0kucGF0aG5hbWU6Ii8iK0kucGF0aG5hbWV9fXJldHVybiBlPWcod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG8pe2xldCBuPUMuaXNTdHJpbmcobyk/ZyhvKTpvO3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiBPQShBKXtsZXQgdD0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gdCYmdFsxXXx8IiJ9ZnVuY3Rpb24gc2UoQSx0KXtBPUF8fDEwO2xldCBJPW5ldyBBcnJheShBKSxlPW5ldyBBcnJheShBKSxnPTAscj0wLG87cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjFlMyxmdW5jdGlvbihhKXtsZXQgUT1EYXRlLm5vdygpLEI9ZVtyXTtvfHwobz1RKSxJW2ddPWEsZVtnXT1RO2xldCBpPXIsZj0wO2Zvcig7aSE9PWc7KWYrPUlbaSsrXSxpPWklQTtpZihnPShnKzEpJUEsZz09PXImJihyPShyKzEpJUEpLFEtbzx0KXJldHVybjtsZXQgcz1CJiZRLUI7cmV0dXJuIHM/TWF0aC5yb3VuZChmKjFlMy9zKTp2b2lkIDB9fXZhciBHdD1zZTtmdW5jdGlvbiBrdChBLHQpe2xldCBJPTAsZT1HdCg1MCwyNTApO3JldHVybiBnPT57bGV0IHI9Zy5sb2FkZWQsbz1nLmxlbmd0aENvbXB1dGFibGU/Zy50b3RhbDp2b2lkIDAsbj1yLUksYT1lKG4pLFE9cjw9bztJPXI7bGV0IEI9e2xvYWRlZDpyLHRvdGFsOm8scHJvZ3Jlc3M6bz9yL286dm9pZCAwLGJ5dGVzOm4scmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJm8mJlE/KG8tcikvYTp2b2lkIDAsZXZlbnQ6Z307Qlt0PyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEoQil9fXZhciBRZT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLEx0PVFlJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSSxlKXtsZXQgZz1BLmRhdGEscj1tLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm8sd2l0aFhTUkZUb2tlbjpufT1BLGE7ZnVuY3Rpb24gUSgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQjtpZihDLmlzRm9ybURhdGEoZykpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilyLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChCPXIuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4udV09Qj9CLnNwbGl0KCI7IikubWFwKHk9PnkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107ci5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLnVdLmpvaW4oIjsgIikpfX1sZXQgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgYz1BLmF1dGgudXNlcm5hbWV8fCIiLHU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShjKyI6Iit1KSl9bGV0IGY9JChBLmJhc2VVUkwsQS51cmwpO2kub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoZixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxpLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIHMoKXtpZighaSlyZXR1cm47bGV0IGM9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gaSYmaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkseT17ZGF0YTohb3x8bz09PSJ0ZXh0Inx8bz09PSJqc29uIj9pLnJlc3BvbnNlVGV4dDppLnJlc3BvbnNlLHN0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDppfTtNQShmdW5jdGlvbihOKXtJKE4pLFEoKX0sZnVuY3Rpb24oTil7ZShOKSxRKCl9LHkpLGk9bnVsbH1pZigib25sb2FkZW5kImluIGk/aS5vbmxvYWRlbmQ9czppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFpfHxpLnJlYWR5U3RhdGUhPT00fHxpLnN0YXR1cz09PTAmJiEoaS5yZXNwb25zZVVSTCYmaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocyl9LGkub25hYm9ydD1mdW5jdGlvbigpe2kmJihlKG5ldyBsKCJSZXF1ZXN0IGFib3J0ZWQiLGwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbCl9LGkub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IGwoIk5ldHdvcmsgRXJyb3IiLGwuRVJSX05FVFdPUkssQSxpKSksaT1udWxsfSxpLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIix5PUEudHJhbnNpdGlvbmFsfHxhQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksZShuZXcgbCh1LHkuY2xhcmlmeVRpbWVvdXRFcnJvcj9sLkVUSU1FRE9VVDpsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobiYmQy5pc0Z1bmN0aW9uKG4pJiYobj1uKEEpKSxufHxuIT09ITEmJlV0KGYpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmTnQucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfWc9PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gaSYmQy5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24odSx5KXtpLnNldFJlcXVlc3RIZWFkZXIoeSx1KX0pLEMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoaS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksbyYmbyE9PSJqc29uIiYmKGkucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS51cGxvYWQmJmkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYT1jPT57aSYmKGUoIWN8fGMudHlwZT9uZXcgSChudWxsLEEsaSk6YyksaS5hYm9ydCgpLGk9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9hKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IEU9T0EoZik7aWYoRSYmdy5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtlKG5ldyBsKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGwuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59aS5zZW5kKGd8fG51bGwpfSl9O3ZhciBUQT17aHR0cDpRQSx4aHI6THR9O0MuZm9yRWFjaChUQSwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBKdD1BPT5gLSAke0F9YCxFZT1BPT5DLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbEE9e2dldEFkYXB0ZXI6QT0+e0E9Qy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxJLGUsZz17fTtmb3IobGV0IHI9MDtyPHQ7cisrKXtJPUFbcl07bGV0IG87aWYoZT1JLCFFZShJKSYmKGU9VEFbKG89U3RyaW5nKEkpKS50b0xvd2VyQ2FzZSgpXSxlPT09dm9pZCAwKSl0aHJvdyBuZXcgbChgVW5rbm93biBhZGFwdGVyIFwnJHtvfVwnYCk7aWYoZSlicmVhaztnW298fCIlMjMiK3JdPWV9aWYoIWUpe2xldCByPU9iamVjdC5lbnRyaWVzKGcpLm1hcCgoW24sYV0pPT5gYWRhcHRlciAke259IGArKGE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPXQ/ci5sZW5ndGg+MT9gc2luY2UgOiUwQWArci5tYXAoSnQpLmpvaW4oYCUwQWApOiIgIitKdChyWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBsKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIGV9LGFkYXB0ZXJzOlRBfTtmdW5jdGlvbiBQQShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSChudWxsLEEpfWZ1bmN0aW9uIERBKEEpe3JldHVybiBQQShBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGxBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxULmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFBBKEEpLGUuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUpLGUuaGVhZGVycz1tLmZyb20oZS5oZWFkZXJzKSxlfSxmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8KFBBKEEpLGUmJmUucmVzcG9uc2UmJihlLnJlc3BvbnNlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlLnJlc3BvbnNlKSxlLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKGUucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChlKX0pfXZhciBIdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgST17fTtmdW5jdGlvbiBlKFEsQixpKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KFEpJiZDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZS5jYWxsKHtjYXNlbGVzczppfSxRLEIpOkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlKHt9LEIpOkMuaXNBcnJheShCKT9CLnNsaWNlKCk6Qn1mdW5jdGlvbiBnKFEsQixpKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSxpKX1lbHNlIHJldHVybiBlKFEsQixpKX1mdW5jdGlvbiByKFEsQil7aWYoIUMuaXNVbmRlZmluZWQoQikpcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG8oUSxCKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSl9ZWxzZSByZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbihRLEIsaSl7aWYoaSBpbiB0KXJldHVybiBlKFEsQik7aWYoaSBpbiBBKXJldHVybiBlKHZvaWQgMCxRKX1sZXQgYT17dXJsOnIsbWV0aG9kOnIsZGF0YTpyLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpuLGhlYWRlcnM6KFEsQik9PmcoSHQoUSksSHQoQiksITApfTtyZXR1cm4gQy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24oQil7bGV0IGk9YVtCXXx8ZyxmPWkoQVtCXSx0W0JdLEIpO0MuaXNVbmRlZmluZWQoZikmJmkhPT1ufHwoSVtCXT1mKX0pLEl9dmFyIHVBPSIxLjYuOCI7dmFyIHhBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSx0KT0+e3hBW0FdPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09PUF8fCJhIisodDwxPyJuICI6IiAiKStBfX0pO3ZhciBZdD17fTt4QS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxJLGUpe2Z1bmN0aW9uIGcocixvKXtyZXR1cm4iW0F4aW9zIHYiK3VBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK3IrIlwnIitvKyhlPyIuICIrZToiIil9cmV0dXJuKHIsbyxuKT0+e2lmKHQ9PT0hMSl0aHJvdyBuZXcgbChnKG8sIiBoYXMgYmVlbiByZW1vdmVkIisoST8iIGluICIrSToiIikpLGwuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBJJiYhWXRbb10mJihZdFtvXT0hMCxjb25zb2xlLndhcm4oZyhvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitJKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLHQ/dChyLG8sbik6ITB9fTtmdW5jdGlvbiBhZShBLHQsSSl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBsKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxnPWUubGVuZ3RoO2Zvcig7Zy0tID4wOyl7bGV0IHI9ZVtnXSxvPXRbcl07aWYobyl7bGV0IG49QVtyXSxhPW49PT12b2lkIDB8fG8obixyLEEpO2lmKGEhPT0hMCl0aHJvdyBuZXcgbCgib3B0aW9uICIrcisiIG11c3QgYmUgIithLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKEkhPT0hMCl0aHJvdyBuZXcgbCgiVW5rbm93biBvcHRpb24gIityLGwuRVJSX0JBRF9PUFRJT04pfX12YXIgaEE9e2Fzc2VydE9wdGlvbnM6YWUsdmFsaWRhdG9yczp4QX07dmFyIFk9aEEudmFsaWRhdG9ycyx4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdHM9dCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgTEEscmVzcG9uc2U6bmV3IExBfX1hc3luYyByZXF1ZXN0KHQsSSl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KHQsSSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgZztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShnPXt9KTpnPW5ldyBFcnJvcjtsZXQgcj1nLnN0YWNrP2cuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7ZS5zdGFjaz9yJiYhU3RyaW5nKGUuc3RhY2spLmVuZHNXaXRoKHIucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihlLnN0YWNrKz1gJTBBYCtyKTplLnN0YWNrPXJ9dGhyb3cgZX19X3JlcXVlc3QodCxJKXt0eXBlb2YgdD09InN0cmluZyI/KEk9SXx8e30sSS51cmw9dCk6ST10fHx7fSxJPWsodGhpcy5kZWZhdWx0cyxJKTtsZXR7dHJhbnNpdGlvbmFsOmUscGFyYW1zU2VyaWFsaXplcjpnLGhlYWRlcnM6cn09STtlIT09dm9pZCAwJiZoQS5hc3NlcnRPcHRpb25zKGUse3NpbGVudEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbil9LCExKSxnIT1udWxsJiYoQy5pc0Z1bmN0aW9uKGcpP0kucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOmd9OmhBLmFzc2VydE9wdGlvbnMoZyx7ZW5jb2RlOlkuZnVuY3Rpb24sc2VyaWFsaXplOlkuZnVuY3Rpb259LCEwKSksSS5tZXRob2Q9KEkubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89ciYmQy5tZXJnZShyLmNvbW1vbixyW0kubWV0aG9kXSk7ciYmQy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgcltFXX0pLEkuaGVhZGVycz1tLmNvbmNhdChvLHIpO2xldCBuPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3R5cGVvZiBjLnJ1bldoZW49PSJmdW5jdGlvbiImJmMucnVuV2hlbihJKT09PSExfHwoYT1hJiZjLnN5bmNocm9ub3VzLG4udW5zaGlmdChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKSl9KTtsZXQgUT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGMpe1EucHVzaChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKX0pO2xldCBCLGk9MCxmO2lmKCFhKXtsZXQgRT1bREEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxuKSxFLnB1c2guYXBwbHkoRSxRKSxmPUUubGVuZ3RoLEI9UHJvbWlzZS5yZXNvbHZlKEkpO2k8ZjspQj1CLnRoZW4oRVtpKytdLEVbaSsrXSk7cmV0dXJuIEJ9Zj1uLmxlbmd0aDtsZXQgcz1JO2ZvcihpPTA7aTxmOyl7bGV0IEU9bltpKytdLGM9bltpKytdO3RyeXtzPUUocyl9Y2F0Y2godSl7Yy5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXtCPURBLmNhbGwodGhpcyxzKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKGk9MCxmPVEubGVuZ3RoO2k8ZjspQj1CLnRoZW4oUVtpKytdLFFbaSsrXSk7cmV0dXJuIEJ9Z2V0VXJpKHQpe3Q9ayh0aGlzLmRlZmF1bHRzLHQpO2xldCBJPSQodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gWChJLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe3gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKEksZSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKGV8fHt9LHttZXRob2Q6dCx1cmw6SSxkYXRhOihlfHx7fSkuZGF0YX0pKX19KTtDLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBJKGUpe3JldHVybiBmdW5jdGlvbihyLG8sbil7cmV0dXJuIHRoaXMucmVxdWVzdChrKG58fHt9LHttZXRob2Q6dCxoZWFkZXJzOmU/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTpvfSkpfX14LnByb3RvdHlwZVt0XT1JKCkseC5wcm90b3R5cGVbdCsiRm9ybSJdPUkoITApfSk7dmFyIEFBPXg7dmFyIGpBPWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBJO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXtJPXJ9KTtsZXQgZT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGc9PntpZighZS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1lLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOyllLl9saXN0ZW5lcnNbcl0oZyk7ZS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1nPT57bGV0IHIsbz1uZXcgUHJvbWlzZShuPT57ZS5zdWJzY3JpYmUobikscj1ufSkudGhlbihnKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKHIpfSxvfSx0KGZ1bmN0aW9uKHIsbyxuKXtlLnJlYXNvbnx8KGUucmVhc29uPW5ldyBIKHIsbyxuKSxJKGUucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IEk9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7SSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEksMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihnKXt0PWd9KSxjYW5jZWw6dH19fSxidD1qQTtmdW5jdGlvbiBXQShBKXtyZXR1cm4gZnVuY3Rpb24oSSl7cmV0dXJuIEEuYXBwbHkobnVsbCxJKX19ZnVuY3Rpb24gWkEoQSl7cmV0dXJuIEMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFZBPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhWQSkuZm9yRWFjaCgoW0EsdF0pPT57VkFbdF09QX0pO3ZhciBNdD1WQTtmdW5jdGlvbiBxdChBKXtsZXQgdD1uZXcgQUEoQSksST1XKEFBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBDLmV4dGVuZChJLEFBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksQy5leHRlbmQoSSx0LG51bGwse2FsbE93bktleXM6ITB9KSxJLmNyZWF0ZT1mdW5jdGlvbihnKXtyZXR1cm4gcXQoayhBLGcpKX0sSX12YXIgaD1xdChUKTtoLkF4aW9zPUFBO2guQ2FuY2VsZWRFcnJvcj1IO2guQ2FuY2VsVG9rZW49YnQ7aC5pc0NhbmNlbD12O2guVkVSU0lPTj11QTtoLnRvRm9ybURhdGE9SjtoLkF4aW9zRXJyb3I9bDtoLkNhbmNlbD1oLkNhbmNlbGVkRXJyb3I7aC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtoLnNwcmVhZD1XQTtoLmlzQXhpb3NFcnJvcj1aQTtoLm1lcmdlQ29uZmlnPWs7aC5BeGlvc0hlYWRlcnM9bTtoLmZvcm1Ub0pTT049QT0+Y0EoQy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtoLmdldEFkYXB0ZXI9bEEuZ2V0QWRhcHRlcjtoLkh0dHBTdGF0dXNDb2RlPU10O2guZGVmYXVsdD1oO3ZhciBkQT1oO3ZhcntBeGlvczppbyxBeGlvc0Vycm9yOkNvLENhbmNlbGVkRXJyb3I6Qm8saXNDYW5jZWw6bm8sQ2FuY2VsVG9rZW46c28sVkVSU0lPTjpRbyxhbGw6RW8sQ2FuY2VsOmFvLGlzQXhpb3NFcnJvcjpjbyxzcHJlYWQ6Zm8sdG9Gb3JtRGF0YTpsbyxBeGlvc0hlYWRlcnM6RG8sSHR0cFN0YXR1c0NvZGU6dW8sZm9ybVRvSlNPTjpobyxnZXRBZGFwdGVyOnlvLG1lcmdlQ29uZmlnOndvfT1kQTt2YXIgdEEsTCx6QSxYQT17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe3pBPW5ldyBVaW50OEFycmF5KEwuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSx5QT1jbGFzc3tpbml0KCl7cmV0dXJuIHRBfHwodHlwZW9mIGZldGNoPCJ1Ij90QT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK0t0KS50aGVuKHQ9PnQuYXJyYXlCdWZmZXIoKSkudGhlbih0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0LFhBKSkudGhlbih0aGlzLl9pbml0KTp0QT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShLdCwiYmFzZTY0IiksWEEpLnRoZW4odGhpcy5faW5pdCksdEEpfV9pbml0KHQpe0w9dC5pbnN0YW5jZSxYQS5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUodCxJPTApe2lmKCFMKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBlPXQuYnl0ZUxlbmd0aCxnPUwuZXhwb3J0cy5tYWxsb2MoZSk7ekEuc2V0KHQsZyksST1JfHxOdW1iZXIoTC5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUoZyxlKSk7bGV0IHI9TC5leHBvcnRzLm1hbGxvYyhJKSxvPUwuZXhwb3J0cy5aU1REX2RlY29tcHJlc3MocixJLGcsZSksbj16QS5zbGljZShyLHIrbyk7cmV0dXJuIEwuZXhwb3J0cy5mcmVlKGcpLEwuZXhwb3J0cy5mcmVlKHIpLG59fSxLdD0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBPdD1uZXcgeUEsVHQ9ITE7YXN5bmMgZnVuY3Rpb24gY2UoQSx0LEkpe2xldCBlPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP2U9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP2U9QTplPWAke3R9LyR7QX1gLGUuZW5kc1dpdGgoIi5qcyIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTMpKSxlLmVuZHNXaXRoKCIud2FzbSIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTUpKTtsZXQgZz1gJHtlfS53YXNtYCxyPWF3YWl0IGRBLmdldChgJHtnfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6SX0pO1R0fHwoYXdhaXQgT3QuaW5pdCgpLFR0PSEwKTtsZXQgbj1PdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7ZX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIFB0PWNlO3ZhciB3QT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGZlKEEsdCxJKXtsZXQgZT1BLGc9QSxyPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKGU9bmV3IFVSTChBLmhyZWYpLGc9ZS5ocmVmKSx3QS5oYXMoZyk/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLFB0KGUsdCxJKSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIHh0PWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9dWU7ZnVuY3Rpb24gaGUoQSx0KXtsZXQgST1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e0k9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDg6e0k9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFMuVUludDE2OntJPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFMuSW50MTY6e0k9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7ST1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDMyOntJPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ0ludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQzMjp7ST1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDY0OntJPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ST1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ST1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIEl9dmFyIEc9aGU7dmFyIFp0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGp0PW5ldyBUZXh0RW5jb2RlcixXdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSx0KXtsZXQgST17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3Blbih0LEkuZmxhZ3MpLHI9QS5mc19zdGF0KHQpLnNpemUsbz1udWxsO1p0P289bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOm89bmV3IEFycmF5QnVmZmVyKHIpO2xldCBuPW5ldyBVaW50OEFycmF5KG8pO3JldHVybiBBLmZzX3JlYWQoZSxuLDAsciwwKSxBLmZzX2Nsb3NlKGUpLG59ZnVuY3Rpb24gVnQoQSx0LEkpe2xldCBlPW51bGw7WnQ/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoSSk6ZT1uZXcgQXJyYXlCdWZmZXIoSSk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxJKTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiBkKEEsdCxJLGUpe2xldCBnPTA7cmV0dXJuIHQhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGUsdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gTShBLHQsSSl7bGV0IGU9SlNPTi5zdHJpbmdpZnkodCksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gcChBLHQsSSxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLG89VnQoQSxnLHIpO3JldHVybiBHKGUsby5idWZmZXIpfWZ1bmN0aW9uIG1BKEEsdCl7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksZT1BLlVURjhUb1N0cmluZyhJKTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLHQsSSxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxCKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IGk9anQuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IGk9anQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IGk9US5kYXRhLmRhdGEsZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IGk9US5kYXRhLGY9ZChBLGkuZGF0YSxCLDApLHM9ZChBLGkuZGlyZWN0aW9uLEIsMSksRT10eXBlb2YgaS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShpLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOmkuaW1hZ2VUeXBlLG5hbWU6aS5uYW1lLG9yaWdpbjppLm9yaWdpbixzcGFjaW5nOmkuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsc2l6ZTppLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtNKEEsYyxCKTticmVha31jYXNlIEQuTWVzaDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5jZWxscyxCLDEpLEU9ZChBLGkucG9pbnREYXRhLEIsMiksYz1kKEEsaS5jZWxsRGF0YSxCLDMpLHU9e21lc2hUeXBlOmkubWVzaFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczppLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsY2VsbEJ1ZmZlclNpemU6aS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsdSxCKTticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkucG9pbnREYXRhLEIsMSksRT17cG9pbnRTZXRUeXBlOmkucG9pbnRTZXRUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YH07TShBLEUsQik7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnZlcnRpY2VzLEIsMSksRT1kKEEsaS5saW5lcyxCLDIpLGM9ZChBLGkucG9seWdvbnMsQiwzKSx1PWQoQSxpLnRyaWFuZ2xlU3RyaXBzLEIsNCkseT1kKEEsaS5wb2ludERhdGEsQiw1KSxSPWQoQSxpLnBvaW50RGF0YSxCLDYpLE49e3BvbHlEYXRhVHlwZTppLnBvbHlEYXRhVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6aS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsbGluZXNCdWZmZXJTaXplOmkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTppLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6aS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07TShBLE4sQik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgbz1BLmdldE1vZHVsZVN0ZG91dCgpLG49QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiBJIT1udWxsJiZJLmxlbmd0aD4wJiZyPT09MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7bGV0IGk9bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9e2RhdGE6V3QuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPUpTT04ucGFyc2UoV3QuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pO2k9e2RhdGE6VnQoQSxzLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgcz1tQShBLEIpO3MuZGF0YT1wKEEsQiwwLHMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLHMuZGlyZWN0aW9uPXAoQSxCLDEsai5GbG9hdDY0KSxzLm1ldGFkYXRhPW5ldyBNYXAocy5tZXRhZGF0YSksaT1zO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxzPjA/cy5jZWxscz1wKEEsQiwxLHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOnMuY2VsbHM9RyhzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMixzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsMyxzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgcz1tQShBLEIpO2NvbnNvbGUubG9nKHMpLHMubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwxLHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxqLkZsb2F0MzIpOnMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXkscy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9zLnZlcnRpY2VzPXAoQSxCLDEsUy5VSW50MzIpOnMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LHMubGluZXNCdWZmZXJTaXplPjA/cy5saW5lcz1wKEEsQiwyLFMuVUludDMyKTpzLmxpbmVzPW5ldyBVaW50MzJBcnJheSxzLnBvbHlnb25zQnVmZmVyU2l6ZT4wP3MucG9seWdvbnM9cChBLEIsMyxTLlVJbnQzMik6cy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXkscy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9zLnRyaWFuZ2xlU3RyaXBzPXAoQSxCLDQsUy5VSW50MzIpOnMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDUscy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsNixzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOlEudHlwZSxkYXRhOml9O2EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpyLHN0ZG91dDpvLHN0ZGVycjpuLG91dHB1dHM6YX19dmFyIFh0PXllO3ZhciB3ZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gbWUoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBJPVtdO2ZvcihsZXQgZT0wO2U8QS5sZW5ndGg7ZSsrKXtsZXQgZz1wZShBW2VdLHQpO2chPT1udWxsJiZJLnB1c2goZyl9cmV0dXJuIEl9ZnVuY3Rpb24gcGUoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBJPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP0k9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoST1BKSx3ZSYmSSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9JOkkuc2xpY2UoMCl9dmFyIHp0PW1lO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBfdD1TZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgdnQ9RmU7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyICR0PVJlO2FzeW5jIGZ1bmN0aW9uIE5lKEEsdCxJLGUpe2xldCBnPVh0KEEsdCxJLGUpLHI9W107cmV0dXJuIGcub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8udHlwZT09PUQuQmluYXJ5U3RyZWFtfHxvLnR5cGU9PT1ELkJpbmFyeUZpbGUpe2xldCBuPW8uZGF0YTtyLnB1c2gobil9ZWxzZSBpZihvLnR5cGU9PT1ELkltYWdlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLl90KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuTWVzaCl7bGV0IG49by5kYXRhO3IucHVzaCguLi52dChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELlBvbHlEYXRhKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLiR0KG4pKX19KSxGQShnLHp0KHIsITApKX12YXIgQUk9TmU7dmFyIFVlPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsSSxlLGcscil7bGV0IG89YXdhaXQgeHQoQSx0LHIpO3JldHVybiBhd2FpdCBBSShvLEksZSxnKX19O2lBKFVlKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO2RyKHlyKTtleHBvcnR7WUEgYXMgYmlvUmFkUmVhZEltYWdlLHFBIGFzIGJpb1JhZFdyaXRlSW1hZ2UsVUEgYXMgYm1wUmVhZEltYWdlLE5BIGFzIGJtcFdyaXRlSW1hZ2UsWSBhcyBleHRlbnNpb25Ub0ltYWdlSW8scnQgYXMgZmRmUmVhZEltYWdlLGZhIGFzIGZkZldyaXRlSW1hZ2UsJEEgYXMgZ2RjbVJlYWRJbWFnZSxldCBhcyBnZGNtV3JpdGVJbWFnZSxfQSBhcyBnZTRSZWFkSW1hZ2UsVkEgYXMgZ2U0V3JpdGVJbWFnZSxaQSBhcyBnZTVSZWFkSW1hZ2UsWEEgYXMgZ2U1V3JpdGVJbWFnZSx2QSBhcyBnZUFkd1JlYWRJbWFnZSx6QSBhcyBnZUFkd1dyaXRlSW1hZ2UseSBhcyBnZXREZWZhdWx0V2ViV29ya2VyLGQgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsRSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLEtBIGFzIGdpcGxSZWFkSW1hZ2UsakEgYXMgZ2lwbFdyaXRlSW1hZ2UsU0EgYXMgaGRmNVJlYWRJbWFnZSxPQSBhcyBoZGY1V3JpdGVJbWFnZSxSQSBhcyBqcGVnUmVhZEltYWdlLGtBIGFzIGpwZWdXcml0ZUltYWdlLEpBIGFzIGxzbVJlYWRJbWFnZSxMQSBhcyBsc21Xcml0ZUltYWdlLENBIGFzIG1ldGFSZWFkSW1hZ2UsRUEgYXMgbWV0YVdyaXRlSW1hZ2UsTUEgYXMgbWdoUmVhZEltYWdlLEhBIGFzIG1naFdyaXRlSW1hZ2UsUEEgYXMgbWluY1JlYWRJbWFnZSx4QSBhcyBtaW5jV3JpdGVJbWFnZSxUQSBhcyBtcmNSZWFkSW1hZ2UsR0EgYXMgbXJjV3JpdGVJbWFnZSxoQSBhcyBuaWZ0aVJlYWRJbWFnZSx3QSBhcyBuaWZ0aVdyaXRlSW1hZ2UsYkEgYXMgbnJyZFJlYWRJbWFnZSxEQSBhcyBucnJkV3JpdGVJbWFnZSxCQSBhcyBwbmdSZWFkSW1hZ2UsZEEgYXMgcG5nV3JpdGVJbWFnZSxzdCBhcyByZWFkSW1hZ2UsbGEgYXMgcmVhZEltYWdlRmlsZVNlcmllcyxtbyBhcyByZWFkSW1hZ2VIdHRwLEF0IGFzIHNjYW5jb1JlYWRJbWFnZSx0dCBhcyBzY2FuY29Xcml0ZUltYWdlLF9JIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsZHIgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsSEkgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCx5QSBhcyB0aWZmUmVhZEltYWdlLFFBIGFzIHRpZmZXcml0ZUltYWdlLFdBIGFzIHZ0a1JlYWRJbWFnZSxGQSBhcyB2dGtXcml0ZUltYWdlLGl0IGFzIHdhc21SZWFkSW1hZ2Usb3QgYXMgd2FzbVdyaXRlSW1hZ2UsYXQgYXMgd2FzbVpzdGRSZWFkSW1hZ2UsbnQgYXMgd2FzbVpzdGRXcml0ZUltYWdlLG1hIGFzIHdyaXRlSW1hZ2V9OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" +default_js_module = """data:text/javascript;base64,dmFyIGhyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgd3I9KGUsQSk9Pntmb3IodmFyIHQgaW4gQSlocihlLHQse2dldDpBW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIFJyPW5ldyBNYXAoW1siYm1wIiwiYm1wIl0sWyJkY20iLCJnZGNtIl0sWyJnaXBsIiwiZ2lwbCJdLFsiZ2lwbC5neiIsImdpcGwiXSxbImhkZjUiLCJoZGY1Il0sWyJqcGciLCJqcGVnIl0sWyJqcGVnIiwianBlZyJdLFsiaXdpIiwid2FzbSJdLFsiaXdpLmNib3IiLCJ3YXNtIl0sWyJpd2kuY2Jvci56c3QiLCJ3YXNtWnN0ZCJdLFsibHNtIiwibHNtIl0sWyJtbmMiLCJtbmMiXSxbIm1uYy5neiIsIm1uYyJdLFsibW5jMiIsIm1uYyJdLFsibWdoIiwibWdoIl0sWyJtZ3oiLCJtZ2giXSxbIm1naC5neiIsIm1naCJdLFsibWhhIiwibWV0YSJdLFsibWhkIiwibWV0YSJdLFsibXJjIiwibXJjIl0sWyJuaWEiLCJuaWZ0aSJdLFsibmlpIiwibmlmdGkiXSxbIm5paS5neiIsIm5pZnRpIl0sWyJoZHIiLCJuaWZ0aSJdLFsibnJyZCIsIm5ycmQiXSxbIm5oZHIiLCJucnJkIl0sWyJwbmciLCJwbmciXSxbInBpYyIsImJpb1JhZCJdLFsidGlmIiwidGlmZiJdLFsidGlmZiIsInRpZmYiXSxbInZ0ayIsInZ0ayJdLFsiaXNxIiwic2NhbmNvIl0sWyJhaW0iLCJzY2FuY28iXSxbImZkZiIsImZkZiJdXSksWT1Scjt2YXIga3I9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxoPWtyO3ZhciBicj17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0sRD1icjtmdW5jdGlvbiBEcihlLEEpe2xldCB0PW51bGw7c3dpdGNoKGUpe2Nhc2UgaC5VSW50ODp7dD1uZXcgVWludDhBcnJheShBKTticmVha31jYXNlIGguSW50ODp7dD1uZXcgSW50OEFycmF5KEEpO2JyZWFrfWNhc2UgaC5VSW50MTY6e3Q9bmV3IFVpbnQxNkFycmF5KEEpO2JyZWFrfWNhc2UgaC5JbnQxNjp7dD1uZXcgSW50MTZBcnJheShBKTticmVha31jYXNlIGguVUludDMyOnt0PW5ldyBVaW50MzJBcnJheShBKTticmVha31jYXNlIGguSW50MzI6e3Q9bmV3IEludDMyQXJyYXkoQSk7YnJlYWt9Y2FzZSBoLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnVWludDY0QXJyYXkoQSk6dD1uZXcgVWludDhBcnJheShBKTticmVha31jYXNlIGguSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnSW50NjRBcnJheShBKTp0PW5ldyBVaW50OEFycmF5KEEpO2JyZWFrfWNhc2UgRC5GbG9hdDMyOnt0PW5ldyBGbG9hdDMyQXJyYXkoQSk7YnJlYWt9Y2FzZSBELkZsb2F0NjQ6e3Q9bmV3IEZsb2F0NjRBcnJheShBKTticmVha31jYXNlIm51bGwiOnt0PW51bGw7YnJlYWt9Y2FzZSBudWxsOnt0PW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gdH12YXIgTj1Ecjt2YXIgV3I9e1Vua25vd246IlVua25vd24iLFNjYWxhcjoiU2NhbGFyIixSR0I6IlJHQiIsUkdCQToiUkdCQSIsT2Zmc2V0OiJPZmZzZXQiLFZlY3RvcjoiVmVjdG9yIixQb2ludDoiUG9pbnQiLENvdmFyaWFudFZlY3RvcjoiQ292YXJpYW50VmVjdG9yIixTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yOiJTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yIixEaWZmdXNpb25UZW5zb3IzRDoiRGlmZnVzaW9uVGVuc29yM0QiLENvbXBsZXg6IkNvbXBsZXgiLEZpeGVkQXJyYXk6IkZpeGVkQXJyYXkiLEFycmF5OiJBcnJheSIsTWF0cml4OiJNYXRyaXgiLFZhcmlhYmxlTGVuZ3RoVmVjdG9yOiJWYXJpYWJsZUxlbmd0aFZlY3RvciIsVmFyaWFibGVTaXplTWF0cml4OiJWYXJpYWJsZVNpemVNYXRyaXgifSxtZT1Xcjt2YXIgeGU9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoQT0yLHQ9aC5VSW50OCxyPW1lLlNjYWxhcixvPTEpe3RoaXMuZGltZW5zaW9uPUEsdGhpcy5jb21wb25lbnRUeXBlPXQsdGhpcy5waXhlbFR5cGU9cix0aGlzLmNvbXBvbmVudHM9b319LGd0PXhlO2Z1bmN0aW9uIEZyKGUsQSx0LHIsbyl7ZVtyK3QqQV09b312YXIgSXQ9RnI7dmFyIFRlPWNsYXNze2ltYWdlVHlwZTtuYW1lPSJJbWFnZSI7b3JpZ2luO3NwYWNpbmc7ZGlyZWN0aW9uO3NpemU7bWV0YWRhdGE7ZGF0YTtjb25zdHJ1Y3RvcihBPW5ldyBndCl7dGhpcy5pbWFnZVR5cGU9QTtsZXQgdD1BLmRpbWVuc2lvbjt0aGlzLm9yaWdpbj1uZXcgQXJyYXkodCksdGhpcy5vcmlnaW4uZmlsbCgwKSx0aGlzLnNwYWNpbmc9bmV3IEFycmF5KHQpLHRoaXMuc3BhY2luZy5maWxsKDEpLHRoaXMuZGlyZWN0aW9uPW5ldyBGbG9hdDY0QXJyYXkodCp0KSx0aGlzLmRpcmVjdGlvbi5maWxsKDApO2ZvcihsZXQgcj0wO3I8dDtyKyspSXQodGhpcy5kaXJlY3Rpb24sdCxyLHIsMSk7dGhpcy5zaXplPW5ldyBBcnJheSh0KSx0aGlzLnNpemUuZmlsbCgwKSx0aGlzLm1ldGFkYXRhPW5ldyBNYXAsdGhpcy5kYXRhPW51bGx9fSxqPVRlO2Z1bmN0aW9uIFVyKGUpe2xldCBBPW5ldyBqKGUuaW1hZ2VUeXBlKTtpZihBLm5hbWU9ZS5uYW1lLEEub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLEEuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyksQS5kaXJlY3Rpb249ZS5kaXJlY3Rpb24uc2xpY2UoKSxBLnNpemU9QXJyYXkuZnJvbShlLnNpemUpLGUuZGF0YSE9PW51bGwpe2xldCB0PWUuZGF0YS5jb25zdHJ1Y3RvcjtBLmRhdGE9bmV3IHQoZS5kYXRhLmxlbmd0aCksQS5kYXRhIT1udWxsJiZBLmRhdGEuc2V0KGUuZGF0YSwwKX1yZXR1cm4gQX12YXIgR2U9VXI7ZnVuY3Rpb24gTnIoZSl7aWYoZS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgQT1lWzBdO2lmKEEuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgaihBLmltYWdlVHlwZSk7dC5vcmlnaW49QXJyYXkuZnJvbShBLm9yaWdpbiksdC5zcGFjaW5nPUFycmF5LmZyb20oQS5zcGFjaW5nKTtsZXQgcj10LmltYWdlVHlwZS5kaW1lbnNpb247dC5kaXJlY3Rpb249QS5kaXJlY3Rpb24uc2xpY2UoKTtsZXQgbz1yLTE7dC5zaXplPUFycmF5LmZyb20oQS5zaXplKTtsZXQgaT1lLnJlZHVjZSgoYSxuKT0+YStuLnNpemVbb10sMCk7dC5zaXplW29dPWk7bGV0IHM9dC5zaXplLnJlZHVjZSgoYSxuKT0+YSpuLDEpKnQuaW1hZ2VUeXBlLmNvbXBvbmVudHMsbT1BLmRhdGEuY29uc3RydWN0b3I7dC5kYXRhPW5ldyBtKHMpO2xldCBmPXQuaW1hZ2VUeXBlLmNvbXBvbmVudHM7Zm9yKGxldCBhPTA7YTx0LnNpemUubGVuZ3RoLTE7YSsrKWYqPXQuc2l6ZVthXTtsZXQgcD0wO2lmKHQuZGF0YSE9bnVsbClmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl0LmRhdGEuc2V0KGVbYV0uZGF0YSxmKnApLHArPWVbYV0uc2l6ZVtvXTtlbHNlIHRocm93IEVycm9yKCJDb3VsZCBub3QgY3JlYXRlIHJlc3VsdCBpbWFnZSBkYXRhLiIpO3JldHVybiB0fXZhciBKZT1OcjtmdW5jdGlvbiBTcihlKXtsZXQgQT1lLnNsaWNlKChlLmxhc3RJbmRleE9mKCIuIiktMT4+PjApKzIpO2lmKEEudG9Mb3dlckNhc2UoKT09PSJneiIpe2xldCB0PWUuc2xpY2UoMCwtMykubGFzdEluZGV4T2YoIi4iKTtBPWUuc2xpY2UoKHQtMT4+PjApKzIpfWVsc2UgaWYoQS50b0xvd2VyQ2FzZSgpPT09ImNib3IiKXtsZXQgdD1lLnNsaWNlKDAsLTUpLmxhc3RJbmRleE9mKCIuIik7QT1lLnNsaWNlKCh0LTE+Pj4wKSsyKX1lbHNlIGlmKEEudG9Mb3dlckNhc2UoKT09PSJ6c3QiKXtsZXQgdD1lLnNsaWNlKDAsLTEwKS5sYXN0SW5kZXhPZigiLiIpO0E9ZS5zbGljZSgodC0xPj4+MCkrMil9ZWxzZSBpZihBLnRvTG93ZXJDYXNlKCk9PT0iemlwIil7bGV0IHQ9ZS5zbGljZSgwLC00KS5sYXN0SW5kZXhPZigiLiIpO0E9ZS5zbGljZSgodC0xPj4+MCkrMil9cmV0dXJuIEF9dmFyIHRlPVNyO2Z1bmN0aW9uIE9yKGUsQSl7bGV0IHQ9ey4uLmUuaW1hZ2VUeXBlfTtpZih0eXBlb2YgQTwidSImJnR5cGVvZiBBLnBpeGVsVHlwZTwidSImJih0LnBpeGVsVHlwZT1BLnBpeGVsVHlwZSxBLnBpeGVsVHlwZT09PW1lLlNjYWxhciYmdC5jb21wb25lbnRzIT09MSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FzdCBtdWx0aS1jb21wb25lbnQgaW1hZ2UgdG8gYSBzY2FsYXIgaW1hZ2UiKTt0eXBlb2YgQTwidSImJnR5cGVvZiBBLmNvbXBvbmVudFR5cGU8InUiJiZBLmNvbXBvbmVudFR5cGUhPT1lLmltYWdlVHlwZS5jb21wb25lbnRUeXBlJiYodC5jb21wb25lbnRUeXBlPUEuY29tcG9uZW50VHlwZSk7bGV0IHI9bmV3IGoodCk7aWYoci5uYW1lPWUubmFtZSxyLm9yaWdpbj1BcnJheS5mcm9tKGUub3JpZ2luKSxyLnNwYWNpbmc9QXJyYXkuZnJvbShlLnNwYWNpbmcpLHIuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCksci5zaXplPUFycmF5LmZyb20oZS5zaXplKSxyLm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGUubWV0YWRhdGEpKSkpLGUuZGF0YSE9PW51bGwpaWYodHlwZW9mIEE8InUiJiZ0eXBlb2YgQS5jb21wb25lbnRUeXBlPCJ1IiYmQS5jb21wb25lbnRUeXBlIT09ZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBoLlVJbnQ4OmNhc2UgaC5JbnQ4OmNhc2UgaC5VSW50MTY6Y2FzZSBoLkludDE2OmNhc2UgaC5VSW50MzI6Y2FzZSBoLkludDMyOmNhc2UgRC5GbG9hdDMyOmNhc2UgRC5GbG9hdDY0OnN3aXRjaChyLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIGguVUludDg6ci5kYXRhPW5ldyBVaW50OEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguVUludDE2OnIuZGF0YT1uZXcgVWludDE2QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguSW50MTY6ci5kYXRhPW5ldyBJbnQxNkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDMyOnIuZGF0YT1uZXcgSW50MzJBcnJheShlLmRhdGEpO2JyZWFrO2Nhc2UgRC5GbG9hdDMyOnIuZGF0YT1uZXcgRmxvYXQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBELkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguVUludDY0OnIuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWs7Y2FzZSBoLkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEubGVuZ3RoKTtmb3IobGV0IG89MDtvPHIuZGF0YS5sZW5ndGg7bysrKXIuZGF0YVtvXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWt9YnJlYWs7Y2FzZSBoLlVJbnQ2NDpjYXNlIGguSW50NjQ6c3dpdGNoKHIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgaC5VSW50ODpyLmRhdGE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQxNjpyLmRhdGE9bmV3IFVpbnQxNkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2UgaC5JbnQxNjpyLmRhdGE9bmV3IEludDE2QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2UgaC5JbnQzMjpyLmRhdGE9bmV3IEludDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBELkZsb2F0MzI6ci5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBELkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQ2NDpyLmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG89ZS5kYXRhLmNvbnN0cnVjdG9yO3IuZGF0YT1uZXcgbyhlLmRhdGEubGVuZ3RoKSxyLmRhdGEhPW51bGwmJnIuZGF0YS5zZXQoZS5kYXRhLDApfXJldHVybiByfXZhciBKPU9yO3ZhciBMZT1jbGFzc3tmY247d29ya2VyUXVldWU7cnVuSW5mbztjb25zdHJ1Y3RvcihBLHQpe3RoaXMuZmNuPXQsdGhpcy53b3JrZXJRdWV1ZT1uZXcgQXJyYXkoQSksdGhpcy53b3JrZXJRdWV1ZS5maWxsKG51bGwpLHRoaXMucnVuSW5mbz1bXX1ydW5UYXNrcyhBLHQ9bnVsbCl7bGV0IHI9e3Rhc2tRdWV1ZTpbXSxyZXN1bHRzOltdLGFkZGluZ1Rhc2tzOiExLHBvc3Rwb25lZDohMSxydW5uaW5nV29ya2VyczowLGluZGV4OjAsY29tcGxldGVkVGFza3M6MCxwcm9ncmVzc0NhbGxiYWNrOnQsY2FuY2VsZWQ6ITF9O3JldHVybiB0aGlzLnJ1bkluZm8ucHVzaChyKSxyLmluZGV4PXRoaXMucnVuSW5mby5sZW5ndGgtMSx7cHJvbWlzZTpuZXcgUHJvbWlzZSgobyxpKT0+e3IucmVzb2x2ZT1vLHIucmVqZWN0PWksci5yZXN1bHRzPW5ldyBBcnJheShBLmxlbmd0aCksci5jb21wbGV0ZWRUYXNrcz0wLHIuYWRkaW5nVGFza3M9ITAsQS5mb3JFYWNoKChzLG0pPT57dGhpcy5hZGRUYXNrKHIuaW5kZXgsbSxzKX0pLHIuYWRkaW5nVGFza3M9ITF9KSxydW5JZDpyLmluZGV4fX10ZXJtaW5hdGVXb3JrZXJzKCl7Zm9yKGxldCBBPTA7QTx0aGlzLndvcmtlclF1ZXVlLmxlbmd0aDtBKyspe2xldCB0PXRoaXMud29ya2VyUXVldWVbQV07dD8udGVybWluYXRlKCksdGhpcy53b3JrZXJRdWV1ZVtBXT1udWxsfX1jYW5jZWwoQSl7bGV0IHQ9dGhpcy5ydW5JbmZvW0FdO3QhPW51bGwmJih0LmNhbmNlbGVkPSEwKX1hZGRUYXNrKEEsdCxyKXtsZXQgbz10aGlzLnJ1bkluZm9bQV07aWYobz8uY2FuY2VsZWQ9PT0hMCl7by5yZWplY3QoIlJlbWFpbmluZyB0YXNrcyBjYW5jZWxlZCIpLHRoaXMuY2xlYXJUYXNrKG8uaW5kZXgpO3JldHVybn1pZih0aGlzLndvcmtlclF1ZXVlLmxlbmd0aD4wKXtsZXQgaT10aGlzLndvcmtlclF1ZXVlLnBvcCgpO28ucnVubmluZ1dvcmtlcnMrKyxyW3IubGVuZ3RoLTFdLndlYldvcmtlcj1pLHRoaXMuZmNuKC4uLnIpLnRoZW4oKHt3ZWJXb3JrZXI6cywuLi5tfSk9PntpZih0aGlzLndvcmtlclF1ZXVlLnB1c2gocyksdGhpcy5ydW5JbmZvW0FdIT09bnVsbCl7aWYoby5ydW5uaW5nV29ya2Vycy0tLG8ucmVzdWx0c1t0XT1tLG8uY29tcGxldGVkVGFza3MrKyxvLnByb2dyZXNzQ2FsbGJhY2shPW51bGwmJm8ucHJvZ3Jlc3NDYWxsYmFjayhvLmNvbXBsZXRlZFRhc2tzLG8ucmVzdWx0cy5sZW5ndGgpLG8udGFza1F1ZXVlLmxlbmd0aD4wKXtsZXQgZj1vLnRhc2tRdWV1ZS5zaGlmdCgpO3RoaXMuYWRkVGFzayhBLGZbMF0sZlsxXSl9ZWxzZSBpZighby5hZGRpbmdUYXNrcyYmby5ydW5uaW5nV29ya2Vycz09PTApe2xldCBmPW8ucmVzdWx0cztvLnJlc29sdmUoZiksdGhpcy5jbGVhclRhc2soby5pbmRleCl9fX0pLmNhdGNoKHM9PntvLnJlamVjdChzKSx0aGlzLmNsZWFyVGFzayhvLmluZGV4KX0pfWVsc2Ugby5ydW5uaW5nV29ya2VycyE9PTB8fG8ucG9zdHBvbmVkP28udGFza1F1ZXVlLnB1c2goW3Qscl0pOihvLnBvc3Rwb25lZD0hMCxzZXRUaW1lb3V0KCgpPT57by5wb3N0cG9uZWQ9ITEsdGhpcy5hZGRUYXNrKG8uaW5kZXgsdCxyKX0sNTApKX1jbGVhclRhc2soQSl7dGhpcy5ydW5JbmZvW0FdLnJlc3VsdHM9W10sdGhpcy5ydW5JbmZvW0FdLnRhc2tRdWV1ZT1bXSx0aGlzLnJ1bkluZm9bQV0ucHJvZ3Jlc3NDYWxsYmFjaz1udWxsLHRoaXMucnVuSW5mb1tBXS5jYW5jZWxlZD1udWxsLHRoaXMucnVuSW5mb1tBXS5yZWplY3Q9KCk9Pnt9LHRoaXMucnVuSW5mb1tBXS5yZXNvbHZlPSgpPT57fX19LE1lPUxlO3ZhciBQcj17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEk9UHI7dmFyIHB0PVN5bWJvbCgiQ29tbGluay5wcm94eSIpLHhyPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHFlPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxIZT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZmU9U3ltYm9sKCJDb21saW5rLnRocm93biIpLG10PWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLFRyPXtjYW5IYW5kbGU6ZT0+bXQoZSkmJmVbcHRdLHNlcmlhbGl6ZShlKXtsZXR7cG9ydDE6QSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGZ0KGUsQSksW3QsW3RdXX0sZGVzZXJpYWxpemUoZSl7cmV0dXJuIGUuc3RhcnQoKSxLZShlKX19LEdyPXtjYW5IYW5kbGU6ZT0+bXQoZSkmJmZlIGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IEE7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9BPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06QT17aXNFcnJvcjohMSx2YWx1ZTplfSxbQSxbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSx1dD1uZXcgTWFwKFtbInByb3h5IixUcl0sWyJ0aHJvdyIsR3JdXSk7ZnVuY3Rpb24gSnIoZSxBKXtmb3IobGV0IHQgb2YgZSlpZihBPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KEEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGZ0KGUsQT1nbG9iYWxUaGlzLHQ9WyIqIl0pe0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihvKXtpZighb3x8IW8uZGF0YSlyZXR1cm47aWYoIUpyKHQsby5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke28ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOmksdHlwZTpzLHBhdGg6bX09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sby5kYXRhKSxmPShvLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKHEpLHA7dHJ5e2xldCBhPW0uc2xpY2UoMCwtMSkucmVkdWNlKCh1LGcpPT51W2ddLGUpLG49bS5yZWR1Y2UoKHUsZyk9PnVbZ10sZSk7c3dpdGNoKHMpe2Nhc2UiR0VUIjpwPW47YnJlYWs7Y2FzZSJTRVQiOmFbbS5zbGljZSgtMSlbMF1dPXEoby5kYXRhLnZhbHVlKSxwPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOnA9bi5hcHBseShhLGYpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IHU9bmV3IG4oLi4uZik7cD1xcih1KX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOnUscG9ydDI6Z309bmV3IE1lc3NhZ2VDaGFubmVsO2Z0KGUsZykscD1qZSh1LFt1XSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpwPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goYSl7cD17dmFsdWU6YSxbZmVdOjB9fVByb21pc2UucmVzb2x2ZShwKS5jYXRjaChhPT4oe3ZhbHVlOmEsW2ZlXTowfSkpLnRoZW4oYT0+e2xldFtuLHVdPWRlKGEpO0EucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLHtpZDppfSksdSkscz09PSJSRUxFQVNFIiYmKEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksY3QoQSksSGUgaW4gZSYmdHlwZW9mIGVbSGVdPT0iZnVuY3Rpb24iJiZlW0hlXSgpKX0pLmNhdGNoKGE9PntsZXRbbix1XT1kZSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2ZlXTowfSk7QS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbikse2lkOml9KSx1KX0pfSksQS5zdGFydCYmQS5zdGFydCgpfWZ1bmN0aW9uIExyKGUpe3JldHVybiBlLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIGN0KGUpe0xyKGUpJiZlLmNsb3NlKCl9ZnVuY3Rpb24gS2UoZSxBKXtyZXR1cm4gWWUoZSxbXSxBKX1mdW5jdGlvbiB1ZShlKXtpZihlKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gQnQoZSl7cmV0dXJuIHYoZSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57Y3QoZSl9KX12YXIgY2U9bmV3IFdlYWtNYXAsQmU9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShlPT57bGV0IEE9KGNlLmdldChlKXx8MCktMTtjZS5zZXQoZSxBKSxBPT09MCYmQnQoZSl9KTtmdW5jdGlvbiBNcihlLEEpe2xldCB0PShjZS5nZXQoQSl8fDApKzE7Y2Uuc2V0KEEsdCksQmUmJkJlLnJlZ2lzdGVyKGUsQSxlKX1mdW5jdGlvbiBIcihlKXtCZSYmQmUudW5yZWdpc3RlcihlKX1mdW5jdGlvbiBZZShlLEE9W10sdD1mdW5jdGlvbigpe30pe2xldCByPSExLG89bmV3IFByb3h5KHQse2dldChpLHMpe2lmKHVlKHIpLHM9PT1xZSlyZXR1cm4oKT0+e0hyKG8pLEJ0KGUpLHI9ITB9O2lmKHM9PT0idGhlbiIpe2lmKEEubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+b307bGV0IG09dihlLHt0eXBlOiJHRVQiLHBhdGg6QS5tYXAoZj0+Zi50b1N0cmluZygpKX0pLnRoZW4ocSk7cmV0dXJuIG0udGhlbi5iaW5kKG0pfXJldHVybiBZZShlLFsuLi5BLHNdKX0sc2V0KGkscyxtKXt1ZShyKTtsZXRbZixwXT1kZShtKTtyZXR1cm4gdihlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLkEsc10ubWFwKGE9PmEudG9TdHJpbmcoKSksdmFsdWU6Zn0scCkudGhlbihxKX0sYXBwbHkoaSxzLG0pe3VlKHIpO2xldCBmPUFbQS5sZW5ndGgtMV07aWYoZj09PXhyKXJldHVybiB2KGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4ocSk7aWYoZj09PSJiaW5kIilyZXR1cm4gWWUoZSxBLnNsaWNlKDAsLTEpKTtsZXRbcCxhXT1sdChtKTtyZXR1cm4gdihlLHt0eXBlOiJBUFBMWSIscGF0aDpBLm1hcChuPT5uLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpwfSxhKS50aGVuKHEpfSxjb25zdHJ1Y3QoaSxzKXt1ZShyKTtsZXRbbSxmXT1sdChzKTtyZXR1cm4gdihlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6QS5tYXAocD0+cC50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6bX0sZikudGhlbihxKX19KTtyZXR1cm4gTXIobyxlKSxvfWZ1bmN0aW9uIFlyKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIGx0KGUpe2xldCBBPWUubWFwKGRlKTtyZXR1cm5bQS5tYXAodD0+dFswXSksWXIoQS5tYXAodD0+dFsxXSkpXX12YXIgZHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gamUoZSxBKXtyZXR1cm4gZHQuc2V0KGUsQSksZX1mdW5jdGlvbiBxcihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbcHRdOiEwfSl9ZnVuY3Rpb24gZGUoZSl7Zm9yKGxldFtBLHRdb2YgdXQpaWYodC5jYW5IYW5kbGUoZSkpe2xldFtyLG9dPXQuc2VyaWFsaXplKGUpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTpBLHZhbHVlOnJ9LG9dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTplfSxkdC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBxKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHV0LmdldChlLm5hbWUpLmRlc2VyaWFsaXplKGUudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gZS52YWx1ZX19ZnVuY3Rpb24gdihlLEEsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbz1LcigpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaShzKXshcy5kYXRhfHwhcy5kYXRhLmlkfHxzLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpKSxyKHMuZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sQSksdCl9KX1mdW5jdGlvbiBLcigpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gcmUoZSxBKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseShBLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpqcn09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6X2V9PU9iamVjdCxFZT0oZT0+QT0+e2xldCB0PWpyLmNhbGwoQSk7cmV0dXJuIGVbdF18fChlW3RdPXQuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSx4PWU9PihlPWUudG9Mb3dlckNhc2UoKSxBPT5FZShBKT09PWUpLHllPWU9PkE9PnR5cGVvZiBBPT09ZSx7aXNBcnJheTp6fT1BcnJheSxpZT15ZSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gdnIoZSl7cmV0dXJuIGUhPT1udWxsJiYhaWUoZSkmJmUuY29uc3RydWN0b3IhPT1udWxsJiYhaWUoZS5jb25zdHJ1Y3RvcikmJlMoZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIFF0PXgoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24genIoZSl7bGV0IEE7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9BPUFycmF5QnVmZmVyLmlzVmlldyhlKTpBPWUmJmUuYnVmZmVyJiZRdChlLmJ1ZmZlciksQX12YXIgX3I9eWUoInN0cmluZyIpLFM9eWUoImZ1bmN0aW9uIiksaHQ9eWUoIm51bWJlciIpLFFlPWU9PmUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCIsVnI9ZT0+ZT09PSEwfHxlPT09ITEsQ2U9ZT0+e2lmKEVlKGUpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IEE9X2UoZSk7cmV0dXJuKEE9PT1udWxsfHxBPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKEEpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGUpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBlKX0sWnI9eCgiRGF0ZSIpLFhyPXgoIkZpbGUiKSwkcj14KCJCbG9iIiksZWk9eCgiRmlsZUxpc3QiKSxBaT1lPT5RZShlKSYmUyhlLnBpcGUpLHRpPWU9PntsZXQgQTtyZXR1cm4gZSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmZSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxTKGUuYXBwZW5kKSYmKChBPUVlKGUpKT09PSJmb3JtZGF0YSJ8fEE9PT0ib2JqZWN0IiYmUyhlLnRvU3RyaW5nKSYmZS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxyaT14KCJVUkxTZWFyY2hQYXJhbXMiKSxpaT1lPT5lLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gb2UoZSxBLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihlPT09bnVsbHx8dHlwZW9mIGU+InUiKXJldHVybjtsZXQgcixvO2lmKHR5cGVvZiBlIT0ib2JqZWN0IiYmKGU9W2VdKSx6KGUpKWZvcihyPTAsbz1lLmxlbmd0aDtyPG87cisrKUEuY2FsbChudWxsLGVbcl0scixlKTtlbHNle2xldCBpPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSk6T2JqZWN0LmtleXMoZSkscz1pLmxlbmd0aCxtO2ZvcihyPTA7cjxzO3IrKyltPWlbcl0sQS5jYWxsKG51bGwsZVttXSxtLGUpfX1mdW5jdGlvbiB3dChlLEEpe0E9QS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKGUpLHI9dC5sZW5ndGgsbztmb3IoO3ItLSA+MDspaWYobz10W3JdLEE9PT1vLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG87cmV0dXJuIG51bGx9dmFyIFJ0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsa3Q9ZT0+IWllKGUpJiZlIT09UnQ7ZnVuY3Rpb24gemUoKXtsZXR7Y2FzZWxlc3M6ZX09a3QodGhpcykmJnRoaXN8fHt9LEE9e30sdD0ocixvKT0+e2xldCBpPWUmJnd0KEEsbyl8fG87Q2UoQVtpXSkmJkNlKHIpP0FbaV09emUoQVtpXSxyKTpDZShyKT9BW2ldPXplKHt9LHIpOnoocik/QVtpXT1yLnNsaWNlKCk6QVtpXT1yfTtmb3IobGV0IHI9MCxvPWFyZ3VtZW50cy5sZW5ndGg7cjxvO3IrKylhcmd1bWVudHNbcl0mJm9lKGFyZ3VtZW50c1tyXSx0KTtyZXR1cm4gQX12YXIgb2k9KGUsQSx0LHthbGxPd25LZXlzOnJ9PXt9KT0+KG9lKEEsKG8saSk9Pnt0JiZTKG8pP2VbaV09cmUobyx0KTplW2ldPW99LHthbGxPd25LZXlzOnJ9KSxlKSxhaT1lPT4oZS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihlPWUuc2xpY2UoMSkpLGUpLG5pPShlLEEsdCxyKT0+e2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQS5wcm90b3R5cGUsciksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3VwZXIiLHt2YWx1ZTpBLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oZS5wcm90b3R5cGUsdCl9LHNpPShlLEEsdCxyKT0+e2xldCBvLGkscyxtPXt9O2lmKEE9QXx8e30sZT09bnVsbClyZXR1cm4gQTtkb3tmb3Iobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSxpPW8ubGVuZ3RoO2ktLSA+MDspcz1vW2ldLCghcnx8cihzLGUsQSkpJiYhbVtzXSYmKEFbc109ZVtzXSxtW3NdPSEwKTtlPXQhPT0hMSYmX2UoZSl9d2hpbGUoZSYmKCF0fHx0KGUsQSkpJiZlIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIEF9LGdpPShlLEEsdCk9PntlPVN0cmluZyhlKSwodD09PXZvaWQgMHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKSx0LT1BLmxlbmd0aDtsZXQgcj1lLmluZGV4T2YoQSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0sSWk9ZT0+e2lmKCFlKXJldHVybiBudWxsO2lmKHooZSkpcmV0dXJuIGU7bGV0IEE9ZS5sZW5ndGg7aWYoIWh0KEEpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShBKTtmb3IoO0EtLSA+MDspdFtBXT1lW0FdO3JldHVybiB0fSxsaT0oZT0+QT0+ZSYmQSBpbnN0YW5jZW9mIGUpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmX2UoVWludDhBcnJheSkpLHBpPShlLEEpPT57bGV0IHI9KGUmJmVbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChlKSxvO2Zvcig7KG89ci5uZXh0KCkpJiYhby5kb25lOyl7bGV0IGk9by52YWx1ZTtBLmNhbGwoZSxpWzBdLGlbMV0pfX0sbWk9KGUsQSk9PntsZXQgdCxyPVtdO2Zvcig7KHQ9ZS5leGVjKEEpKSE9PW51bGw7KXIucHVzaCh0KTtyZXR1cm4gcn0sdWk9eCgiSFRNTEZvcm1FbGVtZW50IiksZmk9ZT0+ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxyLG8pe3JldHVybiByLnRvVXBwZXJDYXNlKCkrb30pLEV0PSgoe2hhc093blByb3BlcnR5OmV9KT0+KEEsdCk9PmUuY2FsbChBLHQpKShPYmplY3QucHJvdG90eXBlKSxjaT14KCJSZWdFeHAiKSxidD0oZSxBKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGUpLHI9e307b2UodCwobyxpKT0+e2xldCBzOyhzPUEobyxpLGUpKSE9PSExJiYocltpXT1zfHxvKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUscil9LEJpPWU9PntidChlLChBLHQpPT57aWYoUyhlKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHQpIT09LTEpcmV0dXJuITE7bGV0IHI9ZVt0XTtpZihTKHIpKXtpZihBLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIEEpe0Eud3JpdGFibGU9ITE7cmV0dXJufUEuc2V0fHwoQS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrdCsiJyIpfSl9fSl9LGRpPShlLEEpPT57bGV0IHQ9e30scj1vPT57by5mb3JFYWNoKGk9Pnt0W2ldPSEwfSl9O3JldHVybiB6KGUpP3IoZSk6cihTdHJpbmcoZSkuc3BsaXQoQSkpLHR9LENpPSgpPT57fSxFaT0oZSxBKT0+KGU9K2UsTnVtYmVyLmlzRmluaXRlKGUpP2U6QSksdmU9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix5dD0iMDEyMzQ1Njc4OSIsRHQ9e0RJR0lUOnl0LEFMUEhBOnZlLEFMUEhBX0RJR0lUOnZlK3ZlLnRvVXBwZXJDYXNlKCkreXR9LHlpPShlPTE2LEE9RHQuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDpyfT1BO2Zvcig7ZS0tOyl0Kz1BW01hdGgucmFuZG9tKCkqcnwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gUWkoZSl7cmV0dXJuISEoZSYmUyhlLmFwcGVuZCkmJmVbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJmVbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIGhpPWU9PntsZXQgQT1uZXcgQXJyYXkoMTApLHQ9KHIsbyk9PntpZihRZShyKSl7aWYoQS5pbmRleE9mKHIpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gcikpe0Fbb109cjtsZXQgaT16KHIpP1tdOnt9O3JldHVybiBvZShyLChzLG0pPT57bGV0IGY9dChzLG8rMSk7IWllKGYpJiYoaVttXT1mKX0pLEFbb109dm9pZCAwLGl9fXJldHVybiByfTtyZXR1cm4gdChlLDApfSx3aT14KCJBc3luY0Z1bmN0aW9uIiksUmk9ZT0+ZSYmKFFlKGUpfHxTKGUpKSYmUyhlLnRoZW4pJiZTKGUuY2F0Y2gpLGM9e2lzQXJyYXk6eixpc0FycmF5QnVmZmVyOlF0LGlzQnVmZmVyOnZyLGlzRm9ybURhdGE6dGksaXNBcnJheUJ1ZmZlclZpZXc6enIsaXNTdHJpbmc6X3IsaXNOdW1iZXI6aHQsaXNCb29sZWFuOlZyLGlzT2JqZWN0OlFlLGlzUGxhaW5PYmplY3Q6Q2UsaXNVbmRlZmluZWQ6aWUsaXNEYXRlOlpyLGlzRmlsZTpYcixpc0Jsb2I6JHIsaXNSZWdFeHA6Y2ksaXNGdW5jdGlvbjpTLGlzU3RyZWFtOkFpLGlzVVJMU2VhcmNoUGFyYW1zOnJpLGlzVHlwZWRBcnJheTpsaSxpc0ZpbGVMaXN0OmVpLGZvckVhY2g6b2UsbWVyZ2U6emUsZXh0ZW5kOm9pLHRyaW06aWksc3RyaXBCT006YWksaW5oZXJpdHM6bmksdG9GbGF0T2JqZWN0OnNpLGtpbmRPZjpFZSxraW5kT2ZUZXN0OngsZW5kc1dpdGg6Z2ksdG9BcnJheTpJaSxmb3JFYWNoRW50cnk6cGksbWF0Y2hBbGw6bWksaXNIVE1MRm9ybTp1aSxoYXNPd25Qcm9wZXJ0eTpFdCxoYXNPd25Qcm9wOkV0LHJlZHVjZURlc2NyaXB0b3JzOmJ0LGZyZWV6ZU1ldGhvZHM6QmksdG9PYmplY3RTZXQ6ZGksdG9DYW1lbENhc2U6Zmksbm9vcDpDaSx0b0Zpbml0ZU51bWJlcjpFaSxmaW5kS2V5Ond0LGdsb2JhbDpSdCxpc0NvbnRleHREZWZpbmVkOmt0LEFMUEhBQkVUOkR0LGdlbmVyYXRlU3RyaW5nOnlpLGlzU3BlY0NvbXBsaWFudEZvcm06UWksdG9KU09OT2JqZWN0OmhpLGlzQXN5bmNGbjp3aSxpc1RoZW5hYmxlOlJpfTtmdW5jdGlvbiBfKGUsQSx0LHIsbyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPWUsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixBJiYodGhpcy5jb2RlPUEpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG8mJih0aGlzLnJlc3BvbnNlPW8pfWMuaW5oZXJpdHMoXyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIFd0PV8ucHJvdG90eXBlLEZ0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goZT0+e0Z0W2VdPXt2YWx1ZTplfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF8sRnQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShXdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtfLmZyb209KGUsQSx0LHIsbyxpKT0+e2xldCBzPU9iamVjdC5jcmVhdGUoV3QpO3JldHVybiBjLnRvRmxhdE9iamVjdChlLHMsZnVuY3Rpb24oZil7cmV0dXJuIGYhPT1FcnJvci5wcm90b3R5cGV9LG09Pm0hPT0iaXNBeGlvc0Vycm9yIiksXy5jYWxsKHMsZS5tZXNzYWdlLEEsdCxyLG8pLHMuY2F1c2U9ZSxzLm5hbWU9ZS5uYW1lLGkmJk9iamVjdC5hc3NpZ24ocyxpKSxzfTt2YXIgdz1fO3ZhciBoZT1udWxsO2Z1bmN0aW9uIFZlKGUpe3JldHVybiBjLmlzUGxhaW5PYmplY3QoZSl8fGMuaXNBcnJheShlKX1mdW5jdGlvbiBOdChlKXtyZXR1cm4gYy5lbmRzV2l0aChlLCJbXSIpP2Uuc2xpY2UoMCwtMik6ZX1mdW5jdGlvbiBVdChlLEEsdCl7cmV0dXJuIGU/ZS5jb25jYXQoQSkubWFwKGZ1bmN0aW9uKG8saSl7cmV0dXJuIG89TnQobyksIXQmJmk/IlsiK28rIl0iOm99KS5qb2luKHQ/Ii4iOiIiKTpBfWZ1bmN0aW9uIGtpKGUpe3JldHVybiBjLmlzQXJyYXkoZSkmJiFlLnNvbWUoVmUpfXZhciBiaT1jLnRvRmxhdE9iamVjdChjLHt9LG51bGwsZnVuY3Rpb24oQSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KEEpfSk7ZnVuY3Rpb24gRGkoZSxBLHQpe2lmKCFjLmlzT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO0E9QXx8bmV3KGhlfHxGb3JtRGF0YSksdD1jLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oQixRKXtyZXR1cm4hYy5pc1VuZGVmaW5lZChRW0JdKX0pO2xldCByPXQubWV0YVRva2VucyxvPXQudmlzaXRvcnx8YSxpPXQuZG90cyxzPXQuaW5kZXhlcyxmPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmMuaXNTcGVjQ29tcGxpYW50Rm9ybShBKTtpZighYy5pc0Z1bmN0aW9uKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gcChsKXtpZihsPT09bnVsbClyZXR1cm4iIjtpZihjLmlzRGF0ZShsKSlyZXR1cm4gbC50b0lTT1N0cmluZygpO2lmKCFmJiZjLmlzQmxvYihsKSl0aHJvdyBuZXcgdygiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gYy5pc0FycmF5QnVmZmVyKGwpfHxjLmlzVHlwZWRBcnJheShsKT9mJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbbF0pOkJ1ZmZlci5mcm9tKGwpOmx9ZnVuY3Rpb24gYShsLEIsUSl7bGV0IFI9bDtpZihsJiYhUSYmdHlwZW9mIGw9PSJvYmplY3QiKXtpZihjLmVuZHNXaXRoKEIsInt9IikpQj1yP0I6Qi5zbGljZSgwLC0yKSxsPUpTT04uc3RyaW5naWZ5KGwpO2Vsc2UgaWYoYy5pc0FycmF5KGwpJiZraShsKXx8KGMuaXNGaWxlTGlzdChsKXx8Yy5lbmRzV2l0aChCLCJbXSIpKSYmKFI9Yy50b0FycmF5KGwpKSlyZXR1cm4gQj1OdChCKSxSLmZvckVhY2goZnVuY3Rpb24oUCxRcil7IShjLmlzVW5kZWZpbmVkKFApfHxQPT09bnVsbCkmJkEuYXBwZW5kKHM9PT0hMD9VdChbQl0sUXIsaSk6cz09PW51bGw/QjpCKyJbXSIscChQKSl9KSwhMX1yZXR1cm4gVmUobCk/ITA6KEEuYXBwZW5kKFV0KFEsQixpKSxwKGwpKSwhMSl9bGV0IG49W10sdT1PYmplY3QuYXNzaWduKGJpLHtkZWZhdWx0VmlzaXRvcjphLGNvbnZlcnRWYWx1ZTpwLGlzVmlzaXRhYmxlOlZlfSk7ZnVuY3Rpb24gZyhsLEIpe2lmKCFjLmlzVW5kZWZpbmVkKGwpKXtpZihuLmluZGV4T2YobCkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrQi5qb2luKCIuIikpO24ucHVzaChsKSxjLmZvckVhY2gobCxmdW5jdGlvbihSLE8peyghKGMuaXNVbmRlZmluZWQoUil8fFI9PT1udWxsKSYmby5jYWxsKEEsUixjLmlzU3RyaW5nKE8pP08udHJpbSgpOk8sQix1KSk9PT0hMCYmZyhSLEI/Qi5jb25jYXQoTyk6W09dKX0pLG4ucG9wKCl9fWlmKCFjLmlzT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gZyhlKSxBfXZhciBMPURpO2Z1bmN0aW9uIFN0KGUpe2xldCBBPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBBW3JdfSl9ZnVuY3Rpb24gT3QoZSxBKXt0aGlzLl9wYWlycz1bXSxlJiZMKGUsdGhpcyxBKX12YXIgUHQ9T3QucHJvdG90eXBlO1B0LmFwcGVuZD1mdW5jdGlvbihBLHQpe3RoaXMuX3BhaXJzLnB1c2goW0EsdF0pfTtQdC50b1N0cmluZz1mdW5jdGlvbihBKXtsZXQgdD1BP2Z1bmN0aW9uKHIpe3JldHVybiBBLmNhbGwodGhpcyxyLFN0KX06U3Q7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gdChvWzBdKSsiPSIrdChvWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHdlPU90O2Z1bmN0aW9uIFdpKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIGFlKGUsQSx0KXtpZighQSlyZXR1cm4gZTtsZXQgcj10JiZ0LmVuY29kZXx8V2ksbz10JiZ0LnNlcmlhbGl6ZSxpO2lmKG8/aT1vKEEsdCk6aT1jLmlzVVJMU2VhcmNoUGFyYW1zKEEpP0EudG9TdHJpbmcoKTpuZXcgd2UoQSx0KS50b1N0cmluZyhyKSxpKXtsZXQgcz1lLmluZGV4T2YoIiMiKTtzIT09LTEmJihlPWUuc2xpY2UoMCxzKSksZSs9KGUuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikraX1yZXR1cm4gZX12YXIgWmU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShBLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOkEscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChBKXt0aGlzLmhhbmRsZXJzW0FdJiYodGhpcy5oYW5kbGVyc1tBXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKEEpe2MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZBKHIpfSl9fSxYZT1aZTt2YXIgUmU9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciB4dD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6d2U7dmFyIFR0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgR3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgSnQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6eHQsRm9ybURhdGE6VHQsQmxvYjpHdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciAkZT17fTt3cigkZSx7aGFzQnJvd3NlckVudjooKT0+THQsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5GaSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PlVpfSk7dmFyIEx0PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLEZpPShlPT5MdCYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihlKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLFVpPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgVz17Li4uJGUsLi4uSnR9O2Z1bmN0aW9uIGVBKGUsQSl7cmV0dXJuIEwoZSxuZXcgVy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixvLGkpe3JldHVybiBXLmlzTm9kZSYmYy5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOmkuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sQSkpfWZ1bmN0aW9uIE5pKGUpe3JldHVybiBjLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxlKS5tYXAoQT0+QVswXT09PSJbXSI/IiI6QVsxXXx8QVswXSl9ZnVuY3Rpb24gU2koZSl7bGV0IEE9e30sdD1PYmplY3Qua2V5cyhlKSxyLG89dC5sZW5ndGgsaTtmb3Iocj0wO3I8bztyKyspaT10W3JdLEFbaV09ZVtpXTtyZXR1cm4gQX1mdW5jdGlvbiBPaShlKXtmdW5jdGlvbiBBKHQscixvLGkpe2xldCBzPXRbaSsrXTtpZihzPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IG09TnVtYmVyLmlzRmluaXRlKCtzKSxmPWk+PXQubGVuZ3RoO3JldHVybiBzPSFzJiZjLmlzQXJyYXkobyk/by5sZW5ndGg6cyxmPyhjLmhhc093blByb3AobyxzKT9vW3NdPVtvW3NdLHJdOm9bc109ciwhbSk6KCghb1tzXXx8IWMuaXNPYmplY3Qob1tzXSkpJiYob1tzXT1bXSksQSh0LHIsb1tzXSxpKSYmYy5pc0FycmF5KG9bc10pJiYob1tzXT1TaShvW3NdKSksIW0pfWlmKGMuaXNGb3JtRGF0YShlKSYmYy5pc0Z1bmN0aW9uKGUuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBjLmZvckVhY2hFbnRyeShlLChyLG8pPT57QShOaShyKSxvLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBrZT1PaTtmdW5jdGlvbiBQaShlLEEsdCl7aWYoYy5pc1N0cmluZyhlKSl0cnl7cmV0dXJuKEF8fEpTT04ucGFyc2UpKGUpLGMudHJpbShlKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShlKX12YXIgQUE9e3RyYW5zaXRpb25hbDpSZSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKEEsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixvPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGk9Yy5pc09iamVjdChBKTtpZihpJiZjLmlzSFRNTEZvcm0oQSkmJihBPW5ldyBGb3JtRGF0YShBKSksYy5pc0Zvcm1EYXRhKEEpKXJldHVybiBvP0pTT04uc3RyaW5naWZ5KGtlKEEpKTpBO2lmKGMuaXNBcnJheUJ1ZmZlcihBKXx8Yy5pc0J1ZmZlcihBKXx8Yy5pc1N0cmVhbShBKXx8Yy5pc0ZpbGUoQSl8fGMuaXNCbG9iKEEpKXJldHVybiBBO2lmKGMuaXNBcnJheUJ1ZmZlclZpZXcoQSkpcmV0dXJuIEEuYnVmZmVyO2lmKGMuaXNVUkxTZWFyY2hQYXJhbXMoQSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksQS50b1N0cmluZygpO2xldCBtO2lmKGkpe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIGVBKEEsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigobT1jLmlzRmlsZUxpc3QoQSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGY9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBMKG0/eyJmaWxlc1tdIjpBfTpBLGYmJm5ldyBmLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gaXx8bz8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLFBpKEEpKTpBfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKEEpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxBQS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG89dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoQSYmYy5pc1N0cmluZyhBKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bykpe2xldCBzPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm87dHJ5e3JldHVybiBKU09OLnBhcnNlKEEpfWNhdGNoKG0pe2lmKHMpdGhyb3cgbS5uYW1lPT09IlN5bnRheEVycm9yIj93LmZyb20obSx3LkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOm19fXJldHVybiBBfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpXLmNsYXNzZXMuRm9ybURhdGEsQmxvYjpXLmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oQSl7cmV0dXJuIEE+PTIwMCYmQTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtjLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sZT0+e0FBLmhlYWRlcnNbZV09e319KTt2YXIgVj1BQTt2YXIgeGk9Yy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxNdD1lPT57bGV0IEE9e30sdCxyLG87cmV0dXJuIGUmJmUuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe289cy5pbmRleE9mKCI6IiksdD1zLnN1YnN0cmluZygwLG8pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9cy5zdWJzdHJpbmcobysxKS50cmltKCksISghdHx8QVt0XSYmeGlbdF0pJiYodD09PSJzZXQtY29va2llIj9BW3RdP0FbdF0ucHVzaChyKTpBW3RdPVtyXTpBW3RdPUFbdF0/QVt0XSsiLCAiK3I6cil9KSxBfTt2YXIgSHQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBuZShlKXtyZXR1cm4gZSYmU3RyaW5nKGUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGJlKGUpe3JldHVybiBlPT09ITF8fGU9PW51bGw/ZTpjLmlzQXJyYXkoZSk/ZS5tYXAoYmUpOlN0cmluZyhlKX1mdW5jdGlvbiBUaShlKXtsZXQgQT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoZSk7KUFbclsxXV09clsyXTtyZXR1cm4gQX12YXIgR2k9ZT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChlLnRyaW0oKSk7ZnVuY3Rpb24gdEEoZSxBLHQscixvKXtpZihjLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLEEsdCk7aWYobyYmKEE9dCksISFjLmlzU3RyaW5nKEEpKXtpZihjLmlzU3RyaW5nKHIpKXJldHVybiBBLmluZGV4T2YocikhPT0tMTtpZihjLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoQSl9fWZ1bmN0aW9uIEppKGUpe3JldHVybiBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKEEsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIExpKGUsQSl7bGV0IHQ9Yy50b0NhbWVsQ2FzZSgiICIrQSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG8saSxzKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsQSxvLGkscyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFo9Y2xhc3N7Y29uc3RydWN0b3IoQSl7QSYmdGhpcy5zZXQoQSl9c2V0KEEsdCxyKXtsZXQgbz10aGlzO2Z1bmN0aW9uIGkobSxmLHApe2xldCBhPW5lKGYpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgbj1jLmZpbmRLZXkobyxhKTsoIW58fG9bbl09PT12b2lkIDB8fHA9PT0hMHx8cD09PXZvaWQgMCYmb1tuXSE9PSExKSYmKG9bbnx8Zl09YmUobSkpfWxldCBzPShtLGYpPT5jLmZvckVhY2gobSwocCxhKT0+aShwLGEsZikpO3JldHVybiBjLmlzUGxhaW5PYmplY3QoQSl8fEEgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3MoQSx0KTpjLmlzU3RyaW5nKEEpJiYoQT1BLnRyaW0oKSkmJiFHaShBKT9zKE10KEEpLHQpOkEhPW51bGwmJmkodCxBLHIpLHRoaXN9Z2V0KEEsdCl7aWYoQT1uZShBKSxBKXtsZXQgcj1jLmZpbmRLZXkodGhpcyxBKTtpZihyKXtsZXQgbz10aGlzW3JdO2lmKCF0KXJldHVybiBvO2lmKHQ9PT0hMClyZXR1cm4gVGkobyk7aWYoYy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxvLHIpO2lmKGMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhvKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKEEsdCl7aWYoQT1uZShBKSxBKXtsZXQgcj1jLmZpbmRLZXkodGhpcyxBKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fHRBKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKEEsdCl7bGV0IHI9dGhpcyxvPSExO2Z1bmN0aW9uIGkocyl7aWYocz1uZShzKSxzKXtsZXQgbT1jLmZpbmRLZXkocixzKTttJiYoIXR8fHRBKHIsclttXSxtLHQpKSYmKGRlbGV0ZSByW21dLG89ITApfX1yZXR1cm4gYy5pc0FycmF5KEEpP0EuZm9yRWFjaChpKTppKEEpLG99Y2xlYXIoQSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxvPSExO2Zvcig7ci0tOyl7bGV0IGk9dFtyXTsoIUF8fHRBKHRoaXMsdGhpc1tpXSxpLEEsITApKSYmKGRlbGV0ZSB0aGlzW2ldLG89ITApfXJldHVybiBvfW5vcm1hbGl6ZShBKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIGMuZm9yRWFjaCh0aGlzLChvLGkpPT57bGV0IHM9Yy5maW5kS2V5KHIsaSk7aWYocyl7dFtzXT1iZShvKSxkZWxldGUgdFtpXTtyZXR1cm59bGV0IG09QT9KaShpKTpTdHJpbmcoaSkudHJpbSgpO20hPT1pJiZkZWxldGUgdFtpXSx0W21dPWJlKG8pLHJbbV09ITB9KSx0aGlzfWNvbmNhdCguLi5BKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5BKX10b0pTT04oQSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gYy5mb3JFYWNoKHRoaXMsKHIsbyk9PntyIT1udWxsJiZyIT09ITEmJih0W29dPUEmJmMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtBLHRdKT0+QSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKEEpe3JldHVybiBBIGluc3RhbmNlb2YgdGhpcz9BOm5ldyB0aGlzKEEpfXN0YXRpYyBjb25jYXQoQSwuLi50KXtsZXQgcj1uZXcgdGhpcyhBKTtyZXR1cm4gdC5mb3JFYWNoKG89PnIuc2V0KG8pKSxyfXN0YXRpYyBhY2Nlc3NvcihBKXtsZXQgcj0odGhpc1tIdF09dGhpc1tIdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxvPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIGkocyl7bGV0IG09bmUocyk7clttXXx8KExpKG8scyksclttXT0hMCl9cmV0dXJuIGMuaXNBcnJheShBKT9BLmZvckVhY2goaSk6aShBKSx0aGlzfX07Wi5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7Yy5yZWR1Y2VEZXNjcmlwdG9ycyhaLnByb3RvdHlwZSwoe3ZhbHVlOmV9LEEpPT57bGV0IHQ9QVswXS50b1VwcGVyQ2FzZSgpK0Euc2xpY2UoMSk7cmV0dXJue2dldDooKT0+ZSxzZXQocil7dGhpc1t0XT1yfX19KTtjLmZyZWV6ZU1ldGhvZHMoWik7dmFyIEY9WjtmdW5jdGlvbiBzZShlLEEpe2xldCB0PXRoaXN8fFYscj1BfHx0LG89Ri5mcm9tKHIuaGVhZGVycyksaT1yLmRhdGE7cmV0dXJuIGMuZm9yRWFjaChlLGZ1bmN0aW9uKG0pe2k9bS5jYWxsKHQsaSxvLm5vcm1hbGl6ZSgpLEE/QS5zdGF0dXM6dm9pZCAwKX0pLG8ubm9ybWFsaXplKCksaX1mdW5jdGlvbiBnZShlKXtyZXR1cm4hIShlJiZlLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFl0KGUsQSx0KXt3LmNhbGwodGhpcyxlPz8iY2FuY2VsZWQiLHcuRVJSX0NBTkNFTEVELEEsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1jLmluaGVyaXRzKFl0LHcse19fQ0FOQ0VMX186ITB9KTt2YXIgTT1ZdDtmdW5jdGlvbiByQShlLEEsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/ZSh0KTpBKG5ldyB3KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW3cuRVJSX0JBRF9SRVFVRVNULHcuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIHF0PVcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShlLEEsdCxyLG8saSl7bGV0IHM9W2UrIj0iK2VuY29kZVVSSUNvbXBvbmVudChBKV07Yy5pc051bWJlcih0KSYmcy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksYy5pc1N0cmluZyhyKSYmcy5wdXNoKCJwYXRoPSIrciksYy5pc1N0cmluZyhvKSYmcy5wdXNoKCJkb21haW49IitvKSxpPT09ITAmJnMucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPXMuam9pbigiOyAiKX0scmVhZChlKXtsZXQgQT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiBBP2RlY29kZVVSSUNvbXBvbmVudChBWzNdKTpudWxsfSxyZW1vdmUoZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIGlBKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9ZnVuY3Rpb24gb0EoZSxBKXtyZXR1cm4gQT9lLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitBLnJlcGxhY2UoL15cLysvLCIiKTplfWZ1bmN0aW9uIEllKGUsQSl7cmV0dXJuIGUmJiFpQShBKT9vQShlLEEpOkF9dmFyIEt0PVcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IEE9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG8oaSl7bGV0IHM9aTtyZXR1cm4gQSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixzKSxzPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLHMpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1vKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihzKXtsZXQgbT1jLmlzU3RyaW5nKHMpP28ocyk6cztyZXR1cm4gbS5wcm90b2NvbD09PXIucHJvdG9jb2wmJm0uaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gYUEoZSl7bGV0IEE9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoZSk7cmV0dXJuIEEmJkFbMV18fCIifWZ1bmN0aW9uIE1pKGUsQSl7ZT1lfHwxMDtsZXQgdD1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSksbz0wLGk9MCxzO3JldHVybiBBPUEhPT12b2lkIDA/QToxZTMsZnVuY3Rpb24oZil7bGV0IHA9RGF0ZS5ub3coKSxhPXJbaV07c3x8KHM9cCksdFtvXT1mLHJbb109cDtsZXQgbj1pLHU9MDtmb3IoO24hPT1vOyl1Kz10W24rK10sbj1uJWU7aWYobz0obysxKSVlLG89PT1pJiYoaT0oaSsxKSVlKSxwLXM8QSlyZXR1cm47bGV0IGc9YSYmcC1hO3JldHVybiBnP01hdGgucm91bmQodSoxZTMvZyk6dm9pZCAwfX12YXIganQ9TWk7ZnVuY3Rpb24gdnQoZSxBKXtsZXQgdD0wLHI9anQoNTAsMjUwKTtyZXR1cm4gbz0+e2xldCBpPW8ubG9hZGVkLHM9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLG09aS10LGY9cihtKSxwPWk8PXM7dD1pO2xldCBhPXtsb2FkZWQ6aSx0b3RhbDpzLHByb2dyZXNzOnM/aS9zOnZvaWQgMCxieXRlczptLHJhdGU6Znx8dm9pZCAwLGVzdGltYXRlZDpmJiZzJiZwPyhzLWkpL2Y6dm9pZCAwLGV2ZW50Om99O2FbQT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxlKGEpfX12YXIgSGk9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iix6dD1IaSYmZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG89ZS5kYXRhLGk9Ri5mcm9tKGUuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpzLHdpdGhYU1JGVG9rZW46bX09ZSxmO2Z1bmN0aW9uIHAoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGYpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsZil9bGV0IGE7aWYoYy5pc0Zvcm1EYXRhKG8pKXtpZihXLmhhc1N0YW5kYXJkQnJvd3NlckVudnx8Vy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpaS5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoYT1pLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtCLC4uLlFdPWE/YS5zcGxpdCgiOyIpLm1hcChSPT5SLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO2kuc2V0Q29udGVudFR5cGUoW0J8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5RXS5qb2luKCI7ICIpKX19bGV0IG49bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGUuYXV0aCl7bGV0IEI9ZS5hdXRoLnVzZXJuYW1lfHwiIixRPWUuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5hdXRoLnBhc3N3b3JkKSk6IiI7aS5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoQisiOiIrUSkpfWxldCB1PUllKGUuYmFzZVVSTCxlLnVybCk7bi5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksYWUodSxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxuLnRpbWVvdXQ9ZS50aW1lb3V0O2Z1bmN0aW9uIGcoKXtpZighbilyZXR1cm47bGV0IEI9Ri5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gbiYmbi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksUj17ZGF0YTohc3x8cz09PSJ0ZXh0Inx8cz09PSJqc29uIj9uLnJlc3BvbnNlVGV4dDpuLnJlc3BvbnNlLHN0YXR1czpuLnN0YXR1cyxzdGF0dXNUZXh0Om4uc3RhdHVzVGV4dCxoZWFkZXJzOkIsY29uZmlnOmUscmVxdWVzdDpufTtyQShmdW5jdGlvbihQKXt0KFApLHAoKX0sZnVuY3Rpb24oUCl7cihQKSxwKCl9LFIpLG49bnVsbH1pZigib25sb2FkZW5kImluIG4/bi5vbmxvYWRlbmQ9ZzpuLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFufHxuLnJlYWR5U3RhdGUhPT00fHxuLnN0YXR1cz09PTAmJiEobi5yZXNwb25zZVVSTCYmbi5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoZyl9LG4ub25hYm9ydD1mdW5jdGlvbigpe24mJihyKG5ldyB3KCJSZXF1ZXN0IGFib3J0ZWQiLHcuRUNPTk5BQk9SVEVELGUsbikpLG49bnVsbCl9LG4ub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IHcoIk5ldHdvcmsgRXJyb3IiLHcuRVJSX05FVFdPUkssZSxuKSksbj1udWxsfSxuLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBRPWUudGltZW91dD8idGltZW91dCBvZiAiK2UudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixSPWUudHJhbnNpdGlvbmFsfHxSZTtlLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihRPWUudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgdyhRLFIuY2xhcmlmeVRpbWVvdXRFcnJvcj93LkVUSU1FRE9VVDp3LkVDT05OQUJPUlRFRCxlLG4pKSxuPW51bGx9LFcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobSYmYy5pc0Z1bmN0aW9uKG0pJiYobT1tKGUpKSxtfHxtIT09ITEmJkt0KHUpKSl7bGV0IEI9ZS54c3JmSGVhZGVyTmFtZSYmZS54c3JmQ29va2llTmFtZSYmcXQucmVhZChlLnhzcmZDb29raWVOYW1lKTtCJiZpLnNldChlLnhzcmZIZWFkZXJOYW1lLEIpfW89PT12b2lkIDAmJmkuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gbiYmYy5mb3JFYWNoKGkudG9KU09OKCksZnVuY3Rpb24oUSxSKXtuLnNldFJlcXVlc3RIZWFkZXIoUixRKX0pLGMuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwobi53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscykscyYmcyE9PSJqc29uIiYmKG4ucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSx0eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJm4uYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHZ0KGUub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmbi51cGxvYWQmJm4udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix2dChlLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYoZj1CPT57biYmKHIoIUJ8fEIudHlwZT9uZXcgTShudWxsLGUsbik6Qiksbi5hYm9ydCgpLG49bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGYpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9mKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGYpKSk7bGV0IGw9YUEodSk7aWYobCYmVy5wcm90b2NvbHMuaW5kZXhPZihsKT09PS0xKXtyKG5ldyB3KCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2wrIjoiLHcuRVJSX0JBRF9SRVFVRVNULGUpKTtyZXR1cm59bi5zZW5kKG98fG51bGwpfSl9O3ZhciBuQT17aHR0cDpoZSx4aHI6enR9O2MuZm9yRWFjaChuQSwoZSxBKT0+e2lmKGUpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibmFtZSIse3ZhbHVlOkF9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImFkYXB0ZXJOYW1lIix7dmFsdWU6QX0pfX0pO3ZhciBfdD1lPT5gLSAke2V9YCxZaT1lPT5jLmlzRnVuY3Rpb24oZSl8fGU9PT1udWxsfHxlPT09ITEsRGU9e2dldEFkYXB0ZXI6ZT0+e2U9Yy5pc0FycmF5KGUpP2U6W2VdO2xldHtsZW5ndGg6QX09ZSx0LHIsbz17fTtmb3IobGV0IGk9MDtpPEE7aSsrKXt0PWVbaV07bGV0IHM7aWYocj10LCFZaSh0KSYmKHI9bkFbKHM9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgdyhgVW5rbm93biBhZGFwdGVyICcke3N9J2ApO2lmKHIpYnJlYWs7b1tzfHwiIyIraV09cn1pZighcil7bGV0IGk9T2JqZWN0LmVudHJpZXMobykubWFwKChbbSxmXSk9PmBhZGFwdGVyICR7bX0gYCsoZj09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLHM9QT9pLmxlbmd0aD4xP2BzaW5jZSA6CmAraS5tYXAoX3QpLmpvaW4oYApgKToiICIrX3QoaVswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgdygiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK3MsIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczpuQX07ZnVuY3Rpb24gc0EoZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IE0obnVsbCxlKX1mdW5jdGlvbiBXZShlKXtyZXR1cm4gc0EoZSksZS5oZWFkZXJzPUYuZnJvbShlLmhlYWRlcnMpLGUuZGF0YT1zZS5jYWxsKGUsZS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoZS5tZXRob2QpIT09LTEmJmUuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksRGUuZ2V0QWRhcHRlcihlLmFkYXB0ZXJ8fFYuYWRhcHRlcikoZSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gc0EoZSksci5kYXRhPXNlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz1GLmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gZ2Uocil8fChzQShlKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXNlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz1GLmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIFZ0PWU9PmUgaW5zdGFuY2VvZiBGP3suLi5lfTplO2Z1bmN0aW9uIEcoZSxBKXtBPUF8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIocCxhLG4pe3JldHVybiBjLmlzUGxhaW5PYmplY3QocCkmJmMuaXNQbGFpbk9iamVjdChhKT9jLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOm59LHAsYSk6Yy5pc1BsYWluT2JqZWN0KGEpP2MubWVyZ2Uoe30sYSk6Yy5pc0FycmF5KGEpP2Euc2xpY2UoKTphfWZ1bmN0aW9uIG8ocCxhLG4pe2lmKGMuaXNVbmRlZmluZWQoYSkpe2lmKCFjLmlzVW5kZWZpbmVkKHApKXJldHVybiByKHZvaWQgMCxwLG4pfWVsc2UgcmV0dXJuIHIocCxhLG4pfWZ1bmN0aW9uIGkocCxhKXtpZighYy5pc1VuZGVmaW5lZChhKSlyZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gcyhwLGEpe2lmKGMuaXNVbmRlZmluZWQoYSkpe2lmKCFjLmlzVW5kZWZpbmVkKHApKXJldHVybiByKHZvaWQgMCxwKX1lbHNlIHJldHVybiByKHZvaWQgMCxhKX1mdW5jdGlvbiBtKHAsYSxuKXtpZihuIGluIEEpcmV0dXJuIHIocCxhKTtpZihuIGluIGUpcmV0dXJuIHIodm9pZCAwLHApfWxldCBmPXt1cmw6aSxtZXRob2Q6aSxkYXRhOmksYmFzZVVSTDpzLHRyYW5zZm9ybVJlcXVlc3Q6cyx0cmFuc2Zvcm1SZXNwb25zZTpzLHBhcmFtc1NlcmlhbGl6ZXI6cyx0aW1lb3V0OnMsdGltZW91dE1lc3NhZ2U6cyx3aXRoQ3JlZGVudGlhbHM6cyx3aXRoWFNSRlRva2VuOnMsYWRhcHRlcjpzLHJlc3BvbnNlVHlwZTpzLHhzcmZDb29raWVOYW1lOnMseHNyZkhlYWRlck5hbWU6cyxvblVwbG9hZFByb2dyZXNzOnMsb25Eb3dubG9hZFByb2dyZXNzOnMsZGVjb21wcmVzczpzLG1heENvbnRlbnRMZW5ndGg6cyxtYXhCb2R5TGVuZ3RoOnMsYmVmb3JlUmVkaXJlY3Q6cyx0cmFuc3BvcnQ6cyxodHRwQWdlbnQ6cyxodHRwc0FnZW50OnMsY2FuY2VsVG9rZW46cyxzb2NrZXRQYXRoOnMscmVzcG9uc2VFbmNvZGluZzpzLHZhbGlkYXRlU3RhdHVzOm0saGVhZGVyczoocCxhKT0+byhWdChwKSxWdChhKSwhMCl9O3JldHVybiBjLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxlLEEpKSxmdW5jdGlvbihhKXtsZXQgbj1mW2FdfHxvLHU9bihlW2FdLEFbYV0sYSk7Yy5pc1VuZGVmaW5lZCh1KSYmbiE9PW18fCh0W2FdPXUpfSksdH12YXIgRmU9IjEuNi44Ijt2YXIgZ0E9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChlLEEpPT57Z0FbZV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09ZXx8ImEiKyhBPDE/Im4gIjoiICIpK2V9fSk7dmFyIFp0PXt9O2dBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihBLHQscil7ZnVuY3Rpb24gbyhpLHMpe3JldHVybiJbQXhpb3MgdiIrRmUrIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitpKyInIitzKyhyPyIuICIrcjoiIil9cmV0dXJuKGkscyxtKT0+e2lmKEE9PT0hMSl0aHJvdyBuZXcgdyhvKHMsIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLHcuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhWnRbc10mJihadFtzXT0hMCxjb25zb2xlLndhcm4obyhzLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLEE/QShpLHMsbSk6ITB9fTtmdW5jdGlvbiBxaShlLEEsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyB3KCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iix3LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhlKSxvPXIubGVuZ3RoO2Zvcig7by0tID4wOyl7bGV0IGk9cltvXSxzPUFbaV07aWYocyl7bGV0IG09ZVtpXSxmPW09PT12b2lkIDB8fHMobSxpLGUpO2lmKGYhPT0hMCl0aHJvdyBuZXcgdygib3B0aW9uICIraSsiIG11c3QgYmUgIitmLHcuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgdygiVW5rbm93biBvcHRpb24gIitpLHcuRVJSX0JBRF9PUFRJT04pfX12YXIgVWU9e2Fzc2VydE9wdGlvbnM6cWksdmFsaWRhdG9yczpnQX07dmFyIEg9VWUudmFsaWRhdG9ycyxYPWNsYXNze2NvbnN0cnVjdG9yKEEpe3RoaXMuZGVmYXVsdHM9QSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgWGUscmVzcG9uc2U6bmV3IFhlfX1hc3luYyByZXF1ZXN0KEEsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KEEsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvPXt9KTpvPW5ldyBFcnJvcjtsZXQgaT1vLnN0YWNrP28uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP2kmJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoaS5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmAraSk6ci5zdGFjaz1pfXRocm93IHJ9fV9yZXF1ZXN0KEEsdCl7dHlwZW9mIEE9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPUEpOnQ9QXx8e30sdD1HKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6byxoZWFkZXJzOml9PXQ7ciE9PXZvaWQgMCYmVWUuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkgudHJhbnNpdGlvbmFsKEguYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pfSwhMSksbyE9bnVsbCYmKGMuaXNGdW5jdGlvbihvKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpvfTpVZS5hc3NlcnRPcHRpb25zKG8se2VuY29kZTpILmZ1bmN0aW9uLHNlcmlhbGl6ZTpILmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBzPWkmJmMubWVyZ2UoaS5jb21tb24saVt0Lm1ldGhvZF0pO2kmJmMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxsPT57ZGVsZXRlIGlbbF19KSx0LmhlYWRlcnM9Ri5jb25jYXQocyxpKTtsZXQgbT1bXSxmPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihCKXt0eXBlb2YgQi5ydW5XaGVuPT0iZnVuY3Rpb24iJiZCLnJ1bldoZW4odCk9PT0hMXx8KGY9ZiYmQi5zeW5jaHJvbm91cyxtLnVuc2hpZnQoQi5mdWxmaWxsZWQsQi5yZWplY3RlZCkpfSk7bGV0IHA9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihCKXtwLnB1c2goQi5mdWxmaWxsZWQsQi5yZWplY3RlZCl9KTtsZXQgYSxuPTAsdTtpZighZil7bGV0IGw9W1dlLmJpbmQodGhpcyksdm9pZCAwXTtmb3IobC51bnNoaWZ0LmFwcGx5KGwsbSksbC5wdXNoLmFwcGx5KGwscCksdT1sLmxlbmd0aCxhPVByb21pc2UucmVzb2x2ZSh0KTtuPHU7KWE9YS50aGVuKGxbbisrXSxsW24rK10pO3JldHVybiBhfXU9bS5sZW5ndGg7bGV0IGc9dDtmb3Iobj0wO248dTspe2xldCBsPW1bbisrXSxCPW1bbisrXTt0cnl7Zz1sKGcpfWNhdGNoKFEpe0IuY2FsbCh0aGlzLFEpO2JyZWFrfX10cnl7YT1XZS5jYWxsKHRoaXMsZyl9Y2F0Y2gobCl7cmV0dXJuIFByb21pc2UucmVqZWN0KGwpfWZvcihuPTAsdT1wLmxlbmd0aDtuPHU7KWE9YS50aGVuKHBbbisrXSxwW24rK10pO3JldHVybiBhfWdldFVyaShBKXtBPUcodGhpcy5kZWZhdWx0cyxBKTtsZXQgdD1JZShBLmJhc2VVUkwsQS51cmwpO3JldHVybiBhZSh0LEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplcil9fTtjLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKEEpe1gucHJvdG90eXBlW0FdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChHKHJ8fHt9LHttZXRob2Q6QSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtjLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihBKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihpLHMsbSl7cmV0dXJuIHRoaXMucmVxdWVzdChHKG18fHt9LHttZXRob2Q6QSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOmksZGF0YTpzfSkpfX1YLnByb3RvdHlwZVtBXT10KCksWC5wcm90b3R5cGVbQSsiRm9ybSJdPXQoITApfSk7dmFyIGxlPVg7dmFyIElBPWNsYXNzIGV7Y29uc3RydWN0b3IoQSl7aWYodHlwZW9mIEEhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpKXt0PWl9KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG89PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgaT1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7aS0tID4wOylyLl9saXN0ZW5lcnNbaV0obyk7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1vPT57bGV0IGkscz1uZXcgUHJvbWlzZShtPT57ci5zdWJzY3JpYmUobSksaT1tfSkudGhlbihvKTtyZXR1cm4gcy5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKGkpfSxzfSxBKGZ1bmN0aW9uKGkscyxtKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBNKGkscyxtKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKEEpe2lmKHRoaXMucmVhc29uKXtBKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKEEpOnRoaXMuX2xpc3RlbmVycz1bQV19dW5zdWJzY3JpYmUoQSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoQSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBBO3JldHVybnt0b2tlbjpuZXcgZShmdW5jdGlvbihvKXtBPW99KSxjYW5jZWw6QX19fSxYdD1JQTtmdW5jdGlvbiBsQShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gcEEoZSl7cmV0dXJuIGMuaXNPYmplY3QoZSkmJmUuaXNBeGlvc0Vycm9yPT09ITB9dmFyIG1BPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhtQSkuZm9yRWFjaCgoW2UsQV0pPT57bUFbQV09ZX0pO3ZhciAkdD1tQTtmdW5jdGlvbiBlcihlKXtsZXQgQT1uZXcgbGUoZSksdD1yZShsZS5wcm90b3R5cGUucmVxdWVzdCxBKTtyZXR1cm4gYy5leHRlbmQodCxsZS5wcm90b3R5cGUsQSx7YWxsT3duS2V5czohMH0pLGMuZXh0ZW5kKHQsQSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obyl7cmV0dXJuIGVyKEcoZSxvKSl9LHR9dmFyIGs9ZXIoVik7ay5BeGlvcz1sZTtrLkNhbmNlbGVkRXJyb3I9TTtrLkNhbmNlbFRva2VuPVh0O2suaXNDYW5jZWw9Z2U7ay5WRVJTSU9OPUZlO2sudG9Gb3JtRGF0YT1MO2suQXhpb3NFcnJvcj13O2suQ2FuY2VsPWsuQ2FuY2VsZWRFcnJvcjtrLmFsbD1mdW5jdGlvbihBKXtyZXR1cm4gUHJvbWlzZS5hbGwoQSl9O2suc3ByZWFkPWxBO2suaXNBeGlvc0Vycm9yPXBBO2subWVyZ2VDb25maWc9RztrLkF4aW9zSGVhZGVycz1GO2suZm9ybVRvSlNPTj1lPT5rZShjLmlzSFRNTEZvcm0oZSk/bmV3IEZvcm1EYXRhKGUpOmUpO2suZ2V0QWRhcHRlcj1EZS5nZXRBZGFwdGVyO2suSHR0cFN0YXR1c0NvZGU9JHQ7ay5kZWZhdWx0PWs7dmFyIFQ9azt2YXJ7QXhpb3M6eGcsQXhpb3NFcnJvcjpUZyxDYW5jZWxlZEVycm9yOkdnLGlzQ2FuY2VsOkpnLENhbmNlbFRva2VuOkxnLFZFUlNJT046TWcsYWxsOkhnLENhbmNlbDpZZyxpc0F4aW9zRXJyb3I6cWcsc3ByZWFkOktnLHRvRm9ybURhdGE6amcsQXhpb3NIZWFkZXJzOnZnLEh0dHBTdGF0dXNDb2RlOnpnLGZvcm1Ub0pTT046X2csZ2V0QWRhcHRlcjpWZyxtZXJnZUNvbmZpZzpaZ309VDthc3luYyBmdW5jdGlvbiBLaShlLEEpe2xldCB0PWUscj1udWxsO2lmKHQ9PW51bGwpcj1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG89YXdhaXQgVC5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6QX0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChvLmRhdGEpO3I9bmV3IFdvcmtlcihpLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBwZT1LaTtmdW5jdGlvbiBBcihlKXtsZXQgQT1LZShlKSx0PWU7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PUEsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W3FlXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OkEsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIGppKGUsQSx0KXtsZXQgcjtpZihlIT1udWxsKXtsZXQgaT1lO3JldHVybiBpLndvcmtlclByb3h5IT09dm9pZCAwPyhyPWkud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOml9KTpBcihlKX1sZXQgbz1hd2FpdCBwZShBLHQpO3JldHVybiBBcihvKX12YXIgdHI9amk7YXN5bmMgZnVuY3Rpb24gdmkoZSxBLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgZSE9InN0cmluZyI/cj1lLmhyZWY6ZS5zdGFydHNXaXRoKCJodHRwIik/cj1lOnI9dHlwZW9mIEE8InUiP2Ake0F9LyR7ZX1gOmUsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBvPWAke3J9Lndhc21gLHM9KGF3YWl0IFQuZ2V0KG8se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OnN9KX12YXIgcnI9dmk7dmFyIGlyPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBucj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixvcj1uZXcgVGV4dEVuY29kZXIsYXI9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIHppKGUsQSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1lLmZzX29wZW4oQSx0LmZsYWdzKSxpPWUuZnNfc3RhdChBKS5zaXplLHM9bnVsbDtucj9zPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihpKTpzPW5ldyBBcnJheUJ1ZmZlcihpKTtsZXQgbT1uZXcgVWludDhBcnJheShzKTtyZXR1cm4gZS5mc19yZWFkKHIsbSwwLGksMCksZS5mc19jbG9zZShyKSxtfWZ1bmN0aW9uIHNyKGUsQSx0KXtsZXQgcj1udWxsO25yP3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBvPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IFVpbnQ4QXJyYXkoZS5IRUFQVTguYnVmZmVyLEEsdCk7cmV0dXJuIG8uc2V0KGkpLG99ZnVuY3Rpb24gYihlLEEsdCxyKXtsZXQgbz0wO3JldHVybiBBIT09bnVsbCYmKG89ZS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLEEuYnVmZmVyLmJ5dGVMZW5ndGhdKSxlLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoQS5idWZmZXIpLG8pKSxvfWZ1bmN0aW9uIEsoZSxBLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KEEpLG89ZS5sZW5ndGhCeXRlc1VURjgocikrMSxpPWUuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxvXSk7ZS5zdHJpbmdUb1VURjgocixpLG8pfWZ1bmN0aW9uIFUoZSxBLHQscil7bGV0IG89ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQSx0XSksaT1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxBLHRdKSxzPXNyKGUsbyxpKTtyZXR1cm4gTihyLHMuYnVmZmVyKX1mdW5jdGlvbiBOZShlLEEpe2xldCB0PWUuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsQV0pLHI9ZS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24gX2koZSxBLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKHAsYSl7c3dpdGNoKHAudHlwZSl7Y2FzZSBJLlRleHRTdHJlYW06e2xldCBuPW9yLmVuY29kZShwLmRhdGEuZGF0YSksdT1iKGUsbixhLDApLGc9e3NpemU6bi5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gfTtLKGUsZyxhKTticmVha31jYXNlIEkuSnNvbkNvbXBhdGlibGU6e2xldCBuPW9yLmVuY29kZShKU09OLnN0cmluZ2lmeShwLmRhdGEpKSx1PWIoZSxuLGEsMCksZz17c2l6ZTpuLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWB9O0soZSxnLGEpO2JyZWFrfWNhc2UgSS5CaW5hcnlTdHJlYW06e2xldCBuPXAuZGF0YS5kYXRhLHU9YihlLG4sYSwwKSxnPXtzaXplOm4uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07SyhlLGcsYSk7YnJlYWt9Y2FzZSBJLlRleHRGaWxlOntlLmZzX3dyaXRlRmlsZShwLmRhdGEucGF0aCxwLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBJLkJpbmFyeUZpbGU6e2UuZnNfd3JpdGVGaWxlKHAuZGF0YS5wYXRoLHAuZGF0YS5kYXRhKTticmVha31jYXNlIEkuSW1hZ2U6e2xldCBuPXAuZGF0YSx1PWIoZSxuLmRhdGEsYSwwKSxnPWIoZSxuLmRpcmVjdGlvbixhLDEpLGw9dHlwZW9mIG4ubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20obi5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLEI9e2ltYWdlVHlwZTpuLmltYWdlVHlwZSxuYW1lOm4ubmFtZSxvcmlnaW46bi5vcmlnaW4sc3BhY2luZzpuLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLHNpemU6bi5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbWV0YWRhdGE6bH07SyhlLEIsYSk7YnJlYWt9Y2FzZSBJLk1lc2g6e2xldCBuPXAuZGF0YSx1PWIoZSxuLnBvaW50cyxhLDApLGc9YihlLG4uY2VsbHMsYSwxKSxsPWIoZSxuLnBvaW50RGF0YSxhLDIpLEI9YihlLG4uY2VsbERhdGEsYSwzKSxRPXttZXNoVHlwZTpuLm1lc2hUeXBlLG5hbWU6bi5uYW1lLG51bWJlck9mUG9pbnRzOm4ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mQ2VsbHM6bi5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLGNlbGxCdWZmZXJTaXplOm4uY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpuLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLG51bWJlck9mQ2VsbFBpeGVsczpuLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07SyhlLFEsYSk7YnJlYWt9Y2FzZSBJLlBvaW50U2V0OntsZXQgbj1wLmRhdGEsdT1iKGUsbi5wb2ludHMsYSwwKSxnPWIoZSxuLnBvaW50RGF0YSxhLDEpLGw9e3BvaW50U2V0VHlwZTpuLnBvaW50U2V0VHlwZSxuYW1lOm4ubmFtZSxudW1iZXJPZlBvaW50czpuLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOm4ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtnfWB9O0soZSxsLGEpO2JyZWFrfWNhc2UgSS5Qb2x5RGF0YTp7bGV0IG49cC5kYXRhLHU9YihlLG4ucG9pbnRzLGEsMCksZz1iKGUsbi52ZXJ0aWNlcyxhLDEpLGw9YihlLG4ubGluZXMsYSwyKSxCPWIoZSxuLnBvbHlnb25zLGEsMyksUT1iKGUsbi50cmlhbmdsZVN0cmlwcyxhLDQpLFI9YihlLG4ucG9pbnREYXRhLGEsNSksTz1iKGUsbi5wb2ludERhdGEsYSw2KSxQPXtwb2x5RGF0YVR5cGU6bi5wb2x5RGF0YVR5cGUsbmFtZTpuLm5hbWUsbnVtYmVyT2ZQb2ludHM6bi5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsdmVydGljZXNCdWZmZXJTaXplOm4udmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLGxpbmVzQnVmZmVyU2l6ZTpuLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxwb2x5Z29uc0J1ZmZlclNpemU6bi5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOm4udHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG51bWJlck9mUG9pbnRQaXhlbHM6bi5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YCxudW1iZXJPZkNlbGxQaXhlbHM6bi5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtPfWB9O0soZSxQLGEpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxlLnJlc2V0TW9kdWxlU3Rkb3V0KCksZS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBvPWUuc3RhY2tTYXZlKCksaT0wO3RyeXtpPWUuY2FsbE1haW4oQS5zbGljZSgpKX1jYXRjaChwKXt0aHJvdyB0eXBlb2YgcD09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLGUuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLGUuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBlLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLGUuZ2V0RXhjZXB0aW9uTWVzc2FnZShwKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxwfWZpbmFsbHl7ZS5zdGFja1Jlc3RvcmUobyl9bGV0IHM9ZS5nZXRNb2R1bGVTdGRvdXQoKSxtPWUuZ2V0TW9kdWxlU3RkZXJyKCksZj1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmaT09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihwLGEpe2xldCBuPW51bGw7c3dpdGNoKHAudHlwZSl7Y2FzZSBJLlRleHRTdHJlYW06e2xldCBnPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLGw9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQj1uZXcgVWludDhBcnJheShlLkhFQVBVOC5idWZmZXIsZyxsKTtuPXtkYXRhOmFyLmRlY29kZShCKX07YnJlYWt9Y2FzZSBJLkpzb25Db21wYXRpYmxlOntsZXQgZz1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxsPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEI9bmV3IFVpbnQ4QXJyYXkoZS5IRUFQVTguYnVmZmVyLGcsbCk7bj1KU09OLnBhcnNlKGFyLmRlY29kZShCKSk7YnJlYWt9Y2FzZSBJLkJpbmFyeVN0cmVhbTp7bGV0IGc9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksbD1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKTtuPXtkYXRhOnNyKGUsZyxsKX07YnJlYWt9Y2FzZSBJLlRleHRGaWxlOntuPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6ZS5mc19yZWFkRmlsZShwLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgSS5CaW5hcnlGaWxlOntuPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6emkoZSxwLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgSS5JbWFnZTp7bGV0IGc9TmUoZSxhKTtnLmRhdGE9VShlLGEsMCxnLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxnLmRpcmVjdGlvbj1VKGUsYSwxLEQuRmxvYXQ2NCksZy5tZXRhZGF0YT1uZXcgTWFwKGcubWV0YWRhdGEpLG49ZzticmVha31jYXNlIEkuTWVzaDp7bGV0IGc9TmUoZSxhKTtnLm51bWJlck9mUG9pbnRzPjA/Zy5wb2ludHM9VShlLGEsMCxnLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Zy5wb2ludHM9TihnLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZDZWxscz4wP2cuY2VsbHM9VShlLGEsMSxnLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpnLmNlbGxzPU4oZy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZQb2ludFBpeGVscz4wP2cucG9pbnREYXRhPVUoZSxhLDIsZy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9TihnLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZkNlbGxQaXhlbHM+MD9nLmNlbGxEYXRhPVUoZSxhLDMsZy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpnLmNlbGxEYXRhPU4oZy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbj1nO2JyZWFrfWNhc2UgSS5Qb2ludFNldDp7bGV0IGc9TmUoZSxhKTtnLm51bWJlck9mUG9pbnRzPjA/Zy5wb2ludHM9VShlLGEsMCxnLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmcucG9pbnRzPU4oZy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Zy5wb2ludERhdGE9VShlLGEsMSxnLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9TihnLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG49ZzticmVha31jYXNlIEkuUG9seURhdGE6e2xldCBnPU5lKGUsYSk7Zy5udW1iZXJPZlBvaW50cz4wP2cucG9pbnRzPVUoZSxhLDAsRC5GbG9hdDMyKTpnLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGcudmVydGljZXNCdWZmZXJTaXplPjA/Zy52ZXJ0aWNlcz1VKGUsYSwxLGguVUludDMyKTpnLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxnLmxpbmVzQnVmZmVyU2l6ZT4wP2cubGluZXM9VShlLGEsMixoLlVJbnQzMik6Zy5saW5lcz1uZXcgVWludDMyQXJyYXksZy5wb2x5Z29uc0J1ZmZlclNpemU+MD9nLnBvbHlnb25zPVUoZSxhLDMsaC5VSW50MzIpOmcucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGcudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/Zy50cmlhbmdsZVN0cmlwcz1VKGUsYSw0LGguVUludDMyKTpnLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxnLm51bWJlck9mUG9pbnRQaXhlbHM+MD9nLnBvaW50RGF0YT1VKGUsYSw1LGcucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpnLnBvaW50RGF0YT1OKGcucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZkNlbGxQaXhlbHM+MD9nLmNlbGxEYXRhPVUoZSxhLDYsZy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5jZWxsRGF0YT1OKGcucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuPWc7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgdT17dHlwZTpwLnR5cGUsZGF0YTpufTtmLnB1c2godSl9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6cyxzdGRlcnI6bSxvdXRwdXRzOmZ9fXZhciBncj1faTt2YXIgVmk9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFppKGUsQSl7aWYoZT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89WGkoZVtyXSxBKTtvIT09bnVsbCYmdC5wdXNoKG8pfXJldHVybiB0fWZ1bmN0aW9uIFhpKGUsQSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBlLmJ1ZmZlciE9PXZvaWQgMD90PWUuYnVmZmVyOmUuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9ZSksVmkmJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOkE/dDp0LnNsaWNlKDApfXZhciBJcj1aaTtmdW5jdGlvbiAkaShlKXtyZXR1cm5bZS5kYXRhLGUuZGlyZWN0aW9uXX12YXIgbHI9JGk7ZnVuY3Rpb24gZW8oZSl7cmV0dXJuW2UucG9pbnRzLGUucG9pbnREYXRhLGUuY2VsbHMsZS5jZWxsRGF0YV19dmFyIHByPWVvO2Z1bmN0aW9uIEFvKGUpe3JldHVybltlLnBvaW50cyxlLnZlcnRpY2VzLGUubGluZXMsZS5wb2x5Z29ucyxlLnRyaWFuZ2xlU3RyaXBzLGUucG9pbnREYXRhLGUuY2VsbERhdGFdfXZhciBtcj1Bbzt2YXIgdG87ZnVuY3Rpb24gU2UoKXtyZXR1cm4gdG99dmFyIHJvO2Z1bmN0aW9uIHVyKCl7cmV0dXJuIHJvfXZhciBpbztmdW5jdGlvbiBPZSgpe3JldHVybiBpb312YXIgdUE9bmV3IE1hcDtmdW5jdGlvbiBvbygpe2xldCBlPU9lKCk7cmV0dXJuIHR5cGVvZiBlPiJ1IiYmKGU9bnVsbCksZX1mdW5jdGlvbiBmcigpe2xldCBlPVNlKCk7cmV0dXJuIHR5cGVvZiBlPiJ1IiYmKGU9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxlfWZ1bmN0aW9uIFBlKCl7bGV0IGU9dXIoKTtyZXR1cm4gdHlwZW9mIGU+InUiJiYoZT17fSksZX1hc3luYyBmdW5jdGlvbiBhbyhlLEEsdCl7bGV0IHI9ZSxvPWU7aWYodHlwZW9mIGUhPSJzdHJpbmciJiYocj1uZXcgVVJMKGUuaHJlZiksbz1yLmhyZWYpLHVBLmhhcyhvKSlyZXR1cm4gdUEuZ2V0KG8pO3tsZXQgaT1hd2FpdCBycihlLEE/LnRvU3RyaW5nKCk/P2ZyKCksdD8/UGUoKSk7cmV0dXJuIHVBLnNldChvLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIG5vKGUsQSx0LHIsbyl7aWYoIWF3YWl0IGlyKCkpe2xldCBRPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChRKSxuZXcgRXJyb3IoUSl9bGV0IGk9bz8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IFE9YXdhaXQgYW8oZS50b1N0cmluZygpLG8/LnBpcGVsaW5lQmFzZVVybCxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9QZSgpKTtyZXR1cm4gZ3IoUSxBLHQscil9bGV0IHM9aSxtPW8/LnBpcGVsaW5lV29ya2VyVXJsPz9vbygpLGY9dHlwZW9mIG0hPSJzdHJpbmciJiZ0eXBlb2YgbT8uaHJlZjwidSI/bS5ocmVmOm0se3dvcmtlclByb3h5OnAsd29ya2VyOmF9PWF3YWl0IHRyKHMsZixvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9QZSgpKTtzPWE7bGV0IG49W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKFEudHlwZT09PUkuQmluYXJ5U3RyZWFtKXtsZXQgUj1RLmRhdGEuZGF0YTtuLnB1c2goUil9ZWxzZSBpZihRLnR5cGU9PT1JLkJpbmFyeUZpbGUpe2xldCBSPVEuZGF0YS5kYXRhO24ucHVzaChSKX1lbHNlIGlmKFEudHlwZT09PUkuSW1hZ2Upe2xldCBSPVEuZGF0YTtSLmRhdGEhPT1udWxsJiZuLnB1c2goLi4ubHIoUikpfWVsc2UgaWYoUS50eXBlPT09SS5NZXNoKXtsZXQgUj1RLmRhdGE7bi5wdXNoKC4uLnByKFIpKX1lbHNlIGlmKFEudHlwZT09PUkuUG9seURhdGEpe2xldCBSPVEuZGF0YTtuLnB1c2goLi4ubXIoUikpfX0pO2xldCB1PW8/LnBpcGVsaW5lQmFzZVVybD8/ZnIoKSxnPXR5cGVvZiB1IT0ic3RyaW5nIiYmdHlwZW9mIHU/LmhyZWY8InUiP3UuaHJlZjp1LGw9ciE9bnVsbD9qZShyLElyKG4sbz8ubm9Db3B5KSk6bnVsbCxCPWF3YWl0IHAucnVuUGlwZWxpbmUoZS50b1N0cmluZygpLGcsQSx0LGwsbz8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/UGUoKSk7cmV0dXJue3JldHVyblZhbHVlOkIucmV0dXJuVmFsdWUsc3Rkb3V0OkIuc3Rkb3V0LHN0ZGVycjpCLnN0ZGVycixvdXRwdXRzOkIub3V0cHV0cyx3ZWJXb3JrZXI6c319dmFyIEM9bm87dmFyIHNvPW51bGw7ZnVuY3Rpb24gY3IoKXtyZXR1cm4gc299dmFyIGdvPSIxLjMuMCIsQnI9Z287dmFyIGZBLElvPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9pbWFnZS1pb0Ake0JyfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gSEkoZSl7ZkE9ZX1mdW5jdGlvbiBFKCl7aWYodHlwZW9mIGZBPCJ1IilyZXR1cm4gZkE7bGV0IGU9U2UoKTtyZXR1cm4gdHlwZW9mIGU8InUiP2U6SW99dmFyIGNBLGxvPW51bGw7ZnVuY3Rpb24gZHIoZSl7Y0E9ZX1mdW5jdGlvbiBkKCl7aWYodHlwZW9mIGNBPCJ1IilyZXR1cm4gY0E7bGV0IGU9T2UoKTtyZXR1cm4gdHlwZW9mIGU8InUiP2U6bG99dmFyICQ9bnVsbDthc3luYyBmdW5jdGlvbiBDcigpe2xldCBlPWQoKSxBPXR5cGVvZiBlIT0ic3RyaW5nIiYmdHlwZW9mIGU/LmhyZWY8InUiP2UuaHJlZjplOyQ9YXdhaXQgcGUoQSl9ZnVuY3Rpb24gX0koZSl7JD1lfWFzeW5jIGZ1bmN0aW9uIHkoKXtpZigkIT09bnVsbClyZXR1cm4gJC50ZXJtaW5hdGVkJiZhd2FpdCBDcigpLCQ7bGV0IGU9Y3IoKTtyZXR1cm4gZSE9PW51bGw/ZTooYXdhaXQgQ3IoKSwkKX1hc3luYyBmdW5jdGlvbiBwbyhlKXtsZXQgdD0oYXdhaXQgVC5nZXQoYCR7ZX0vaW5kZXguanNvbmAse3Jlc3BvbnNlVHlwZToianNvbiJ9KSkuZGF0YSxyPWF3YWl0IFQuZ2V0KGAke2V9L2RhdGEvZGF0YS5yYXdgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIn0pO3QuZGF0YT1OKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUsci5kYXRhKTtsZXQgbz1hd2FpdCBULmdldChgJHtlfS9kYXRhL2RpcmVjdGlvbi5yYXdgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIn0pO3JldHVybiB0LmRpcmVjdGlvbj1OKEQuRmxvYXQ2NCxvLmRhdGEpLHR9dmFyIG1vPXBvO3ZhciB1bz1uZXcgTWFwKFtbImltYWdlL2pwZWciLCJqcGVnIl0sWyJpbWFnZS9wbmciLCJwbmciXSxbImltYWdlL3RpZmYiLCJ0aWZmIl0sWyJpbWFnZS94LW1zLWJtcCIsImJtcCJdLFsiaW1hZ2UveC1ibXAiLCJibXAiXSxbImltYWdlL2JtcCIsImJtcCJdLFsiYXBwbGljYXRpb24vZGljb20iLCJnZGNtIl1dKSxlZT11bzthc3luYyBmdW5jdGlvbiBmbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJwbmctcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgQkE9Zm87YXN5bmMgZnVuY3Rpb24gY28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJwbmctd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgZEE9Y287YXN5bmMgZnVuY3Rpb24gQm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibWV0YS1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBDQT1Cbzthc3luYyBmdW5jdGlvbiBDbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Im1ldGEtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgRUE9Q287YXN5bmMgZnVuY3Rpb24gRW8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0idGlmZi1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciB5QT1Fbzthc3luYyBmdW5jdGlvbiB5byhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9InRpZmYtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgUUE9eW87YXN5bmMgZnVuY3Rpb24gUW8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibmlmdGktcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgaEE9UW87YXN5bmMgZnVuY3Rpb24gaG8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJuaWZ0aS13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciB3QT1obzthc3luYyBmdW5jdGlvbiB3byhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJqcGVnLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFJBPXdvO2FzeW5jIGZ1bmN0aW9uIFJvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ianBlZy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBrQT1Sbzthc3luYyBmdW5jdGlvbiBrbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJucnJkLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIGJBPWtvO2FzeW5jIGZ1bmN0aW9uIGJvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ibnJyZC13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBEQT1ibzthc3luYyBmdW5jdGlvbiBEbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJ2dGstcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgV0E9RG87YXN5bmMgZnVuY3Rpb24gV28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJ2dGstd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgRkE9V287YXN5bmMgZnVuY3Rpb24gRm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iYm1wLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFVBPUZvO2FzeW5jIGZ1bmN0aW9uIFVvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iYm1wLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIE5BPVVvO2FzeW5jIGZ1bmN0aW9uIE5vKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImhkZjUtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgU0E9Tm87YXN5bmMgZnVuY3Rpb24gU28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJoZGY1LXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIE9BPVNvO2FzeW5jIGZ1bmN0aW9uIE9vKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Im1pbmMtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgUEE9T287YXN5bmMgZnVuY3Rpb24gUG8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJtaW5jLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIHhBPVBvO2FzeW5jIGZ1bmN0aW9uIHhvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Im1yYy1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBUQT14bzthc3luYyBmdW5jdGlvbiBUbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Im1yYy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBHQT1Ubzthc3luYyBmdW5jdGlvbiBHbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJsc20tcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgSkE9R287YXN5bmMgZnVuY3Rpb24gSm8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJsc20td3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgTEE9Sm87YXN5bmMgZnVuY3Rpb24gTG8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibWdoLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIE1BPUxvO2FzeW5jIGZ1bmN0aW9uIE1vKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ibWdoLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIEhBPU1vO2FzeW5jIGZ1bmN0aW9uIEhvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImJpby1yYWQtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgWUE9SG87YXN5bmMgZnVuY3Rpb24gWW8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJiaW8tcmFkLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIHFBPVlvO2FzeW5jIGZ1bmN0aW9uIHFvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdpcGwtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgS0E9cW87YXN5bmMgZnVuY3Rpb24gS28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnaXBsLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGpBPUtvO2FzeW5jIGZ1bmN0aW9uIGpvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdlLWFkdy1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciB2QT1qbzthc3luYyBmdW5jdGlvbiB2byhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImdlLWFkdy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciB6QT12bzthc3luYyBmdW5jdGlvbiB6byhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJnZTQtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgX0E9em87YXN5bmMgZnVuY3Rpb24gX28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnZTQtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgVkE9X287YXN5bmMgZnVuY3Rpb24gVm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iZ2U1LXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFpBPVZvO2FzeW5jIGZ1bmN0aW9uIFpvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iZ2U1LXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIFhBPVpvO2FzeW5jIGZ1bmN0aW9uIFhvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdkY20tcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgJEE9WG87YXN5bmMgZnVuY3Rpb24gJG8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnZGNtLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGV0PSRvO2FzeW5jIGZ1bmN0aW9uIGVhKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9InNjYW5jby1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBBdD1lYTthc3luYyBmdW5jdGlvbiBBYShlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9InNjYW5jby13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciB0dD1BYTthc3luYyBmdW5jdGlvbiB0YShlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJmZGYtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgcnQ9dGE7YXN5bmMgZnVuY3Rpb24gcmEoZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0id2FzbS1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBpdD1yYTthc3luYyBmdW5jdGlvbiBpYShlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Indhc20td3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgb3Q9aWE7YXN5bmMgZnVuY3Rpb24gb2EoZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0id2FzbS16c3RkLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIGF0PW9hO2FzeW5jIGZ1bmN0aW9uIGFhKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0id2FzbS16c3RkLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIG50PWFhO3ZhciBuYT1uZXcgTWFwKFtbInBuZyIsW0JBLGRBXV0sWyJtZXRhIixbQ0EsRUFdXSxbInRpZmYiLFt5QSxRQV1dLFsibmlmdGkiLFtoQSx3QV1dLFsianBlZyIsW1JBLGtBXV0sWyJucnJkIixbYkEsREFdXSxbInZ0ayIsW1dBLEZBXV0sWyJibXAiLFtVQSxOQV1dLFsiaGRmNSIsW1NBLE9BXV0sWyJtbmMiLFtQQSx4QV1dLFsibXJjIixbVEEsR0FdXSxbImxzbSIsW0pBLExBXV0sWyJtZ2giLFtNQSxIQV1dLFsiYmlvUmFkIixbWUEscUFdXSxbImdpcGwiLFtLQSxqQV1dLFsiZ2VBZHciLFt2QSx6QV1dLFsiZ2U0IixbX0EsVkFdXSxbImdlNSIsW1pBLFhBXV0sWyJnZGNtIixbJEEsZXRdXSxbInNjYW5jbyIsW0F0LHR0XV0sWyJmZGYiLFtydCxudWxsXV0sWyJ3YXNtIixbaXQsb3RdXSxbIndhc21ac3RkIixbYXQsbnRdXV0pLEFlPW5hO2FzeW5jIGZ1bmN0aW9uIHNhKGUsQT17fSl7bGV0IHQ9ZS50eXBlPz8iIixyPWUubmFtZT8/ZS5wYXRoPz8iZmlsZU5hbWUiLG89dGUocikudG9Mb3dlckNhc2UoKSxpPUE/LndlYldvcmtlcixzPWU7aWYoZSBpbnN0YW5jZW9mIEJsb2Ipe2xldCBnPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtzPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGcpfX1sZXQgbT1udWxsO2lmKHQmJmVlLmhhcyh0KSltPWVlLmdldCh0KTtlbHNlIGlmKFkuaGFzKG8pKW09WS5nZXQobyk7ZWxzZSBmb3IobGV0IGcgb2YgQWUudmFsdWVzKCkpaWYoZ1swXSE9PW51bGwpe2xldHt3ZWJXb3JrZXI6bCxjb3VsZFJlYWQ6QixpbWFnZTpRfT1hd2FpdCBnWzBdKHtwYXRoOnMucGF0aCxkYXRhOnMuZGF0YS5zbGljZSgpfSx7d2ViV29ya2VyOmksaW5mb3JtYXRpb25Pbmx5OkE/LmluZm9ybWF0aW9uT25seSxub0NvcHk6QT8ubm9Db3B5fSk7aWYoaT1sLEIpcmV0dXJuIHR5cGVvZiBBPCJ1IiYmKFE9SihRLEEpKSx7d2ViV29ya2VyOmksaW1hZ2U6UX19aWYoIW0pdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIElPIGZvcjogIityKTtsZXQgcD1BZS5nZXQobSlbMF0se3dlYldvcmtlcjphLGNvdWxkUmVhZDpuLGltYWdlOnV9PWF3YWl0IHAocyx7d2ViV29ya2VyOmksaW5mb3JtYXRpb25Pbmx5OkE/LmluZm9ybWF0aW9uT25seSxub0NvcHk6QT8ubm9Db3B5fSk7aWYoaT1hLCFuKXRocm93IEVycm9yKCJDb3VsZCBub3QgcmVhZDogIityKTtyZXR1cm4gdHlwZW9mIEE8InUiJiYodT1KKHUsQSkpLHt3ZWJXb3JrZXI6aSxpbWFnZTp1fX12YXIgc3Q9c2E7dmFyIGdhPXR5cGVvZiBnbG9iYWxUaGlzLm5hdmlnYXRvcj8uaGFyZHdhcmVDb25jdXJyZW5jeT09Im51bWJlciI/Z2xvYmFsVGhpcy5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTo2LEVyPW5ldyBNZShnYSxzdCk7YXN5bmMgZnVuY3Rpb24gSWEoZSxBPXt9KXtsZXQgdD0xLHI9MCxvPSExO3R5cGVvZiBBPT0ib2JqZWN0IiYmKHR5cGVvZiBBLnpTcGFjaW5nPCJ1IiYmKHQ9QS56U3BhY2luZyksdHlwZW9mIEEuek9yaWdpbjwidSImJihyPUEuek9yaWdpbiksdHlwZW9mIEEuc29ydGVkU2VyaWVzPCJ1IiYmKG89QS5zb3J0ZWRTZXJpZXMpKTtsZXQgaT1BcnJheS5mcm9tKGUsYXN5bmMgZnVuY3Rpb24obil7aWYobiBpbnN0YW5jZW9mIEZpbGUpe2xldCB1PWF3YWl0IG4uYXJyYXlCdWZmZXIoKTtyZXR1cm57cGF0aDpuLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19cmV0dXJuIG59KSxzPWF3YWl0IFByb21pc2UuYWxsKGkpO298fHMuc29ydCgobix1KT0+bi5wYXRoPHUucGF0aD8tMTpuLnBhdGg+dS5wYXRoPzE6MCk7bGV0IG09W107Zm9yKGxldCBuPTA7bjxzLmxlbmd0aDtuKyspbS5wdXNoKFtzW25dLHt9XSk7bGV0IHA9KGF3YWl0IEVyLnJ1blRhc2tzKG0pLnByb21pc2UpLm1hcChuPT57bGV0IHU9bi5pbWFnZTtyZXR1cm4gdS5pbWFnZVR5cGUuZGltZW5zaW9uPTMsdS5zaXplLnB1c2goMSksdS5zcGFjaW5nLnB1c2godCksdS5vcmlnaW4ucHVzaChyKSx1LmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KDkpLHUuZGlyZWN0aW9uLmZpbGwoMCksdS5kaXJlY3Rpb25bMF09MSx1LmRpcmVjdGlvbls0XT0xLHUuZGlyZWN0aW9uWzhdPTEsdX0pLGE9SmUocCk7cmV0dXJuIHR5cGVvZiBBPT0ib2JqZWN0IiYmKHR5cGVvZiBBLmNvbXBvbmVudFR5cGU8InUifHx0eXBlb2YgQS5waXhlbFR5cGU8InUiKSYmKGE9SihhLEEpKSx7aW1hZ2U6YSx3ZWJXb3JrZXJQb29sOkVyfX12YXIgbGE9SWE7YXN5bmMgZnVuY3Rpb24gcGEoZSxBLHQ9e30pe2xldCByPWU7KHR5cGVvZiB0LmNvbXBvbmVudFR5cGU8InUifHx0eXBlb2YgdC5waXhlbFR5cGU8InUiKSYmKHI9SihlLHQpKTtsZXQgbz10Lm1pbWVUeXBlLGk9dGUoQSkudG9Mb3dlckNhc2UoKSxzPXQud2ViV29ya2VyLG09bnVsbDtpZih0eXBlb2YgbzwidSImJmVlLmhhcyhvKSltPWVlLmdldChvKTtlbHNlIGlmKFkuaGFzKGkpKW09WS5nZXQoaSk7ZWxzZSBmb3IobGV0IGwgb2YgQWUudmFsdWVzKCkpaWYobFsxXSE9PW51bGwpe2xldHt3ZWJXb3JrZXI6Qixjb3VsZFdyaXRlOlEsc2VyaWFsaXplZEltYWdlOlJ9PWF3YWl0IGxbMV0oR2UociksQSx0KTtpZihzPUIsUSlyZXR1cm57d2ViV29ya2VyOnMsc2VyaWFsaXplZEltYWdlOlJ9fWlmKCFtKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIrQSk7bGV0IHA9QWUuZ2V0KG0pWzFdLHt3ZWJXb3JrZXI6YSxjb3VsZFdyaXRlOm4sc2VyaWFsaXplZEltYWdlOnV9PWF3YWl0IHAocixBLHQpO2lmKHM9YSwhbil0aHJvdyBFcnJvcigiQ291bGQgbm90IHdyaXRlOiAiK0EpO3JldHVybnt3ZWJXb3JrZXI6cyxzZXJpYWxpemVkSW1hZ2U6dX19dmFyIG1hPXBhO2FzeW5jIGZ1bmN0aW9uIHVhKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iZmRmLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGZhPXVhO3ZhciB5cj0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgSUk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBlST0oQSx0KT0+e2Zvcih2YXIgSSBpbiB0KUlJKEEsSSx7Z2V0OnRbSV0sZW51bWVyYWJsZTohMH0pfTt2YXIgdkE9U3ltYm9sKCJDb21saW5rLnByb3h5IiksZ0k9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50Iiksckk9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLHBBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxlQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksJEE9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsb0k9e2NhbkhhbmRsZTpBPT4kQShBKSYmQVt2QV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTp0LHBvcnQyOkl9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gaUEoQSx0KSxbSSxbSV1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLG5JKEEpfX0saUk9e2NhbkhhbmRsZTpBPT4kQShBKSYmZUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgdDtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOkF9LFt0LFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LEF0PW5ldyBNYXAoW1sicHJveHkiLG9JXSxbInRocm93IixpSV1dKTtmdW5jdGlvbiBDSShBLHQpe2ZvcihsZXQgSSBvZiBBKWlmKHQ9PT1JfHxJPT09IioifHxJIGluc3RhbmNlb2YgUmVnRXhwJiZJLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaUEoQSx0PWdsb2JhbFRoaXMsST1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBlKGcpe2lmKCFnfHwhZy5kYXRhKXJldHVybjtpZighQ0koSSxnLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke2cub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpyLHR5cGU6byxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGcuZGF0YSksYT0oZy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChiKSxRO3RyeXtsZXQgQj1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixzKT0+ZltzXSxBKSxpPW4ucmVkdWNlKChmLHMpPT5mW3NdLEEpO3N3aXRjaChvKXtjYXNlIkdFVCI6UT1pO2JyZWFrO2Nhc2UiU0VUIjpCW24uc2xpY2UoLTEpWzBdXT1iKGcuZGF0YS52YWx1ZSksUT0hMDticmVhaztjYXNlIkFQUExZIjpRPWkuYXBwbHkoQixhKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBpKC4uLmEpO1E9YUkoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOnN9PW5ldyBNZXNzYWdlQ2hhbm5lbDtpQShBLHMpLFE9RkEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6UT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEIpe1E9e3ZhbHVlOkIsW2VBXTowfX1Qcm9taXNlLnJlc29sdmUoUSkuY2F0Y2goQj0+KHt2YWx1ZTpCLFtlQV06MH0pKS50aGVuKEI9PntsZXRbaSxmXT1vQShCKTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpLG89PT0iUkVMRUFTRSImJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGUpLHR0KHQpLHBBIGluIEEmJnR5cGVvZiBBW3BBXT09ImZ1bmN0aW9uIiYmQVtwQV0oKSl9KS5jYXRjaChCPT57bGV0W2ksZl09b0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtlQV06MH0pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZil9KX0pLHQuc3RhcnQmJnQuc3RhcnQoKX1mdW5jdGlvbiBCSShBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiB0dChBKXtCSShBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIG5JKEEsdCl7cmV0dXJuIFNBKEEsW10sdCl9ZnVuY3Rpb24gSUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIEl0KEEpe3JldHVybiBxKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3R0KEEpfSl9dmFyIGdBPW5ldyBXZWFrTWFwLHJBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCB0PShnQS5nZXQoQSl8fDApLTE7Z0Euc2V0KEEsdCksdD09PTAmJkl0KEEpfSk7ZnVuY3Rpb24gc0koQSx0KXtsZXQgST0oZ0EuZ2V0KHQpfHwwKSsxO2dBLnNldCh0LEkpLHJBJiZyQS5yZWdpc3RlcihBLHQsQSl9ZnVuY3Rpb24gUUkoQSl7ckEmJnJBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gU0EoQSx0PVtdLEk9ZnVuY3Rpb24oKXt9KXtsZXQgZT0hMSxnPW5ldyBQcm94eShJLHtnZXQocixvKXtpZihJQShlKSxvPT09ckkpcmV0dXJuKCk9PntRSShnKSxJdChBKSxlPSEwfTtpZihvPT09InRoZW4iKXtpZih0Lmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pmd9O2xldCBuPXEoQSx7dHlwZToiR0VUIixwYXRoOnQubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKGIpO3JldHVybiBuLnRoZW4uYmluZChuKX1yZXR1cm4gU0EoQSxbLi4udCxvXSl9LHNldChyLG8sbil7SUEoZSk7bGV0W2EsUV09b0Eobik7cmV0dXJuIHEoQSx7dHlwZToiU0VUIixwYXRoOlsuLi50LG9dLm1hcChCPT5CLnRvU3RyaW5nKCkpLHZhbHVlOmF9LFEpLnRoZW4oYil9LGFwcGx5KHIsbyxuKXtJQShlKTtsZXQgYT10W3QubGVuZ3RoLTFdO2lmKGE9PT1nSSlyZXR1cm4gcShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKGIpO2lmKGE9PT0iYmluZCIpcmV0dXJuIFNBKEEsdC5zbGljZSgwLC0xKSk7bGV0W1EsQl09X0Eobik7cmV0dXJuIHEoQSx7dHlwZToiQVBQTFkiLHBhdGg6dC5tYXAoaT0+aS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6UX0sQikudGhlbihiKX0sY29uc3RydWN0KHIsbyl7SUEoZSk7bGV0W24sYV09X0Eobyk7cmV0dXJuIHEoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOnQubWFwKFE9PlEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Om59LGEpLnRoZW4oYil9fSk7cmV0dXJuIHNJKGcsQSksZ31mdW5jdGlvbiBFSShBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBfQShBKXtsZXQgdD1BLm1hcChvQSk7cmV0dXJuW3QubWFwKEk9PklbMF0pLEVJKHQubWFwKEk9PklbMV0pKV19dmFyIGV0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEZBKEEsdCl7cmV0dXJuIGV0LnNldChBLHQpLEF9ZnVuY3Rpb24gYUkoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3ZBXTohMH0pfWZ1bmN0aW9uIG9BKEEpe2ZvcihsZXRbdCxJXW9mIEF0KWlmKEkuY2FuSGFuZGxlKEEpKXtsZXRbZSxnXT1JLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6dCx2YWx1ZTplfSxnXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZXQuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gYihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBBdC5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIHEoQSx0LEkpe3JldHVybiBuZXcgUHJvbWlzZShlPT57bGV0IGc9Y0koKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobyl7IW8uZGF0YXx8IW8uZGF0YS5pZHx8by5kYXRhLmlkIT09Z3x8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZShvLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmd9LHQpLEkpfSl9ZnVuY3Rpb24gY0koKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFcoQSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseSh0LGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpmSX09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6VUF9PU9iamVjdCxCQT0oQT0+dD0+e2xldCBJPWZJLmNhbGwodCk7cmV0dXJuIEFbSV18fChBW0ldPUkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxVPUE9PihBPUEudG9Mb3dlckNhc2UoKSx0PT5CQSh0KT09PUEpLG5BPUE9PnQ9PnR5cGVvZiB0PT09QSx7aXNBcnJheTpLfT1BcnJheSxaPW5BKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBsSShBKXtyZXR1cm4gQSE9PW51bGwmJiFaKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIVooQS5jb25zdHJ1Y3RvcikmJkYoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIGl0PVUoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gREkoQSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz90PUFycmF5QnVmZmVyLmlzVmlldyhBKTp0PUEmJkEuYnVmZmVyJiZpdChBLmJ1ZmZlciksdH12YXIgdUk9bkEoInN0cmluZyIpLEY9bkEoImZ1bmN0aW9uIiksQ3Q9bkEoIm51bWJlciIpLHNBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsaEk9QT0+QT09PSEwfHxBPT09ITEsQ0E9QT0+e2lmKEJBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IHQ9VUEoQSk7cmV0dXJuKHQ9PT1udWxsfHx0PT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZEk9VSgiRGF0ZSIpLHlJPVUoIkZpbGUiKSx3ST1VKCJCbG9iIiksbUk9VSgiRmlsZUxpc3QiKSxwST1BPT5zQShBKSYmRihBLnBpcGUpLFNJPUE9PntsZXQgdDtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxGKEEuYXBwZW5kKSYmKCh0PUJBKEEpKT09PSJmb3JtZGF0YSJ8fHQ9PT0ib2JqZWN0IiYmRihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxGST1VKCJVUkxTZWFyY2hQYXJhbXMiKSxSST1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gVihBLHQse2FsbE93bktleXM6ST0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBlLGc7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEsoQSkpZm9yKGU9MCxnPUEubGVuZ3RoO2U8ZztlKyspdC5jYWxsKG51bGwsQVtlXSxlLEEpO2Vsc2V7bGV0IHI9ST9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxvPXIubGVuZ3RoLG47Zm9yKGU9MDtlPG87ZSsrKW49cltlXSx0LmNhbGwobnVsbCxBW25dLG4sQSl9fWZ1bmN0aW9uIEJ0KEEsdCl7dD10LnRvTG93ZXJDYXNlKCk7bGV0IEk9T2JqZWN0LmtleXMoQSksZT1JLmxlbmd0aCxnO2Zvcig7ZS0tID4wOylpZihnPUlbZV0sdD09PWcudG9Mb3dlckNhc2UoKSlyZXR1cm4gZztyZXR1cm4gbnVsbH12YXIgbnQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxzdD1BPT4hWihBKSYmQSE9PW50O2Z1bmN0aW9uIE5BKCl7bGV0e2Nhc2VsZXNzOkF9PXN0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LEk9KGUsZyk9PntsZXQgcj1BJiZCdCh0LGcpfHxnO0NBKHRbcl0pJiZDQShlKT90W3JdPU5BKHRbcl0sZSk6Q0EoZSk/dFtyXT1OQSh7fSxlKTpLKGUpP3Rbcl09ZS5zbGljZSgpOnRbcl09ZX07Zm9yKGxldCBlPTAsZz1hcmd1bWVudHMubGVuZ3RoO2U8ZztlKyspYXJndW1lbnRzW2VdJiZWKGFyZ3VtZW50c1tlXSxJKTtyZXR1cm4gdH12YXIgTkk9KEEsdCxJLHthbGxPd25LZXlzOmV9PXt9KT0+KFYodCwoZyxyKT0+e0kmJkYoZyk/QVtyXT1XKGcsSSk6QVtyXT1nfSx7YWxsT3duS2V5czplfSksQSksVUk9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxHST0oQSx0LEksZSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6dC5wcm90b3R5cGV9KSxJJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLEkpfSxrST0oQSx0LEksZSk9PntsZXQgZyxyLG8sbj17fTtpZih0PXR8fHt9LEE9PW51bGwpcmV0dXJuIHQ7ZG97Zm9yKGc9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSkscj1nLmxlbmd0aDtyLS0gPjA7KW89Z1tyXSwoIWV8fGUobyxBLHQpKSYmIW5bb10mJih0W29dPUFbb10sbltvXT0hMCk7QT1JIT09ITEmJlVBKEEpfXdoaWxlKEEmJighSXx8SShBLHQpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB0fSxMST0oQSx0LEkpPT57QT1TdHJpbmcoQSksKEk9PT12b2lkIDB8fEk+QS5sZW5ndGgpJiYoST1BLmxlbmd0aCksSS09dC5sZW5ndGg7bGV0IGU9QS5pbmRleE9mKHQsSSk7cmV0dXJuIGUhPT0tMSYmZT09PUl9LEpJPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihLKEEpKXJldHVybiBBO2xldCB0PUEubGVuZ3RoO2lmKCFDdCh0KSlyZXR1cm4gbnVsbDtsZXQgST1uZXcgQXJyYXkodCk7Zm9yKDt0LS0gPjA7KUlbdF09QVt0XTtyZXR1cm4gSX0sSEk9KEE9PnQ9PkEmJnQgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJlVBKFVpbnQ4QXJyYXkpKSxZST0oQSx0KT0+e2xldCBlPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksZztmb3IoOyhnPWUubmV4dCgpKSYmIWcuZG9uZTspe2xldCByPWcudmFsdWU7dC5jYWxsKEEsclswXSxyWzFdKX19LGJJPShBLHQpPT57bGV0IEksZT1bXTtmb3IoOyhJPUEuZXhlYyh0KSkhPT1udWxsOyllLnB1c2goSSk7cmV0dXJuIGV9LE1JPVUoIkhUTUxGb3JtRWxlbWVudCIpLHFJPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKEksZSxnKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK2d9KSxydD0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9Pih0LEkpPT5BLmNhbGwodCxJKSkoT2JqZWN0LnByb3RvdHlwZSksS0k9VSgiUmVnRXhwIiksUXQ9KEEsdCk9PntsZXQgST1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxlPXt9O1YoSSwoZyxyKT0+e2xldCBvOyhvPXQoZyxyLEEpKSE9PSExJiYoZVtyXT1vfHxnKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsZSl9LE9JPUE9PntRdChBLCh0LEkpPT57aWYoRihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKEkpIT09LTEpcmV0dXJuITE7bGV0IGU9QVtJXTtpZihGKGUpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK0krIlwnIil9KX19KX0sVEk9KEEsdCk9PntsZXQgST17fSxlPWc9PntnLmZvckVhY2gocj0+e0lbcl09ITB9KX07cmV0dXJuIEsoQSk/ZShBKTplKFN0cmluZyhBKS5zcGxpdCh0KSksSX0sUEk9KCk9Pnt9LHhJPShBLHQpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTp0KSxSQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLG90PSIwMTIzNDU2Nzg5IixFdD17RElHSVQ6b3QsQUxQSEE6UkEsQUxQSEFfRElHSVQ6UkErUkEudG9VcHBlckNhc2UoKStvdH0sakk9KEE9MTYsdD1FdC5BTFBIQV9ESUdJVCk9PntsZXQgST0iIix7bGVuZ3RoOmV9PXQ7Zm9yKDtBLS07KUkrPXRbTWF0aC5yYW5kb20oKSplfDBdO3JldHVybiBJfTtmdW5jdGlvbiBXSShBKXtyZXR1cm4hIShBJiZGKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgWkk9QT0+e2xldCB0PW5ldyBBcnJheSgxMCksST0oZSxnKT0+e2lmKHNBKGUpKXtpZih0LmluZGV4T2YoZSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBlKSl7dFtnXT1lO2xldCByPUsoZSk/W106e307cmV0dXJuIFYoZSwobyxuKT0+e2xldCBhPUkobyxnKzEpOyFaKGEpJiYocltuXT1hKX0pLHRbZ109dm9pZCAwLHJ9fXJldHVybiBlfTtyZXR1cm4gSShBLDApfSxWST1VKCJBc3luY0Z1bmN0aW9uIiksWEk9QT0+QSYmKHNBKEEpfHxGKEEpKSYmRihBLnRoZW4pJiZGKEEuY2F0Y2gpLEM9e2lzQXJyYXk6Syxpc0FycmF5QnVmZmVyOml0LGlzQnVmZmVyOmxJLGlzRm9ybURhdGE6U0ksaXNBcnJheUJ1ZmZlclZpZXc6REksaXNTdHJpbmc6dUksaXNOdW1iZXI6Q3QsaXNCb29sZWFuOmhJLGlzT2JqZWN0OnNBLGlzUGxhaW5PYmplY3Q6Q0EsaXNVbmRlZmluZWQ6Wixpc0RhdGU6ZEksaXNGaWxlOnlJLGlzQmxvYjp3SSxpc1JlZ0V4cDpLSSxpc0Z1bmN0aW9uOkYsaXNTdHJlYW06cEksaXNVUkxTZWFyY2hQYXJhbXM6RkksaXNUeXBlZEFycmF5OkhJLGlzRmlsZUxpc3Q6bUksZm9yRWFjaDpWLG1lcmdlOk5BLGV4dGVuZDpOSSx0cmltOlJJLHN0cmlwQk9NOlVJLGluaGVyaXRzOkdJLHRvRmxhdE9iamVjdDprSSxraW5kT2Y6QkEsa2luZE9mVGVzdDpVLGVuZHNXaXRoOkxJLHRvQXJyYXk6SkksZm9yRWFjaEVudHJ5OllJLG1hdGNoQWxsOmJJLGlzSFRNTEZvcm06TUksaGFzT3duUHJvcGVydHk6cnQsaGFzT3duUHJvcDpydCxyZWR1Y2VEZXNjcmlwdG9yczpRdCxmcmVlemVNZXRob2RzOk9JLHRvT2JqZWN0U2V0OlRJLHRvQ2FtZWxDYXNlOnFJLG5vb3A6UEksdG9GaW5pdGVOdW1iZXI6eEksZmluZEtleTpCdCxnbG9iYWw6bnQsaXNDb250ZXh0RGVmaW5lZDpzdCxBTFBIQUJFVDpFdCxnZW5lcmF0ZVN0cmluZzpqSSxpc1NwZWNDb21wbGlhbnRGb3JtOldJLHRvSlNPTk9iamVjdDpaSSxpc0FzeW5jRm46VkksaXNUaGVuYWJsZTpYSX07ZnVuY3Rpb24gTyhBLHQsSSxlLGcpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxJJiYodGhpcy5jb25maWc9SSksZSYmKHRoaXMucmVxdWVzdD1lKSxnJiYodGhpcy5yZXNwb25zZT1nKX1DLmluaGVyaXRzKE8sRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpDLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBhdD1PLnByb3RvdHlwZSxjdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntjdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLGN0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXQsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Ty5mcm9tPShBLHQsSSxlLGcscik9PntsZXQgbz1PYmplY3QuY3JlYXRlKGF0KTtyZXR1cm4gQy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGEpe3JldHVybiBhIT09RXJyb3IucHJvdG90eXBlfSxuPT5uIT09ImlzQXhpb3NFcnJvciIpLE8uY2FsbChvLEEubWVzc2FnZSx0LEksZSxnKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxyJiZPYmplY3QuYXNzaWduKG8sciksb307dmFyIGw9Tzt2YXIgUUE9bnVsbDtmdW5jdGlvbiBHQShBKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KEEpfHxDLmlzQXJyYXkoQSl9ZnVuY3Rpb24gbHQoQSl7cmV0dXJuIEMuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gZnQoQSx0LEkpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihnLHIpe3JldHVybiBnPWx0KGcpLCFJJiZyPyJbIitnKyJdIjpnfSkuam9pbihJPyIuIjoiIik6dH1mdW5jdGlvbiB6SShBKXtyZXR1cm4gQy5pc0FycmF5KEEpJiYhQS5zb21lKEdBKX12YXIgX0k9Qy50b0ZsYXRPYmplY3QoQyx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHZJKEEsdCxJKXtpZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhRQXx8Rm9ybURhdGEpLEk9Qy50b0ZsYXRPYmplY3QoSSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIUMuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgZT1JLm1ldGFUb2tlbnMsZz1JLnZpc2l0b3J8fEIscj1JLmRvdHMsbz1JLmluZGV4ZXMsYT0oSS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZDLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIUMuaXNGdW5jdGlvbihnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIFEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoQy5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYSYmQy5pc0Jsb2IoRSkpdGhyb3cgbmV3IGwoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEMuaXNBcnJheUJ1ZmZlcihFKXx8Qy5pc1R5cGVkQXJyYXkoRSk/YSYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEIoRSxjLHUpe2xldCB5PUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoQy5lbmRzV2l0aChjLCJ7fSIpKWM9ZT9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKEMuaXNBcnJheShFKSYmekkoRSl8fChDLmlzRmlsZUxpc3QoRSl8fEMuZW5kc1dpdGgoYywiW10iKSkmJih5PUMudG9BcnJheShFKSkpcmV0dXJuIGM9bHQoYykseS5mb3JFYWNoKGZ1bmN0aW9uKE4sdEkpeyEoQy5pc1VuZGVmaW5lZChOKXx8Tj09PW51bGwpJiZ0LmFwcGVuZChvPT09ITA/ZnQoW2NdLHRJLHIpOm89PT1udWxsP2M6YysiW10iLFEoTikpfSksITF9cmV0dXJuIEdBKEUpPyEwOih0LmFwcGVuZChmdCh1LGMsciksUShFKSksITEpfWxldCBpPVtdLGY9T2JqZWN0LmFzc2lnbihfSSx7ZGVmYXVsdFZpc2l0b3I6Qixjb252ZXJ0VmFsdWU6USxpc1Zpc2l0YWJsZTpHQX0pO2Z1bmN0aW9uIHMoRSxjKXtpZighQy5pc1VuZGVmaW5lZChFKSl7aWYoaS5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTtpLnB1c2goRSksQy5mb3JFYWNoKEUsZnVuY3Rpb24oeSxSKXsoIShDLmlzVW5kZWZpbmVkKHkpfHx5PT09bnVsbCkmJmcuY2FsbCh0LHksQy5pc1N0cmluZyhSKT9SLnRyaW0oKTpSLGMsZikpPT09ITAmJnMoeSxjP2MuY29uY2F0KFIpOltSXSl9KSxpLnBvcCgpfX1pZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIHMoQSksdH12YXIgSj12STtmdW5jdGlvbiBEdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIHV0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmSihBLHRoaXMsdCl9dmFyIGh0PXV0LnByb3RvdHlwZTtodC5hcHBlbmQ9ZnVuY3Rpb24odCxJKXt0aGlzLl9wYWlycy5wdXNoKFt0LEldKX07aHQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IEk9dD9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxEdCl9OkR0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIEkoZ1swXSkrIj0iK0koZ1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciBFQT11dDtmdW5jdGlvbiAkSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiBYKEEsdCxJKXtpZighdClyZXR1cm4gQTtsZXQgZT1JJiZJLmVuY29kZXx8JEksZz1JJiZJLnNlcmlhbGl6ZSxyO2lmKGc/cj1nKHQsSSk6cj1DLmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcgRUEodCxJKS50b1N0cmluZyhlKSxyKXtsZXQgbz1BLmluZGV4T2YoIiUyMyIpO28hPT0tMSYmKEE9QS5zbGljZSgwLG8pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStyfXJldHVybiBBfXZhciBrQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsSSxlKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDpJLHN5bmNocm9ub3VzOmU/ZS5zeW5jaHJvbm91czohMSxydW5XaGVuOmU/ZS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7Qy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oZSl7ZSE9PW51bGwmJnQoZSl9KX19LExBPWtBO3ZhciBhQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGR0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpFQTt2YXIgeXQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciB3dD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBtdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpkdCxGb3JtRGF0YTp5dCxCbG9iOnd0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIEpBPXt9O2VJKEpBLHtoYXNCcm93c2VyRW52OigpPT5wdCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFlLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+dGV9KTt2YXIgcHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsQWU9KEE9PnB0JiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksdGU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciB3PXsuLi5KQSwuLi5tdH07ZnVuY3Rpb24gSEEoQSx0KXtyZXR1cm4gSihBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oSSxlLGcscil7cmV0dXJuIHcuaXNOb2RlJiZDLmlzQnVmZmVyKEkpPyh0aGlzLmFwcGVuZChlLEkudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6ci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gSWUoQSl7cmV0dXJuIEMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBlZShBKXtsZXQgdD17fSxJPU9iamVjdC5rZXlzKEEpLGUsZz1JLmxlbmd0aCxyO2ZvcihlPTA7ZTxnO2UrKylyPUlbZV0sdFtyXT1BW3JdO3JldHVybiB0fWZ1bmN0aW9uIGdlKEEpe2Z1bmN0aW9uIHQoSSxlLGcscil7bGV0IG89SVtyKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgbj1OdW1iZXIuaXNGaW5pdGUoK28pLGE9cj49SS5sZW5ndGg7cmV0dXJuIG89IW8mJkMuaXNBcnJheShnKT9nLmxlbmd0aDpvLGE/KEMuaGFzT3duUHJvcChnLG8pP2dbb109W2dbb10sZV06Z1tvXT1lLCFuKTooKCFnW29dfHwhQy5pc09iamVjdChnW29dKSkmJihnW29dPVtdKSx0KEksZSxnW29dLHIpJiZDLmlzQXJyYXkoZ1tvXSkmJihnW29dPWVlKGdbb10pKSwhbil9aWYoQy5pc0Zvcm1EYXRhKEEpJiZDLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IEk9e307cmV0dXJuIEMuZm9yRWFjaEVudHJ5KEEsKGUsZyk9Pnt0KEllKGUpLGcsSSwwKX0pLEl9cmV0dXJuIG51bGx9dmFyIGNBPWdlO2Z1bmN0aW9uIHJlKEEsdCxJKXtpZihDLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksQy50cmltKEEpfWNhdGNoKGUpe2lmKGUubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgZX1yZXR1cm4oSXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBZQT17dHJhbnNpdGlvbmFsOmFBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxJKXtsZXQgZT1JLmdldENvbnRlbnRUeXBlKCl8fCIiLGc9ZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEscj1DLmlzT2JqZWN0KHQpO2lmKHImJkMuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxDLmlzRm9ybURhdGEodCkpcmV0dXJuIGc/SlNPTi5zdHJpbmdpZnkoY0EodCkpOnQ7aWYoQy5pc0FycmF5QnVmZmVyKHQpfHxDLmlzQnVmZmVyKHQpfHxDLmlzU3RyZWFtKHQpfHxDLmlzRmlsZSh0KXx8Qy5pc0Jsb2IodCkpcmV0dXJuIHQ7aWYoQy5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoQy5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IG47aWYocil7aWYoZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gSEEodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChuPUMuaXNGaWxlTGlzdCh0KSl8fGUuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEoobj97ImZpbGVzW10iOnR9OnQsYSYmbmV3IGEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiByfHxnPyhJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSkscmUodCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IEk9dGhpcy50cmFuc2l0aW9uYWx8fFlBLnRyYW5zaXRpb25hbCxlPUkmJkkuZm9yY2VkSlNPTlBhcnNpbmcsZz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZih0JiZDLmlzU3RyaW5nKHQpJiYoZSYmIXRoaXMucmVzcG9uc2VUeXBlfHxnKSl7bGV0IG89IShJJiZJLnNpbGVudEpTT05QYXJzaW5nKSYmZzt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2gobil7aWYobyl0aHJvdyBuLm5hbWU9PT0iU3ludGF4RXJyb3IiP2wuZnJvbShuLGwuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bn19cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57WUEuaGVhZGVyc1tBXT17fX0pO3ZhciBUPVlBO3ZhciBvZT1DLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLFN0PUE9PntsZXQgdD17fSxJLGUsZztyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihvKXtnPW8uaW5kZXhPZigiOiIpLEk9by5zdWJzdHJpbmcoMCxnKS50cmltKCkudG9Mb3dlckNhc2UoKSxlPW8uc3Vic3RyaW5nKGcrMSkudHJpbSgpLCEoIUl8fHRbSV0mJm9lW0ldKSYmKEk9PT0ic2V0LWNvb2tpZSI/dFtJXT90W0ldLnB1c2goZSk6dFtJXT1bZV06dFtJXT10W0ldP3RbSV0rIiwgIitlOmUpfSksdH07dmFyIEZ0PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24geihBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpDLmlzQXJyYXkoQSk/QS5tYXAoZkEpOlN0cmluZyhBKX1mdW5jdGlvbiBpZShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLEk9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxlO2Zvcig7ZT1JLmV4ZWMoQSk7KXRbZVsxXV09ZVsyXTtyZXR1cm4gdH12YXIgQ2U9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gYkEoQSx0LEksZSxnKXtpZihDLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHQsSSk7aWYoZyYmKHQ9SSksISFDLmlzU3RyaW5nKHQpKXtpZihDLmlzU3RyaW5nKGUpKXJldHVybiB0LmluZGV4T2YoZSkhPT0tMTtpZihDLmlzUmVnRXhwKGUpKXJldHVybiBlLnRlc3QodCl9fWZ1bmN0aW9uIEJlKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxJLGUpPT5JLnRvVXBwZXJDYXNlKCkrZSl9ZnVuY3Rpb24gbmUoQSx0KXtsZXQgST1DLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGUrSSx7dmFsdWU6ZnVuY3Rpb24oZyxyLG8pe3JldHVybiB0aGlzW2VdLmNhbGwodGhpcyx0LGcscixvKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxJLGUpe2xldCBnPXRoaXM7ZnVuY3Rpb24gcihuLGEsUSl7bGV0IEI9eihhKTtpZighQil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGk9Qy5maW5kS2V5KGcsQik7KCFpfHxnW2ldPT09dm9pZCAwfHxRPT09ITB8fFE9PT12b2lkIDAmJmdbaV0hPT0hMSkmJihnW2l8fGFdPWZBKG4pKX1sZXQgbz0obixhKT0+Qy5mb3JFYWNoKG4sKFEsQik9PnIoUSxCLGEpKTtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKHQsSSk6Qy5pc1N0cmluZyh0KSYmKHQ9dC50cmltKCkpJiYhQ2UodCk/byhTdCh0KSxJKTp0IT1udWxsJiZyKEksdCxlKSx0aGlzfWdldCh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtpZihlKXtsZXQgZz10aGlzW2VdO2lmKCFJKXJldHVybiBnO2lmKEk9PT0hMClyZXR1cm4gaWUoZyk7aWYoQy5pc0Z1bmN0aW9uKEkpKXJldHVybiBJLmNhbGwodGhpcyxnLGUpO2lmKEMuaXNSZWdFeHAoSSkpcmV0dXJuIEkuZXhlYyhnKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKGUmJnRoaXNbZV0hPT12b2lkIDAmJighSXx8YkEodGhpcyx0aGlzW2VdLGUsSSkpKX1yZXR1cm4hMX1kZWxldGUodCxJKXtsZXQgZT10aGlzLGc9ITE7ZnVuY3Rpb24gcihvKXtpZihvPXoobyksbyl7bGV0IG49Qy5maW5kS2V5KGUsbyk7biYmKCFJfHxiQShlLGVbbl0sbixJKSkmJihkZWxldGUgZVtuXSxnPSEwKX19cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSxnfWNsZWFyKHQpe2xldCBJPU9iamVjdC5rZXlzKHRoaXMpLGU9SS5sZW5ndGgsZz0hMTtmb3IoO2UtLTspe2xldCByPUlbZV07KCF0fHxiQSh0aGlzLHRoaXNbcl0scix0LCEwKSkmJihkZWxldGUgdGhpc1tyXSxnPSEwKX1yZXR1cm4gZ31ub3JtYWxpemUodCl7bGV0IEk9dGhpcyxlPXt9O3JldHVybiBDLmZvckVhY2godGhpcywoZyxyKT0+e2xldCBvPUMuZmluZEtleShlLHIpO2lmKG8pe0lbb109ZkEoZyksZGVsZXRlIElbcl07cmV0dXJufWxldCBuPXQ/QmUocik6U3RyaW5nKHIpLnRyaW0oKTtuIT09ciYmZGVsZXRlIElbcl0sSVtuXT1mQShnKSxlW25dPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChlLGcpPT57ZSE9bnVsbCYmZSE9PSExJiYoSVtnXT10JiZDLmlzQXJyYXkoZSk/ZS5qb2luKCIsICIpOmUpfSksSX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxJXSk9PnQrIjogIitJKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5JKXtsZXQgZT1uZXcgdGhpcyh0KTtyZXR1cm4gSS5mb3JFYWNoKGc9PmUuc2V0KGcpKSxlfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgZT0odGhpc1tGdF09dGhpc1tGdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxnPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIobyl7bGV0IG49eihvKTtlW25dfHwobmUoZyxvKSxlW25dPSEwKX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLHRoaXN9fTtQLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtDLnJlZHVjZURlc2NyaXB0b3JzKFAucHJvdG90eXBlLCh7dmFsdWU6QX0sdCk9PntsZXQgST10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChlKXt0aGlzW0ldPWV9fX0pO0MuZnJlZXplTWV0aG9kcyhQKTt2YXIgbT1QO2Z1bmN0aW9uIF8oQSx0KXtsZXQgST10aGlzfHxULGU9dHx8SSxnPW0uZnJvbShlLmhlYWRlcnMpLHI9ZS5kYXRhO3JldHVybiBDLmZvckVhY2goQSxmdW5jdGlvbihuKXtyPW4uY2FsbChJLHIsZy5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxnLm5vcm1hbGl6ZSgpLHJ9ZnVuY3Rpb24gdihBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFJ0KEEsdCxJKXtsLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGwuRVJSX0NBTkNFTEVELHQsSSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1DLmluaGVyaXRzKFJ0LGwse19fQ0FOQ0VMX186ITB9KTt2YXIgSD1SdDtmdW5jdGlvbiBNQShBLHQsSSl7bGV0IGU9SS5jb25maWcudmFsaWRhdGVTdGF0dXM7IUkuc3RhdHVzfHwhZXx8ZShJLnN0YXR1cyk/QShJKTp0KG5ldyBsKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrSS5zdGF0dXMsW2wuRVJSX0JBRF9SRVFVRVNULGwuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihJLnN0YXR1cy8xMDApLTRdLEkuY29uZmlnLEkucmVxdWVzdCxJKSl9dmFyIE50PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsSSxlLGcscil7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07Qy5pc051bWJlcihJKSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoSSkudG9HTVRTdHJpbmcoKSksQy5pc1N0cmluZyhlKSYmby5wdXNoKCJwYXRoPSIrZSksQy5pc1N0cmluZyhnKSYmby5wdXNoKCJkb21haW49IitnKSxyPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gcUEoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gS0EoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uICQoQSx0KXtyZXR1cm4gQSYmIXFBKHQpP0tBKEEsdCk6dH12YXIgVXQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLGU7ZnVuY3Rpb24gZyhyKXtsZXQgbz1yO3JldHVybiB0JiYoSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLG89SS5ocmVmKSxJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbykse2hyZWY6SS5ocmVmLHByb3RvY29sOkkucHJvdG9jb2w/SS5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6SS5ob3N0LHNlYXJjaDpJLnNlYXJjaD9JLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDpJLmhhc2g/SS5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTpJLmhvc3RuYW1lLHBvcnQ6SS5wb3J0LHBhdGhuYW1lOkkucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP0kucGF0aG5hbWU6Ii8iK0kucGF0aG5hbWV9fXJldHVybiBlPWcod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG8pe2xldCBuPUMuaXNTdHJpbmcobyk/ZyhvKTpvO3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiBPQShBKXtsZXQgdD0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gdCYmdFsxXXx8IiJ9ZnVuY3Rpb24gc2UoQSx0KXtBPUF8fDEwO2xldCBJPW5ldyBBcnJheShBKSxlPW5ldyBBcnJheShBKSxnPTAscj0wLG87cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjFlMyxmdW5jdGlvbihhKXtsZXQgUT1EYXRlLm5vdygpLEI9ZVtyXTtvfHwobz1RKSxJW2ddPWEsZVtnXT1RO2xldCBpPXIsZj0wO2Zvcig7aSE9PWc7KWYrPUlbaSsrXSxpPWklQTtpZihnPShnKzEpJUEsZz09PXImJihyPShyKzEpJUEpLFEtbzx0KXJldHVybjtsZXQgcz1CJiZRLUI7cmV0dXJuIHM/TWF0aC5yb3VuZChmKjFlMy9zKTp2b2lkIDB9fXZhciBHdD1zZTtmdW5jdGlvbiBrdChBLHQpe2xldCBJPTAsZT1HdCg1MCwyNTApO3JldHVybiBnPT57bGV0IHI9Zy5sb2FkZWQsbz1nLmxlbmd0aENvbXB1dGFibGU/Zy50b3RhbDp2b2lkIDAsbj1yLUksYT1lKG4pLFE9cjw9bztJPXI7bGV0IEI9e2xvYWRlZDpyLHRvdGFsOm8scHJvZ3Jlc3M6bz9yL286dm9pZCAwLGJ5dGVzOm4scmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJm8mJlE/KG8tcikvYTp2b2lkIDAsZXZlbnQ6Z307Qlt0PyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEoQil9fXZhciBRZT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLEx0PVFlJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSSxlKXtsZXQgZz1BLmRhdGEscj1tLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm8sd2l0aFhTUkZUb2tlbjpufT1BLGE7ZnVuY3Rpb24gUSgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQjtpZihDLmlzRm9ybURhdGEoZykpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilyLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChCPXIuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4udV09Qj9CLnNwbGl0KCI7IikubWFwKHk9PnkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107ci5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLnVdLmpvaW4oIjsgIikpfX1sZXQgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgYz1BLmF1dGgudXNlcm5hbWV8fCIiLHU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShjKyI6Iit1KSl9bGV0IGY9JChBLmJhc2VVUkwsQS51cmwpO2kub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoZixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxpLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIHMoKXtpZighaSlyZXR1cm47bGV0IGM9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gaSYmaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkseT17ZGF0YTohb3x8bz09PSJ0ZXh0Inx8bz09PSJqc29uIj9pLnJlc3BvbnNlVGV4dDppLnJlc3BvbnNlLHN0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDppfTtNQShmdW5jdGlvbihOKXtJKE4pLFEoKX0sZnVuY3Rpb24oTil7ZShOKSxRKCl9LHkpLGk9bnVsbH1pZigib25sb2FkZW5kImluIGk/aS5vbmxvYWRlbmQ9czppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFpfHxpLnJlYWR5U3RhdGUhPT00fHxpLnN0YXR1cz09PTAmJiEoaS5yZXNwb25zZVVSTCYmaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocyl9LGkub25hYm9ydD1mdW5jdGlvbigpe2kmJihlKG5ldyBsKCJSZXF1ZXN0IGFib3J0ZWQiLGwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbCl9LGkub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IGwoIk5ldHdvcmsgRXJyb3IiLGwuRVJSX05FVFdPUkssQSxpKSksaT1udWxsfSxpLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIix5PUEudHJhbnNpdGlvbmFsfHxhQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksZShuZXcgbCh1LHkuY2xhcmlmeVRpbWVvdXRFcnJvcj9sLkVUSU1FRE9VVDpsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobiYmQy5pc0Z1bmN0aW9uKG4pJiYobj1uKEEpKSxufHxuIT09ITEmJlV0KGYpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmTnQucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfWc9PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gaSYmQy5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24odSx5KXtpLnNldFJlcXVlc3RIZWFkZXIoeSx1KX0pLEMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoaS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksbyYmbyE9PSJqc29uIiYmKGkucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS51cGxvYWQmJmkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYT1jPT57aSYmKGUoIWN8fGMudHlwZT9uZXcgSChudWxsLEEsaSk6YyksaS5hYm9ydCgpLGk9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9hKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IEU9T0EoZik7aWYoRSYmdy5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtlKG5ldyBsKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGwuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59aS5zZW5kKGd8fG51bGwpfSl9O3ZhciBUQT17aHR0cDpRQSx4aHI6THR9O0MuZm9yRWFjaChUQSwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBKdD1BPT5gLSAke0F9YCxFZT1BPT5DLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbEE9e2dldEFkYXB0ZXI6QT0+e0E9Qy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxJLGUsZz17fTtmb3IobGV0IHI9MDtyPHQ7cisrKXtJPUFbcl07bGV0IG87aWYoZT1JLCFFZShJKSYmKGU9VEFbKG89U3RyaW5nKEkpKS50b0xvd2VyQ2FzZSgpXSxlPT09dm9pZCAwKSl0aHJvdyBuZXcgbChgVW5rbm93biBhZGFwdGVyIFwnJHtvfVwnYCk7aWYoZSlicmVhaztnW298fCIlMjMiK3JdPWV9aWYoIWUpe2xldCByPU9iamVjdC5lbnRyaWVzKGcpLm1hcCgoW24sYV0pPT5gYWRhcHRlciAke259IGArKGE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPXQ/ci5sZW5ndGg+MT9gc2luY2UgOiUwQWArci5tYXAoSnQpLmpvaW4oYCUwQWApOiIgIitKdChyWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBsKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIGV9LGFkYXB0ZXJzOlRBfTtmdW5jdGlvbiBQQShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSChudWxsLEEpfWZ1bmN0aW9uIERBKEEpe3JldHVybiBQQShBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGxBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxULmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFBBKEEpLGUuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUpLGUuaGVhZGVycz1tLmZyb20oZS5oZWFkZXJzKSxlfSxmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8KFBBKEEpLGUmJmUucmVzcG9uc2UmJihlLnJlc3BvbnNlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlLnJlc3BvbnNlKSxlLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKGUucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChlKX0pfXZhciBIdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgST17fTtmdW5jdGlvbiBlKFEsQixpKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KFEpJiZDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZS5jYWxsKHtjYXNlbGVzczppfSxRLEIpOkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlKHt9LEIpOkMuaXNBcnJheShCKT9CLnNsaWNlKCk6Qn1mdW5jdGlvbiBnKFEsQixpKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSxpKX1lbHNlIHJldHVybiBlKFEsQixpKX1mdW5jdGlvbiByKFEsQil7aWYoIUMuaXNVbmRlZmluZWQoQikpcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG8oUSxCKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSl9ZWxzZSByZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbihRLEIsaSl7aWYoaSBpbiB0KXJldHVybiBlKFEsQik7aWYoaSBpbiBBKXJldHVybiBlKHZvaWQgMCxRKX1sZXQgYT17dXJsOnIsbWV0aG9kOnIsZGF0YTpyLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpuLGhlYWRlcnM6KFEsQik9PmcoSHQoUSksSHQoQiksITApfTtyZXR1cm4gQy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24oQil7bGV0IGk9YVtCXXx8ZyxmPWkoQVtCXSx0W0JdLEIpO0MuaXNVbmRlZmluZWQoZikmJmkhPT1ufHwoSVtCXT1mKX0pLEl9dmFyIHVBPSIxLjYuOCI7dmFyIHhBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSx0KT0+e3hBW0FdPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09PUF8fCJhIisodDwxPyJuICI6IiAiKStBfX0pO3ZhciBZdD17fTt4QS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxJLGUpe2Z1bmN0aW9uIGcocixvKXtyZXR1cm4iW0F4aW9zIHYiK3VBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK3IrIlwnIitvKyhlPyIuICIrZToiIil9cmV0dXJuKHIsbyxuKT0+e2lmKHQ9PT0hMSl0aHJvdyBuZXcgbChnKG8sIiBoYXMgYmVlbiByZW1vdmVkIisoST8iIGluICIrSToiIikpLGwuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBJJiYhWXRbb10mJihZdFtvXT0hMCxjb25zb2xlLndhcm4oZyhvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitJKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLHQ/dChyLG8sbik6ITB9fTtmdW5jdGlvbiBhZShBLHQsSSl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBsKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxnPWUubGVuZ3RoO2Zvcig7Zy0tID4wOyl7bGV0IHI9ZVtnXSxvPXRbcl07aWYobyl7bGV0IG49QVtyXSxhPW49PT12b2lkIDB8fG8obixyLEEpO2lmKGEhPT0hMCl0aHJvdyBuZXcgbCgib3B0aW9uICIrcisiIG11c3QgYmUgIithLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKEkhPT0hMCl0aHJvdyBuZXcgbCgiVW5rbm93biBvcHRpb24gIityLGwuRVJSX0JBRF9PUFRJT04pfX12YXIgaEE9e2Fzc2VydE9wdGlvbnM6YWUsdmFsaWRhdG9yczp4QX07dmFyIFk9aEEudmFsaWRhdG9ycyx4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdHM9dCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgTEEscmVzcG9uc2U6bmV3IExBfX1hc3luYyByZXF1ZXN0KHQsSSl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KHQsSSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgZztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShnPXt9KTpnPW5ldyBFcnJvcjtsZXQgcj1nLnN0YWNrP2cuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7ZS5zdGFjaz9yJiYhU3RyaW5nKGUuc3RhY2spLmVuZHNXaXRoKHIucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihlLnN0YWNrKz1gJTBBYCtyKTplLnN0YWNrPXJ9dGhyb3cgZX19X3JlcXVlc3QodCxJKXt0eXBlb2YgdD09InN0cmluZyI/KEk9SXx8e30sSS51cmw9dCk6ST10fHx7fSxJPWsodGhpcy5kZWZhdWx0cyxJKTtsZXR7dHJhbnNpdGlvbmFsOmUscGFyYW1zU2VyaWFsaXplcjpnLGhlYWRlcnM6cn09STtlIT09dm9pZCAwJiZoQS5hc3NlcnRPcHRpb25zKGUse3NpbGVudEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbil9LCExKSxnIT1udWxsJiYoQy5pc0Z1bmN0aW9uKGcpP0kucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOmd9OmhBLmFzc2VydE9wdGlvbnMoZyx7ZW5jb2RlOlkuZnVuY3Rpb24sc2VyaWFsaXplOlkuZnVuY3Rpb259LCEwKSksSS5tZXRob2Q9KEkubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89ciYmQy5tZXJnZShyLmNvbW1vbixyW0kubWV0aG9kXSk7ciYmQy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgcltFXX0pLEkuaGVhZGVycz1tLmNvbmNhdChvLHIpO2xldCBuPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3R5cGVvZiBjLnJ1bldoZW49PSJmdW5jdGlvbiImJmMucnVuV2hlbihJKT09PSExfHwoYT1hJiZjLnN5bmNocm9ub3VzLG4udW5zaGlmdChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKSl9KTtsZXQgUT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGMpe1EucHVzaChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKX0pO2xldCBCLGk9MCxmO2lmKCFhKXtsZXQgRT1bREEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxuKSxFLnB1c2guYXBwbHkoRSxRKSxmPUUubGVuZ3RoLEI9UHJvbWlzZS5yZXNvbHZlKEkpO2k8ZjspQj1CLnRoZW4oRVtpKytdLEVbaSsrXSk7cmV0dXJuIEJ9Zj1uLmxlbmd0aDtsZXQgcz1JO2ZvcihpPTA7aTxmOyl7bGV0IEU9bltpKytdLGM9bltpKytdO3RyeXtzPUUocyl9Y2F0Y2godSl7Yy5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXtCPURBLmNhbGwodGhpcyxzKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKGk9MCxmPVEubGVuZ3RoO2k8ZjspQj1CLnRoZW4oUVtpKytdLFFbaSsrXSk7cmV0dXJuIEJ9Z2V0VXJpKHQpe3Q9ayh0aGlzLmRlZmF1bHRzLHQpO2xldCBJPSQodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gWChJLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe3gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKEksZSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKGV8fHt9LHttZXRob2Q6dCx1cmw6SSxkYXRhOihlfHx7fSkuZGF0YX0pKX19KTtDLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBJKGUpe3JldHVybiBmdW5jdGlvbihyLG8sbil7cmV0dXJuIHRoaXMucmVxdWVzdChrKG58fHt9LHttZXRob2Q6dCxoZWFkZXJzOmU/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTpvfSkpfX14LnByb3RvdHlwZVt0XT1JKCkseC5wcm90b3R5cGVbdCsiRm9ybSJdPUkoITApfSk7dmFyIEFBPXg7dmFyIGpBPWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBJO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXtJPXJ9KTtsZXQgZT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGc9PntpZighZS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1lLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOyllLl9saXN0ZW5lcnNbcl0oZyk7ZS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1nPT57bGV0IHIsbz1uZXcgUHJvbWlzZShuPT57ZS5zdWJzY3JpYmUobikscj1ufSkudGhlbihnKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKHIpfSxvfSx0KGZ1bmN0aW9uKHIsbyxuKXtlLnJlYXNvbnx8KGUucmVhc29uPW5ldyBIKHIsbyxuKSxJKGUucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IEk9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7SSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEksMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihnKXt0PWd9KSxjYW5jZWw6dH19fSxidD1qQTtmdW5jdGlvbiBXQShBKXtyZXR1cm4gZnVuY3Rpb24oSSl7cmV0dXJuIEEuYXBwbHkobnVsbCxJKX19ZnVuY3Rpb24gWkEoQSl7cmV0dXJuIEMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFZBPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhWQSkuZm9yRWFjaCgoW0EsdF0pPT57VkFbdF09QX0pO3ZhciBNdD1WQTtmdW5jdGlvbiBxdChBKXtsZXQgdD1uZXcgQUEoQSksST1XKEFBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBDLmV4dGVuZChJLEFBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksQy5leHRlbmQoSSx0LG51bGwse2FsbE93bktleXM6ITB9KSxJLmNyZWF0ZT1mdW5jdGlvbihnKXtyZXR1cm4gcXQoayhBLGcpKX0sSX12YXIgaD1xdChUKTtoLkF4aW9zPUFBO2guQ2FuY2VsZWRFcnJvcj1IO2guQ2FuY2VsVG9rZW49YnQ7aC5pc0NhbmNlbD12O2guVkVSU0lPTj11QTtoLnRvRm9ybURhdGE9SjtoLkF4aW9zRXJyb3I9bDtoLkNhbmNlbD1oLkNhbmNlbGVkRXJyb3I7aC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtoLnNwcmVhZD1XQTtoLmlzQXhpb3NFcnJvcj1aQTtoLm1lcmdlQ29uZmlnPWs7aC5BeGlvc0hlYWRlcnM9bTtoLmZvcm1Ub0pTT049QT0+Y0EoQy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtoLmdldEFkYXB0ZXI9bEEuZ2V0QWRhcHRlcjtoLkh0dHBTdGF0dXNDb2RlPU10O2guZGVmYXVsdD1oO3ZhciBkQT1oO3ZhcntBeGlvczppbyxBeGlvc0Vycm9yOkNvLENhbmNlbGVkRXJyb3I6Qm8saXNDYW5jZWw6bm8sQ2FuY2VsVG9rZW46c28sVkVSU0lPTjpRbyxhbGw6RW8sQ2FuY2VsOmFvLGlzQXhpb3NFcnJvcjpjbyxzcHJlYWQ6Zm8sdG9Gb3JtRGF0YTpsbyxBeGlvc0hlYWRlcnM6RG8sSHR0cFN0YXR1c0NvZGU6dW8sZm9ybVRvSlNPTjpobyxnZXRBZGFwdGVyOnlvLG1lcmdlQ29uZmlnOndvfT1kQTt2YXIgdEEsTCx6QSxYQT17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe3pBPW5ldyBVaW50OEFycmF5KEwuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSx5QT1jbGFzc3tpbml0KCl7cmV0dXJuIHRBfHwodHlwZW9mIGZldGNoPCJ1Ij90QT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK0t0KS50aGVuKHQ9PnQuYXJyYXlCdWZmZXIoKSkudGhlbih0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0LFhBKSkudGhlbih0aGlzLl9pbml0KTp0QT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShLdCwiYmFzZTY0IiksWEEpLnRoZW4odGhpcy5faW5pdCksdEEpfV9pbml0KHQpe0w9dC5pbnN0YW5jZSxYQS5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUodCxJPTApe2lmKCFMKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBlPXQuYnl0ZUxlbmd0aCxnPUwuZXhwb3J0cy5tYWxsb2MoZSk7ekEuc2V0KHQsZyksST1JfHxOdW1iZXIoTC5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUoZyxlKSk7bGV0IHI9TC5leHBvcnRzLm1hbGxvYyhJKSxvPUwuZXhwb3J0cy5aU1REX2RlY29tcHJlc3MocixJLGcsZSksbj16QS5zbGljZShyLHIrbyk7cmV0dXJuIEwuZXhwb3J0cy5mcmVlKGcpLEwuZXhwb3J0cy5mcmVlKHIpLG59fSxLdD0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBPdD1uZXcgeUEsVHQ9ITE7YXN5bmMgZnVuY3Rpb24gY2UoQSx0LEkpe2xldCBlPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP2U9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP2U9QTplPWAke3R9LyR7QX1gLGUuZW5kc1dpdGgoIi5qcyIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTMpKSxlLmVuZHNXaXRoKCIud2FzbSIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTUpKTtsZXQgZz1gJHtlfS53YXNtYCxyPWF3YWl0IGRBLmdldChgJHtnfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6SX0pO1R0fHwoYXdhaXQgT3QuaW5pdCgpLFR0PSEwKTtsZXQgbj1PdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7ZX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIFB0PWNlO3ZhciB3QT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGZlKEEsdCxJKXtsZXQgZT1BLGc9QSxyPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKGU9bmV3IFVSTChBLmhyZWYpLGc9ZS5ocmVmKSx3QS5oYXMoZyk/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLFB0KGUsdCxJKSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIHh0PWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9dWU7ZnVuY3Rpb24gaGUoQSx0KXtsZXQgST1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e0k9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDg6e0k9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFMuVUludDE2OntJPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFMuSW50MTY6e0k9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7ST1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDMyOntJPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ0ludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQzMjp7ST1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDY0OntJPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ST1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ST1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIEl9dmFyIEc9aGU7dmFyIFp0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGp0PW5ldyBUZXh0RW5jb2RlcixXdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSx0KXtsZXQgST17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3Blbih0LEkuZmxhZ3MpLHI9QS5mc19zdGF0KHQpLnNpemUsbz1udWxsO1p0P289bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOm89bmV3IEFycmF5QnVmZmVyKHIpO2xldCBuPW5ldyBVaW50OEFycmF5KG8pO3JldHVybiBBLmZzX3JlYWQoZSxuLDAsciwwKSxBLmZzX2Nsb3NlKGUpLG59ZnVuY3Rpb24gVnQoQSx0LEkpe2xldCBlPW51bGw7WnQ/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoSSk6ZT1uZXcgQXJyYXlCdWZmZXIoSSk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxJKTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiBkKEEsdCxJLGUpe2xldCBnPTA7cmV0dXJuIHQhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGUsdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gTShBLHQsSSl7bGV0IGU9SlNPTi5zdHJpbmdpZnkodCksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gcChBLHQsSSxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLG89VnQoQSxnLHIpO3JldHVybiBHKGUsby5idWZmZXIpfWZ1bmN0aW9uIG1BKEEsdCl7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksZT1BLlVURjhUb1N0cmluZyhJKTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLHQsSSxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxCKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IGk9anQuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IGk9anQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IGk9US5kYXRhLmRhdGEsZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IGk9US5kYXRhLGY9ZChBLGkuZGF0YSxCLDApLHM9ZChBLGkuZGlyZWN0aW9uLEIsMSksRT10eXBlb2YgaS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShpLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOmkuaW1hZ2VUeXBlLG5hbWU6aS5uYW1lLG9yaWdpbjppLm9yaWdpbixzcGFjaW5nOmkuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsc2l6ZTppLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtNKEEsYyxCKTticmVha31jYXNlIEQuTWVzaDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5jZWxscyxCLDEpLEU9ZChBLGkucG9pbnREYXRhLEIsMiksYz1kKEEsaS5jZWxsRGF0YSxCLDMpLHU9e21lc2hUeXBlOmkubWVzaFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczppLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsY2VsbEJ1ZmZlclNpemU6aS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsdSxCKTticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkucG9pbnREYXRhLEIsMSksRT17cG9pbnRTZXRUeXBlOmkucG9pbnRTZXRUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YH07TShBLEUsQik7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnZlcnRpY2VzLEIsMSksRT1kKEEsaS5saW5lcyxCLDIpLGM9ZChBLGkucG9seWdvbnMsQiwzKSx1PWQoQSxpLnRyaWFuZ2xlU3RyaXBzLEIsNCkseT1kKEEsaS5wb2ludERhdGEsQiw1KSxSPWQoQSxpLnBvaW50RGF0YSxCLDYpLE49e3BvbHlEYXRhVHlwZTppLnBvbHlEYXRhVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6aS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsbGluZXNCdWZmZXJTaXplOmkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTppLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6aS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07TShBLE4sQik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgbz1BLmdldE1vZHVsZVN0ZG91dCgpLG49QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiBJIT1udWxsJiZJLmxlbmd0aD4wJiZyPT09MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7bGV0IGk9bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9e2RhdGE6V3QuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPUpTT04ucGFyc2UoV3QuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pO2k9e2RhdGE6VnQoQSxzLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgcz1tQShBLEIpO3MuZGF0YT1wKEEsQiwwLHMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLHMuZGlyZWN0aW9uPXAoQSxCLDEsai5GbG9hdDY0KSxzLm1ldGFkYXRhPW5ldyBNYXAocy5tZXRhZGF0YSksaT1zO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxzPjA/cy5jZWxscz1wKEEsQiwxLHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOnMuY2VsbHM9RyhzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMixzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsMyxzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwxLHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxqLkZsb2F0MzIpOnMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXkscy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9zLnZlcnRpY2VzPXAoQSxCLDEsUy5VSW50MzIpOnMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LHMubGluZXNCdWZmZXJTaXplPjA/cy5saW5lcz1wKEEsQiwyLFMuVUludDMyKTpzLmxpbmVzPW5ldyBVaW50MzJBcnJheSxzLnBvbHlnb25zQnVmZmVyU2l6ZT4wP3MucG9seWdvbnM9cChBLEIsMyxTLlVJbnQzMik6cy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXkscy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9zLnRyaWFuZ2xlU3RyaXBzPXAoQSxCLDQsUy5VSW50MzIpOnMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDUscy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsNixzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOlEudHlwZSxkYXRhOml9O2EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpyLHN0ZG91dDpvLHN0ZGVycjpuLG91dHB1dHM6YX19dmFyIFh0PXllO3ZhciB3ZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gbWUoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBJPVtdO2ZvcihsZXQgZT0wO2U8QS5sZW5ndGg7ZSsrKXtsZXQgZz1wZShBW2VdLHQpO2chPT1udWxsJiZJLnB1c2goZyl9cmV0dXJuIEl9ZnVuY3Rpb24gcGUoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBJPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP0k9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoST1BKSx3ZSYmSSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9JOkkuc2xpY2UoMCl9dmFyIHp0PW1lO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBfdD1TZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgdnQ9RmU7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyICR0PVJlO2FzeW5jIGZ1bmN0aW9uIE5lKEEsdCxJLGUpe2xldCBnPVh0KEEsdCxJLGUpLHI9W107cmV0dXJuIGcub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8udHlwZT09PUQuQmluYXJ5U3RyZWFtfHxvLnR5cGU9PT1ELkJpbmFyeUZpbGUpe2xldCBuPW8uZGF0YTtyLnB1c2gobil9ZWxzZSBpZihvLnR5cGU9PT1ELkltYWdlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLl90KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuTWVzaCl7bGV0IG49by5kYXRhO3IucHVzaCguLi52dChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELlBvbHlEYXRhKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLiR0KG4pKX19KSxGQShnLHp0KHIsITApKX12YXIgQUk9TmU7dmFyIFVlPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsSSxlLGcscil7bGV0IG89YXdhaXQgeHQoQSx0LHIpO3JldHVybiBhd2FpdCBBSShvLEksZSxnKX19O2lBKFVlKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO2RyKHlyKTtleHBvcnR7WUEgYXMgYmlvUmFkUmVhZEltYWdlLHFBIGFzIGJpb1JhZFdyaXRlSW1hZ2UsVUEgYXMgYm1wUmVhZEltYWdlLE5BIGFzIGJtcFdyaXRlSW1hZ2UsWSBhcyBleHRlbnNpb25Ub0ltYWdlSW8scnQgYXMgZmRmUmVhZEltYWdlLGZhIGFzIGZkZldyaXRlSW1hZ2UsJEEgYXMgZ2RjbVJlYWRJbWFnZSxldCBhcyBnZGNtV3JpdGVJbWFnZSxfQSBhcyBnZTRSZWFkSW1hZ2UsVkEgYXMgZ2U0V3JpdGVJbWFnZSxaQSBhcyBnZTVSZWFkSW1hZ2UsWEEgYXMgZ2U1V3JpdGVJbWFnZSx2QSBhcyBnZUFkd1JlYWRJbWFnZSx6QSBhcyBnZUFkd1dyaXRlSW1hZ2UseSBhcyBnZXREZWZhdWx0V2ViV29ya2VyLGQgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsRSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLEtBIGFzIGdpcGxSZWFkSW1hZ2UsakEgYXMgZ2lwbFdyaXRlSW1hZ2UsU0EgYXMgaGRmNVJlYWRJbWFnZSxPQSBhcyBoZGY1V3JpdGVJbWFnZSxSQSBhcyBqcGVnUmVhZEltYWdlLGtBIGFzIGpwZWdXcml0ZUltYWdlLEpBIGFzIGxzbVJlYWRJbWFnZSxMQSBhcyBsc21Xcml0ZUltYWdlLENBIGFzIG1ldGFSZWFkSW1hZ2UsRUEgYXMgbWV0YVdyaXRlSW1hZ2UsTUEgYXMgbWdoUmVhZEltYWdlLEhBIGFzIG1naFdyaXRlSW1hZ2UsUEEgYXMgbWluY1JlYWRJbWFnZSx4QSBhcyBtaW5jV3JpdGVJbWFnZSxUQSBhcyBtcmNSZWFkSW1hZ2UsR0EgYXMgbXJjV3JpdGVJbWFnZSxoQSBhcyBuaWZ0aVJlYWRJbWFnZSx3QSBhcyBuaWZ0aVdyaXRlSW1hZ2UsYkEgYXMgbnJyZFJlYWRJbWFnZSxEQSBhcyBucnJkV3JpdGVJbWFnZSxCQSBhcyBwbmdSZWFkSW1hZ2UsZEEgYXMgcG5nV3JpdGVJbWFnZSxzdCBhcyByZWFkSW1hZ2UsbGEgYXMgcmVhZEltYWdlRmlsZVNlcmllcyxtbyBhcyByZWFkSW1hZ2VIdHRwLEF0IGFzIHNjYW5jb1JlYWRJbWFnZSx0dCBhcyBzY2FuY29Xcml0ZUltYWdlLF9JIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsZHIgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsSEkgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCx5QSBhcyB0aWZmUmVhZEltYWdlLFFBIGFzIHRpZmZXcml0ZUltYWdlLFdBIGFzIHZ0a1JlYWRJbWFnZSxGQSBhcyB2dGtXcml0ZUltYWdlLGl0IGFzIHdhc21SZWFkSW1hZ2Usb3QgYXMgd2FzbVdyaXRlSW1hZ2UsYXQgYXMgd2FzbVpzdGRSZWFkSW1hZ2UsbnQgYXMgd2FzbVpzdGRXcml0ZUltYWdlLG1hIGFzIHdyaXRlSW1hZ2V9OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/image-io/python/itkwasm-image-io/tests/fixtures.py b/packages/image-io/python/itkwasm-image-io/tests/fixtures.py index 324b9aa7a..7109e7a77 100644 --- a/packages/image-io/python/itkwasm-image-io/tests/fixtures.py +++ b/packages/image-io/python/itkwasm-image-io/tests/fixtures.py @@ -12,6 +12,10 @@ def package_wheel(): return f"itkwasm_image_io-{test_package_version}-py3-none-any.whl" +@pytest.fixture +def emscripten_package_wheel(): + return f"itkwasm_image_io_emscripten-{test_package_version}-py3-none-any.whl" + @pytest.fixture def input_data(): from pathlib import Path diff --git a/packages/image-io/python/itkwasm-image-io/tests/test_bio_rad_async.py b/packages/image-io/python/itkwasm-image-io/tests/test_bio_rad_async.py index c4c38e8b0..2b16a7042 100644 --- a/packages/image-io/python/itkwasm-image-io/tests/test_bio_rad_async.py +++ b/packages/image-io/python/itkwasm-image-io/tests/test_bio_rad_async.py @@ -5,12 +5,13 @@ import pytest from pytest_pyodide import run_in_pyodide -from .fixtures import package_wheel, input_data +from .fixtures import emscripten_package_wheel, package_wheel, input_data @pytest.mark.driver_timeout(30) @run_in_pyodide(packages=['micropip']) -async def test_bio_rad_async(selenium, package_wheel, input_data): +async def test_bio_rad_async(selenium, emscripten_package_wheel, package_wheel, input_data): import micropip + await micropip.install(emscripten_package_wheel) await micropip.install(package_wheel) def write_input_data_to_fs(input_data, filename): with open(filename, 'wb') as fp: diff --git a/packages/image-io/python/itkwasm-image-io/tests/test_metaimage_async.py b/packages/image-io/python/itkwasm-image-io/tests/test_metaimage_async.py index e75454e52..d3fdd27b8 100644 --- a/packages/image-io/python/itkwasm-image-io/tests/test_metaimage_async.py +++ b/packages/image-io/python/itkwasm-image-io/tests/test_metaimage_async.py @@ -4,11 +4,12 @@ pytest.skip("Skipping pyodide tests on older Python", allow_module_level=True) from pytest_pyodide import run_in_pyodide -from .fixtures import package_wheel, input_data +from .fixtures import emscripten_package_wheel, package_wheel, input_data @run_in_pyodide(packages=['micropip']) -async def test_metaimage_async(selenium, package_wheel, input_data): +async def test_metaimage_async(selenium, emscripten_package_wheel, package_wheel, input_data): import micropip + await micropip.install(emscripten_package_wheel) await micropip.install(package_wheel) def write_input_data_to_fs(input_data, filename): with open(filename, 'wb') as fp: diff --git a/packages/image-io/python/itkwasm-image-io/tests/test_read_write_image_async.py b/packages/image-io/python/itkwasm-image-io/tests/test_read_write_image_async.py index 1345224e8..ddf10a791 100644 --- a/packages/image-io/python/itkwasm-image-io/tests/test_read_write_image_async.py +++ b/packages/image-io/python/itkwasm-image-io/tests/test_read_write_image_async.py @@ -4,11 +4,12 @@ pytest.skip("Skipping pyodide tests on older Python", allow_module_level=True) from pytest_pyodide import run_in_pyodide -from .fixtures import package_wheel, input_data +from .fixtures import emscripten_package_wheel, package_wheel, input_data @run_in_pyodide(packages=['micropip']) -async def test_read_write_image_async(selenium, package_wheel, input_data): +async def test_read_write_image_async(selenium, emscripten_package_wheel, package_wheel, input_data): import micropip + await micropip.install(emscripten_package_wheel) await micropip.install(package_wheel) def write_input_data_to_fs(input_data, filename): with open(filename, 'wb') as fp: diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 86ee126db..66013e671 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -631,9 +631,6 @@ importers: '@itk-wasm/dam': specifier: ^1.1.0 version: 1.1.1 - '@thewtex/setup-micromamba': - specifier: ^1.9.7 - version: 1.9.7 itk-wasm: specifier: workspace:^ version: link:../core/typescript/itk-wasm From 516760cf280d8e2bad7e5a824bf6c5cdbbe0cb67 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Thu, 24 Oct 2024 15:31:37 -0400 Subject: [PATCH 28/39] chore(image-io): bump version to 1.3.1 --- .../itkwasm_image_io_emscripten/_version.py | 2 +- .../itkwasm_image_io_emscripten/js_package.py | 2 +- .../itkwasm-image-io-wasi/itkwasm_image_io_wasi/_version.py | 2 +- .../python/itkwasm-image-io/itkwasm_image_io/_version.py | 2 +- packages/image-io/typescript/package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/_version.py b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/_version.py index 67bc602ab..9c73af26b 100644 --- a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/_version.py +++ b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/_version.py @@ -1 +1 @@ -__version__ = "1.3.0" +__version__ = "1.3.1" diff --git a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py index 64d1d7334..b50ed14a3 100644 --- a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py +++ b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIGhyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgd3I9KGUsQSk9Pntmb3IodmFyIHQgaW4gQSlocihlLHQse2dldDpBW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIFJyPW5ldyBNYXAoW1siYm1wIiwiYm1wIl0sWyJkY20iLCJnZGNtIl0sWyJnaXBsIiwiZ2lwbCJdLFsiZ2lwbC5neiIsImdpcGwiXSxbImhkZjUiLCJoZGY1Il0sWyJqcGciLCJqcGVnIl0sWyJqcGVnIiwianBlZyJdLFsiaXdpIiwid2FzbSJdLFsiaXdpLmNib3IiLCJ3YXNtIl0sWyJpd2kuY2Jvci56c3QiLCJ3YXNtWnN0ZCJdLFsibHNtIiwibHNtIl0sWyJtbmMiLCJtbmMiXSxbIm1uYy5neiIsIm1uYyJdLFsibW5jMiIsIm1uYyJdLFsibWdoIiwibWdoIl0sWyJtZ3oiLCJtZ2giXSxbIm1naC5neiIsIm1naCJdLFsibWhhIiwibWV0YSJdLFsibWhkIiwibWV0YSJdLFsibXJjIiwibXJjIl0sWyJuaWEiLCJuaWZ0aSJdLFsibmlpIiwibmlmdGkiXSxbIm5paS5neiIsIm5pZnRpIl0sWyJoZHIiLCJuaWZ0aSJdLFsibnJyZCIsIm5ycmQiXSxbIm5oZHIiLCJucnJkIl0sWyJwbmciLCJwbmciXSxbInBpYyIsImJpb1JhZCJdLFsidGlmIiwidGlmZiJdLFsidGlmZiIsInRpZmYiXSxbInZ0ayIsInZ0ayJdLFsiaXNxIiwic2NhbmNvIl0sWyJhaW0iLCJzY2FuY28iXSxbImZkZiIsImZkZiJdXSksWT1Scjt2YXIga3I9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxoPWtyO3ZhciBicj17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0sRD1icjtmdW5jdGlvbiBEcihlLEEpe2xldCB0PW51bGw7c3dpdGNoKGUpe2Nhc2UgaC5VSW50ODp7dD1uZXcgVWludDhBcnJheShBKTticmVha31jYXNlIGguSW50ODp7dD1uZXcgSW50OEFycmF5KEEpO2JyZWFrfWNhc2UgaC5VSW50MTY6e3Q9bmV3IFVpbnQxNkFycmF5KEEpO2JyZWFrfWNhc2UgaC5JbnQxNjp7dD1uZXcgSW50MTZBcnJheShBKTticmVha31jYXNlIGguVUludDMyOnt0PW5ldyBVaW50MzJBcnJheShBKTticmVha31jYXNlIGguSW50MzI6e3Q9bmV3IEludDMyQXJyYXkoQSk7YnJlYWt9Y2FzZSBoLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnVWludDY0QXJyYXkoQSk6dD1uZXcgVWludDhBcnJheShBKTticmVha31jYXNlIGguSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnSW50NjRBcnJheShBKTp0PW5ldyBVaW50OEFycmF5KEEpO2JyZWFrfWNhc2UgRC5GbG9hdDMyOnt0PW5ldyBGbG9hdDMyQXJyYXkoQSk7YnJlYWt9Y2FzZSBELkZsb2F0NjQ6e3Q9bmV3IEZsb2F0NjRBcnJheShBKTticmVha31jYXNlIm51bGwiOnt0PW51bGw7YnJlYWt9Y2FzZSBudWxsOnt0PW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gdH12YXIgTj1Ecjt2YXIgV3I9e1Vua25vd246IlVua25vd24iLFNjYWxhcjoiU2NhbGFyIixSR0I6IlJHQiIsUkdCQToiUkdCQSIsT2Zmc2V0OiJPZmZzZXQiLFZlY3RvcjoiVmVjdG9yIixQb2ludDoiUG9pbnQiLENvdmFyaWFudFZlY3RvcjoiQ292YXJpYW50VmVjdG9yIixTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yOiJTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yIixEaWZmdXNpb25UZW5zb3IzRDoiRGlmZnVzaW9uVGVuc29yM0QiLENvbXBsZXg6IkNvbXBsZXgiLEZpeGVkQXJyYXk6IkZpeGVkQXJyYXkiLEFycmF5OiJBcnJheSIsTWF0cml4OiJNYXRyaXgiLFZhcmlhYmxlTGVuZ3RoVmVjdG9yOiJWYXJpYWJsZUxlbmd0aFZlY3RvciIsVmFyaWFibGVTaXplTWF0cml4OiJWYXJpYWJsZVNpemVNYXRyaXgifSxtZT1Xcjt2YXIgeGU9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoQT0yLHQ9aC5VSW50OCxyPW1lLlNjYWxhcixvPTEpe3RoaXMuZGltZW5zaW9uPUEsdGhpcy5jb21wb25lbnRUeXBlPXQsdGhpcy5waXhlbFR5cGU9cix0aGlzLmNvbXBvbmVudHM9b319LGd0PXhlO2Z1bmN0aW9uIEZyKGUsQSx0LHIsbyl7ZVtyK3QqQV09b312YXIgSXQ9RnI7dmFyIFRlPWNsYXNze2ltYWdlVHlwZTtuYW1lPSJJbWFnZSI7b3JpZ2luO3NwYWNpbmc7ZGlyZWN0aW9uO3NpemU7bWV0YWRhdGE7ZGF0YTtjb25zdHJ1Y3RvcihBPW5ldyBndCl7dGhpcy5pbWFnZVR5cGU9QTtsZXQgdD1BLmRpbWVuc2lvbjt0aGlzLm9yaWdpbj1uZXcgQXJyYXkodCksdGhpcy5vcmlnaW4uZmlsbCgwKSx0aGlzLnNwYWNpbmc9bmV3IEFycmF5KHQpLHRoaXMuc3BhY2luZy5maWxsKDEpLHRoaXMuZGlyZWN0aW9uPW5ldyBGbG9hdDY0QXJyYXkodCp0KSx0aGlzLmRpcmVjdGlvbi5maWxsKDApO2ZvcihsZXQgcj0wO3I8dDtyKyspSXQodGhpcy5kaXJlY3Rpb24sdCxyLHIsMSk7dGhpcy5zaXplPW5ldyBBcnJheSh0KSx0aGlzLnNpemUuZmlsbCgwKSx0aGlzLm1ldGFkYXRhPW5ldyBNYXAsdGhpcy5kYXRhPW51bGx9fSxqPVRlO2Z1bmN0aW9uIFVyKGUpe2xldCBBPW5ldyBqKGUuaW1hZ2VUeXBlKTtpZihBLm5hbWU9ZS5uYW1lLEEub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLEEuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyksQS5kaXJlY3Rpb249ZS5kaXJlY3Rpb24uc2xpY2UoKSxBLnNpemU9QXJyYXkuZnJvbShlLnNpemUpLGUuZGF0YSE9PW51bGwpe2xldCB0PWUuZGF0YS5jb25zdHJ1Y3RvcjtBLmRhdGE9bmV3IHQoZS5kYXRhLmxlbmd0aCksQS5kYXRhIT1udWxsJiZBLmRhdGEuc2V0KGUuZGF0YSwwKX1yZXR1cm4gQX12YXIgR2U9VXI7ZnVuY3Rpb24gTnIoZSl7aWYoZS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgQT1lWzBdO2lmKEEuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgaihBLmltYWdlVHlwZSk7dC5vcmlnaW49QXJyYXkuZnJvbShBLm9yaWdpbiksdC5zcGFjaW5nPUFycmF5LmZyb20oQS5zcGFjaW5nKTtsZXQgcj10LmltYWdlVHlwZS5kaW1lbnNpb247dC5kaXJlY3Rpb249QS5kaXJlY3Rpb24uc2xpY2UoKTtsZXQgbz1yLTE7dC5zaXplPUFycmF5LmZyb20oQS5zaXplKTtsZXQgaT1lLnJlZHVjZSgoYSxuKT0+YStuLnNpemVbb10sMCk7dC5zaXplW29dPWk7bGV0IHM9dC5zaXplLnJlZHVjZSgoYSxuKT0+YSpuLDEpKnQuaW1hZ2VUeXBlLmNvbXBvbmVudHMsbT1BLmRhdGEuY29uc3RydWN0b3I7dC5kYXRhPW5ldyBtKHMpO2xldCBmPXQuaW1hZ2VUeXBlLmNvbXBvbmVudHM7Zm9yKGxldCBhPTA7YTx0LnNpemUubGVuZ3RoLTE7YSsrKWYqPXQuc2l6ZVthXTtsZXQgcD0wO2lmKHQuZGF0YSE9bnVsbClmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl0LmRhdGEuc2V0KGVbYV0uZGF0YSxmKnApLHArPWVbYV0uc2l6ZVtvXTtlbHNlIHRocm93IEVycm9yKCJDb3VsZCBub3QgY3JlYXRlIHJlc3VsdCBpbWFnZSBkYXRhLiIpO3JldHVybiB0fXZhciBKZT1OcjtmdW5jdGlvbiBTcihlKXtsZXQgQT1lLnNsaWNlKChlLmxhc3RJbmRleE9mKCIuIiktMT4+PjApKzIpO2lmKEEudG9Mb3dlckNhc2UoKT09PSJneiIpe2xldCB0PWUuc2xpY2UoMCwtMykubGFzdEluZGV4T2YoIi4iKTtBPWUuc2xpY2UoKHQtMT4+PjApKzIpfWVsc2UgaWYoQS50b0xvd2VyQ2FzZSgpPT09ImNib3IiKXtsZXQgdD1lLnNsaWNlKDAsLTUpLmxhc3RJbmRleE9mKCIuIik7QT1lLnNsaWNlKCh0LTE+Pj4wKSsyKX1lbHNlIGlmKEEudG9Mb3dlckNhc2UoKT09PSJ6c3QiKXtsZXQgdD1lLnNsaWNlKDAsLTEwKS5sYXN0SW5kZXhPZigiLiIpO0E9ZS5zbGljZSgodC0xPj4+MCkrMil9ZWxzZSBpZihBLnRvTG93ZXJDYXNlKCk9PT0iemlwIil7bGV0IHQ9ZS5zbGljZSgwLC00KS5sYXN0SW5kZXhPZigiLiIpO0E9ZS5zbGljZSgodC0xPj4+MCkrMil9cmV0dXJuIEF9dmFyIHRlPVNyO2Z1bmN0aW9uIE9yKGUsQSl7bGV0IHQ9ey4uLmUuaW1hZ2VUeXBlfTtpZih0eXBlb2YgQTwidSImJnR5cGVvZiBBLnBpeGVsVHlwZTwidSImJih0LnBpeGVsVHlwZT1BLnBpeGVsVHlwZSxBLnBpeGVsVHlwZT09PW1lLlNjYWxhciYmdC5jb21wb25lbnRzIT09MSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FzdCBtdWx0aS1jb21wb25lbnQgaW1hZ2UgdG8gYSBzY2FsYXIgaW1hZ2UiKTt0eXBlb2YgQTwidSImJnR5cGVvZiBBLmNvbXBvbmVudFR5cGU8InUiJiZBLmNvbXBvbmVudFR5cGUhPT1lLmltYWdlVHlwZS5jb21wb25lbnRUeXBlJiYodC5jb21wb25lbnRUeXBlPUEuY29tcG9uZW50VHlwZSk7bGV0IHI9bmV3IGoodCk7aWYoci5uYW1lPWUubmFtZSxyLm9yaWdpbj1BcnJheS5mcm9tKGUub3JpZ2luKSxyLnNwYWNpbmc9QXJyYXkuZnJvbShlLnNwYWNpbmcpLHIuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCksci5zaXplPUFycmF5LmZyb20oZS5zaXplKSxyLm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGUubWV0YWRhdGEpKSkpLGUuZGF0YSE9PW51bGwpaWYodHlwZW9mIEE8InUiJiZ0eXBlb2YgQS5jb21wb25lbnRUeXBlPCJ1IiYmQS5jb21wb25lbnRUeXBlIT09ZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBoLlVJbnQ4OmNhc2UgaC5JbnQ4OmNhc2UgaC5VSW50MTY6Y2FzZSBoLkludDE2OmNhc2UgaC5VSW50MzI6Y2FzZSBoLkludDMyOmNhc2UgRC5GbG9hdDMyOmNhc2UgRC5GbG9hdDY0OnN3aXRjaChyLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIGguVUludDg6ci5kYXRhPW5ldyBVaW50OEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguVUludDE2OnIuZGF0YT1uZXcgVWludDE2QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguSW50MTY6ci5kYXRhPW5ldyBJbnQxNkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDMyOnIuZGF0YT1uZXcgSW50MzJBcnJheShlLmRhdGEpO2JyZWFrO2Nhc2UgRC5GbG9hdDMyOnIuZGF0YT1uZXcgRmxvYXQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBELkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguVUludDY0OnIuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWs7Y2FzZSBoLkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEubGVuZ3RoKTtmb3IobGV0IG89MDtvPHIuZGF0YS5sZW5ndGg7bysrKXIuZGF0YVtvXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWt9YnJlYWs7Y2FzZSBoLlVJbnQ2NDpjYXNlIGguSW50NjQ6c3dpdGNoKHIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgaC5VSW50ODpyLmRhdGE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQxNjpyLmRhdGE9bmV3IFVpbnQxNkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2UgaC5JbnQxNjpyLmRhdGE9bmV3IEludDE2QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2UgaC5JbnQzMjpyLmRhdGE9bmV3IEludDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBELkZsb2F0MzI6ci5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBELkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQ2NDpyLmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG89ZS5kYXRhLmNvbnN0cnVjdG9yO3IuZGF0YT1uZXcgbyhlLmRhdGEubGVuZ3RoKSxyLmRhdGEhPW51bGwmJnIuZGF0YS5zZXQoZS5kYXRhLDApfXJldHVybiByfXZhciBKPU9yO3ZhciBMZT1jbGFzc3tmY247d29ya2VyUXVldWU7cnVuSW5mbztjb25zdHJ1Y3RvcihBLHQpe3RoaXMuZmNuPXQsdGhpcy53b3JrZXJRdWV1ZT1uZXcgQXJyYXkoQSksdGhpcy53b3JrZXJRdWV1ZS5maWxsKG51bGwpLHRoaXMucnVuSW5mbz1bXX1ydW5UYXNrcyhBLHQ9bnVsbCl7bGV0IHI9e3Rhc2tRdWV1ZTpbXSxyZXN1bHRzOltdLGFkZGluZ1Rhc2tzOiExLHBvc3Rwb25lZDohMSxydW5uaW5nV29ya2VyczowLGluZGV4OjAsY29tcGxldGVkVGFza3M6MCxwcm9ncmVzc0NhbGxiYWNrOnQsY2FuY2VsZWQ6ITF9O3JldHVybiB0aGlzLnJ1bkluZm8ucHVzaChyKSxyLmluZGV4PXRoaXMucnVuSW5mby5sZW5ndGgtMSx7cHJvbWlzZTpuZXcgUHJvbWlzZSgobyxpKT0+e3IucmVzb2x2ZT1vLHIucmVqZWN0PWksci5yZXN1bHRzPW5ldyBBcnJheShBLmxlbmd0aCksci5jb21wbGV0ZWRUYXNrcz0wLHIuYWRkaW5nVGFza3M9ITAsQS5mb3JFYWNoKChzLG0pPT57dGhpcy5hZGRUYXNrKHIuaW5kZXgsbSxzKX0pLHIuYWRkaW5nVGFza3M9ITF9KSxydW5JZDpyLmluZGV4fX10ZXJtaW5hdGVXb3JrZXJzKCl7Zm9yKGxldCBBPTA7QTx0aGlzLndvcmtlclF1ZXVlLmxlbmd0aDtBKyspe2xldCB0PXRoaXMud29ya2VyUXVldWVbQV07dD8udGVybWluYXRlKCksdGhpcy53b3JrZXJRdWV1ZVtBXT1udWxsfX1jYW5jZWwoQSl7bGV0IHQ9dGhpcy5ydW5JbmZvW0FdO3QhPW51bGwmJih0LmNhbmNlbGVkPSEwKX1hZGRUYXNrKEEsdCxyKXtsZXQgbz10aGlzLnJ1bkluZm9bQV07aWYobz8uY2FuY2VsZWQ9PT0hMCl7by5yZWplY3QoIlJlbWFpbmluZyB0YXNrcyBjYW5jZWxlZCIpLHRoaXMuY2xlYXJUYXNrKG8uaW5kZXgpO3JldHVybn1pZih0aGlzLndvcmtlclF1ZXVlLmxlbmd0aD4wKXtsZXQgaT10aGlzLndvcmtlclF1ZXVlLnBvcCgpO28ucnVubmluZ1dvcmtlcnMrKyxyW3IubGVuZ3RoLTFdLndlYldvcmtlcj1pLHRoaXMuZmNuKC4uLnIpLnRoZW4oKHt3ZWJXb3JrZXI6cywuLi5tfSk9PntpZih0aGlzLndvcmtlclF1ZXVlLnB1c2gocyksdGhpcy5ydW5JbmZvW0FdIT09bnVsbCl7aWYoby5ydW5uaW5nV29ya2Vycy0tLG8ucmVzdWx0c1t0XT1tLG8uY29tcGxldGVkVGFza3MrKyxvLnByb2dyZXNzQ2FsbGJhY2shPW51bGwmJm8ucHJvZ3Jlc3NDYWxsYmFjayhvLmNvbXBsZXRlZFRhc2tzLG8ucmVzdWx0cy5sZW5ndGgpLG8udGFza1F1ZXVlLmxlbmd0aD4wKXtsZXQgZj1vLnRhc2tRdWV1ZS5zaGlmdCgpO3RoaXMuYWRkVGFzayhBLGZbMF0sZlsxXSl9ZWxzZSBpZighby5hZGRpbmdUYXNrcyYmby5ydW5uaW5nV29ya2Vycz09PTApe2xldCBmPW8ucmVzdWx0cztvLnJlc29sdmUoZiksdGhpcy5jbGVhclRhc2soby5pbmRleCl9fX0pLmNhdGNoKHM9PntvLnJlamVjdChzKSx0aGlzLmNsZWFyVGFzayhvLmluZGV4KX0pfWVsc2Ugby5ydW5uaW5nV29ya2VycyE9PTB8fG8ucG9zdHBvbmVkP28udGFza1F1ZXVlLnB1c2goW3Qscl0pOihvLnBvc3Rwb25lZD0hMCxzZXRUaW1lb3V0KCgpPT57by5wb3N0cG9uZWQ9ITEsdGhpcy5hZGRUYXNrKG8uaW5kZXgsdCxyKX0sNTApKX1jbGVhclRhc2soQSl7dGhpcy5ydW5JbmZvW0FdLnJlc3VsdHM9W10sdGhpcy5ydW5JbmZvW0FdLnRhc2tRdWV1ZT1bXSx0aGlzLnJ1bkluZm9bQV0ucHJvZ3Jlc3NDYWxsYmFjaz1udWxsLHRoaXMucnVuSW5mb1tBXS5jYW5jZWxlZD1udWxsLHRoaXMucnVuSW5mb1tBXS5yZWplY3Q9KCk9Pnt9LHRoaXMucnVuSW5mb1tBXS5yZXNvbHZlPSgpPT57fX19LE1lPUxlO3ZhciBQcj17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEk9UHI7dmFyIHB0PVN5bWJvbCgiQ29tbGluay5wcm94eSIpLHhyPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHFlPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxIZT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZmU9U3ltYm9sKCJDb21saW5rLnRocm93biIpLG10PWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLFRyPXtjYW5IYW5kbGU6ZT0+bXQoZSkmJmVbcHRdLHNlcmlhbGl6ZShlKXtsZXR7cG9ydDE6QSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGZ0KGUsQSksW3QsW3RdXX0sZGVzZXJpYWxpemUoZSl7cmV0dXJuIGUuc3RhcnQoKSxLZShlKX19LEdyPXtjYW5IYW5kbGU6ZT0+bXQoZSkmJmZlIGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IEE7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9BPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06QT17aXNFcnJvcjohMSx2YWx1ZTplfSxbQSxbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSx1dD1uZXcgTWFwKFtbInByb3h5IixUcl0sWyJ0aHJvdyIsR3JdXSk7ZnVuY3Rpb24gSnIoZSxBKXtmb3IobGV0IHQgb2YgZSlpZihBPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KEEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGZ0KGUsQT1nbG9iYWxUaGlzLHQ9WyIqIl0pe0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihvKXtpZighb3x8IW8uZGF0YSlyZXR1cm47aWYoIUpyKHQsby5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke28ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOmksdHlwZTpzLHBhdGg6bX09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sby5kYXRhKSxmPShvLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKHEpLHA7dHJ5e2xldCBhPW0uc2xpY2UoMCwtMSkucmVkdWNlKCh1LGcpPT51W2ddLGUpLG49bS5yZWR1Y2UoKHUsZyk9PnVbZ10sZSk7c3dpdGNoKHMpe2Nhc2UiR0VUIjpwPW47YnJlYWs7Y2FzZSJTRVQiOmFbbS5zbGljZSgtMSlbMF1dPXEoby5kYXRhLnZhbHVlKSxwPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOnA9bi5hcHBseShhLGYpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IHU9bmV3IG4oLi4uZik7cD1xcih1KX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOnUscG9ydDI6Z309bmV3IE1lc3NhZ2VDaGFubmVsO2Z0KGUsZykscD1qZSh1LFt1XSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpwPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goYSl7cD17dmFsdWU6YSxbZmVdOjB9fVByb21pc2UucmVzb2x2ZShwKS5jYXRjaChhPT4oe3ZhbHVlOmEsW2ZlXTowfSkpLnRoZW4oYT0+e2xldFtuLHVdPWRlKGEpO0EucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLHtpZDppfSksdSkscz09PSJSRUxFQVNFIiYmKEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksY3QoQSksSGUgaW4gZSYmdHlwZW9mIGVbSGVdPT0iZnVuY3Rpb24iJiZlW0hlXSgpKX0pLmNhdGNoKGE9PntsZXRbbix1XT1kZSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2ZlXTowfSk7QS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbikse2lkOml9KSx1KX0pfSksQS5zdGFydCYmQS5zdGFydCgpfWZ1bmN0aW9uIExyKGUpe3JldHVybiBlLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIGN0KGUpe0xyKGUpJiZlLmNsb3NlKCl9ZnVuY3Rpb24gS2UoZSxBKXtyZXR1cm4gWWUoZSxbXSxBKX1mdW5jdGlvbiB1ZShlKXtpZihlKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gQnQoZSl7cmV0dXJuIHYoZSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57Y3QoZSl9KX12YXIgY2U9bmV3IFdlYWtNYXAsQmU9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShlPT57bGV0IEE9KGNlLmdldChlKXx8MCktMTtjZS5zZXQoZSxBKSxBPT09MCYmQnQoZSl9KTtmdW5jdGlvbiBNcihlLEEpe2xldCB0PShjZS5nZXQoQSl8fDApKzE7Y2Uuc2V0KEEsdCksQmUmJkJlLnJlZ2lzdGVyKGUsQSxlKX1mdW5jdGlvbiBIcihlKXtCZSYmQmUudW5yZWdpc3RlcihlKX1mdW5jdGlvbiBZZShlLEE9W10sdD1mdW5jdGlvbigpe30pe2xldCByPSExLG89bmV3IFByb3h5KHQse2dldChpLHMpe2lmKHVlKHIpLHM9PT1xZSlyZXR1cm4oKT0+e0hyKG8pLEJ0KGUpLHI9ITB9O2lmKHM9PT0idGhlbiIpe2lmKEEubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+b307bGV0IG09dihlLHt0eXBlOiJHRVQiLHBhdGg6QS5tYXAoZj0+Zi50b1N0cmluZygpKX0pLnRoZW4ocSk7cmV0dXJuIG0udGhlbi5iaW5kKG0pfXJldHVybiBZZShlLFsuLi5BLHNdKX0sc2V0KGkscyxtKXt1ZShyKTtsZXRbZixwXT1kZShtKTtyZXR1cm4gdihlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLkEsc10ubWFwKGE9PmEudG9TdHJpbmcoKSksdmFsdWU6Zn0scCkudGhlbihxKX0sYXBwbHkoaSxzLG0pe3VlKHIpO2xldCBmPUFbQS5sZW5ndGgtMV07aWYoZj09PXhyKXJldHVybiB2KGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4ocSk7aWYoZj09PSJiaW5kIilyZXR1cm4gWWUoZSxBLnNsaWNlKDAsLTEpKTtsZXRbcCxhXT1sdChtKTtyZXR1cm4gdihlLHt0eXBlOiJBUFBMWSIscGF0aDpBLm1hcChuPT5uLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpwfSxhKS50aGVuKHEpfSxjb25zdHJ1Y3QoaSxzKXt1ZShyKTtsZXRbbSxmXT1sdChzKTtyZXR1cm4gdihlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6QS5tYXAocD0+cC50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6bX0sZikudGhlbihxKX19KTtyZXR1cm4gTXIobyxlKSxvfWZ1bmN0aW9uIFlyKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIGx0KGUpe2xldCBBPWUubWFwKGRlKTtyZXR1cm5bQS5tYXAodD0+dFswXSksWXIoQS5tYXAodD0+dFsxXSkpXX12YXIgZHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gamUoZSxBKXtyZXR1cm4gZHQuc2V0KGUsQSksZX1mdW5jdGlvbiBxcihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbcHRdOiEwfSl9ZnVuY3Rpb24gZGUoZSl7Zm9yKGxldFtBLHRdb2YgdXQpaWYodC5jYW5IYW5kbGUoZSkpe2xldFtyLG9dPXQuc2VyaWFsaXplKGUpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTpBLHZhbHVlOnJ9LG9dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTplfSxkdC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBxKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHV0LmdldChlLm5hbWUpLmRlc2VyaWFsaXplKGUudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gZS52YWx1ZX19ZnVuY3Rpb24gdihlLEEsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbz1LcigpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaShzKXshcy5kYXRhfHwhcy5kYXRhLmlkfHxzLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpKSxyKHMuZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sQSksdCl9KX1mdW5jdGlvbiBLcigpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gcmUoZSxBKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseShBLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpqcn09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6X2V9PU9iamVjdCxFZT0oZT0+QT0+e2xldCB0PWpyLmNhbGwoQSk7cmV0dXJuIGVbdF18fChlW3RdPXQuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSx4PWU9PihlPWUudG9Mb3dlckNhc2UoKSxBPT5FZShBKT09PWUpLHllPWU9PkE9PnR5cGVvZiBBPT09ZSx7aXNBcnJheTp6fT1BcnJheSxpZT15ZSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gdnIoZSl7cmV0dXJuIGUhPT1udWxsJiYhaWUoZSkmJmUuY29uc3RydWN0b3IhPT1udWxsJiYhaWUoZS5jb25zdHJ1Y3RvcikmJlMoZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIFF0PXgoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24genIoZSl7bGV0IEE7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9BPUFycmF5QnVmZmVyLmlzVmlldyhlKTpBPWUmJmUuYnVmZmVyJiZRdChlLmJ1ZmZlciksQX12YXIgX3I9eWUoInN0cmluZyIpLFM9eWUoImZ1bmN0aW9uIiksaHQ9eWUoIm51bWJlciIpLFFlPWU9PmUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCIsVnI9ZT0+ZT09PSEwfHxlPT09ITEsQ2U9ZT0+e2lmKEVlKGUpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IEE9X2UoZSk7cmV0dXJuKEE9PT1udWxsfHxBPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKEEpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGUpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBlKX0sWnI9eCgiRGF0ZSIpLFhyPXgoIkZpbGUiKSwkcj14KCJCbG9iIiksZWk9eCgiRmlsZUxpc3QiKSxBaT1lPT5RZShlKSYmUyhlLnBpcGUpLHRpPWU9PntsZXQgQTtyZXR1cm4gZSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmZSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxTKGUuYXBwZW5kKSYmKChBPUVlKGUpKT09PSJmb3JtZGF0YSJ8fEE9PT0ib2JqZWN0IiYmUyhlLnRvU3RyaW5nKSYmZS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxyaT14KCJVUkxTZWFyY2hQYXJhbXMiKSxpaT1lPT5lLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gb2UoZSxBLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihlPT09bnVsbHx8dHlwZW9mIGU+InUiKXJldHVybjtsZXQgcixvO2lmKHR5cGVvZiBlIT0ib2JqZWN0IiYmKGU9W2VdKSx6KGUpKWZvcihyPTAsbz1lLmxlbmd0aDtyPG87cisrKUEuY2FsbChudWxsLGVbcl0scixlKTtlbHNle2xldCBpPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSk6T2JqZWN0LmtleXMoZSkscz1pLmxlbmd0aCxtO2ZvcihyPTA7cjxzO3IrKyltPWlbcl0sQS5jYWxsKG51bGwsZVttXSxtLGUpfX1mdW5jdGlvbiB3dChlLEEpe0E9QS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKGUpLHI9dC5sZW5ndGgsbztmb3IoO3ItLSA+MDspaWYobz10W3JdLEE9PT1vLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG87cmV0dXJuIG51bGx9dmFyIFJ0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsa3Q9ZT0+IWllKGUpJiZlIT09UnQ7ZnVuY3Rpb24gemUoKXtsZXR7Y2FzZWxlc3M6ZX09a3QodGhpcykmJnRoaXN8fHt9LEE9e30sdD0ocixvKT0+e2xldCBpPWUmJnd0KEEsbyl8fG87Q2UoQVtpXSkmJkNlKHIpP0FbaV09emUoQVtpXSxyKTpDZShyKT9BW2ldPXplKHt9LHIpOnoocik/QVtpXT1yLnNsaWNlKCk6QVtpXT1yfTtmb3IobGV0IHI9MCxvPWFyZ3VtZW50cy5sZW5ndGg7cjxvO3IrKylhcmd1bWVudHNbcl0mJm9lKGFyZ3VtZW50c1tyXSx0KTtyZXR1cm4gQX12YXIgb2k9KGUsQSx0LHthbGxPd25LZXlzOnJ9PXt9KT0+KG9lKEEsKG8saSk9Pnt0JiZTKG8pP2VbaV09cmUobyx0KTplW2ldPW99LHthbGxPd25LZXlzOnJ9KSxlKSxhaT1lPT4oZS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihlPWUuc2xpY2UoMSkpLGUpLG5pPShlLEEsdCxyKT0+e2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQS5wcm90b3R5cGUsciksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3VwZXIiLHt2YWx1ZTpBLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oZS5wcm90b3R5cGUsdCl9LHNpPShlLEEsdCxyKT0+e2xldCBvLGkscyxtPXt9O2lmKEE9QXx8e30sZT09bnVsbClyZXR1cm4gQTtkb3tmb3Iobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSxpPW8ubGVuZ3RoO2ktLSA+MDspcz1vW2ldLCghcnx8cihzLGUsQSkpJiYhbVtzXSYmKEFbc109ZVtzXSxtW3NdPSEwKTtlPXQhPT0hMSYmX2UoZSl9d2hpbGUoZSYmKCF0fHx0KGUsQSkpJiZlIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIEF9LGdpPShlLEEsdCk9PntlPVN0cmluZyhlKSwodD09PXZvaWQgMHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKSx0LT1BLmxlbmd0aDtsZXQgcj1lLmluZGV4T2YoQSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0sSWk9ZT0+e2lmKCFlKXJldHVybiBudWxsO2lmKHooZSkpcmV0dXJuIGU7bGV0IEE9ZS5sZW5ndGg7aWYoIWh0KEEpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShBKTtmb3IoO0EtLSA+MDspdFtBXT1lW0FdO3JldHVybiB0fSxsaT0oZT0+QT0+ZSYmQSBpbnN0YW5jZW9mIGUpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmX2UoVWludDhBcnJheSkpLHBpPShlLEEpPT57bGV0IHI9KGUmJmVbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChlKSxvO2Zvcig7KG89ci5uZXh0KCkpJiYhby5kb25lOyl7bGV0IGk9by52YWx1ZTtBLmNhbGwoZSxpWzBdLGlbMV0pfX0sbWk9KGUsQSk9PntsZXQgdCxyPVtdO2Zvcig7KHQ9ZS5leGVjKEEpKSE9PW51bGw7KXIucHVzaCh0KTtyZXR1cm4gcn0sdWk9eCgiSFRNTEZvcm1FbGVtZW50IiksZmk9ZT0+ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxyLG8pe3JldHVybiByLnRvVXBwZXJDYXNlKCkrb30pLEV0PSgoe2hhc093blByb3BlcnR5OmV9KT0+KEEsdCk9PmUuY2FsbChBLHQpKShPYmplY3QucHJvdG90eXBlKSxjaT14KCJSZWdFeHAiKSxidD0oZSxBKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGUpLHI9e307b2UodCwobyxpKT0+e2xldCBzOyhzPUEobyxpLGUpKSE9PSExJiYocltpXT1zfHxvKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUscil9LEJpPWU9PntidChlLChBLHQpPT57aWYoUyhlKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHQpIT09LTEpcmV0dXJuITE7bGV0IHI9ZVt0XTtpZihTKHIpKXtpZihBLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIEEpe0Eud3JpdGFibGU9ITE7cmV0dXJufUEuc2V0fHwoQS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrdCsiJyIpfSl9fSl9LGRpPShlLEEpPT57bGV0IHQ9e30scj1vPT57by5mb3JFYWNoKGk9Pnt0W2ldPSEwfSl9O3JldHVybiB6KGUpP3IoZSk6cihTdHJpbmcoZSkuc3BsaXQoQSkpLHR9LENpPSgpPT57fSxFaT0oZSxBKT0+KGU9K2UsTnVtYmVyLmlzRmluaXRlKGUpP2U6QSksdmU9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix5dD0iMDEyMzQ1Njc4OSIsRHQ9e0RJR0lUOnl0LEFMUEhBOnZlLEFMUEhBX0RJR0lUOnZlK3ZlLnRvVXBwZXJDYXNlKCkreXR9LHlpPShlPTE2LEE9RHQuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDpyfT1BO2Zvcig7ZS0tOyl0Kz1BW01hdGgucmFuZG9tKCkqcnwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gUWkoZSl7cmV0dXJuISEoZSYmUyhlLmFwcGVuZCkmJmVbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJmVbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIGhpPWU9PntsZXQgQT1uZXcgQXJyYXkoMTApLHQ9KHIsbyk9PntpZihRZShyKSl7aWYoQS5pbmRleE9mKHIpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gcikpe0Fbb109cjtsZXQgaT16KHIpP1tdOnt9O3JldHVybiBvZShyLChzLG0pPT57bGV0IGY9dChzLG8rMSk7IWllKGYpJiYoaVttXT1mKX0pLEFbb109dm9pZCAwLGl9fXJldHVybiByfTtyZXR1cm4gdChlLDApfSx3aT14KCJBc3luY0Z1bmN0aW9uIiksUmk9ZT0+ZSYmKFFlKGUpfHxTKGUpKSYmUyhlLnRoZW4pJiZTKGUuY2F0Y2gpLGM9e2lzQXJyYXk6eixpc0FycmF5QnVmZmVyOlF0LGlzQnVmZmVyOnZyLGlzRm9ybURhdGE6dGksaXNBcnJheUJ1ZmZlclZpZXc6enIsaXNTdHJpbmc6X3IsaXNOdW1iZXI6aHQsaXNCb29sZWFuOlZyLGlzT2JqZWN0OlFlLGlzUGxhaW5PYmplY3Q6Q2UsaXNVbmRlZmluZWQ6aWUsaXNEYXRlOlpyLGlzRmlsZTpYcixpc0Jsb2I6JHIsaXNSZWdFeHA6Y2ksaXNGdW5jdGlvbjpTLGlzU3RyZWFtOkFpLGlzVVJMU2VhcmNoUGFyYW1zOnJpLGlzVHlwZWRBcnJheTpsaSxpc0ZpbGVMaXN0OmVpLGZvckVhY2g6b2UsbWVyZ2U6emUsZXh0ZW5kOm9pLHRyaW06aWksc3RyaXBCT006YWksaW5oZXJpdHM6bmksdG9GbGF0T2JqZWN0OnNpLGtpbmRPZjpFZSxraW5kT2ZUZXN0OngsZW5kc1dpdGg6Z2ksdG9BcnJheTpJaSxmb3JFYWNoRW50cnk6cGksbWF0Y2hBbGw6bWksaXNIVE1MRm9ybTp1aSxoYXNPd25Qcm9wZXJ0eTpFdCxoYXNPd25Qcm9wOkV0LHJlZHVjZURlc2NyaXB0b3JzOmJ0LGZyZWV6ZU1ldGhvZHM6QmksdG9PYmplY3RTZXQ6ZGksdG9DYW1lbENhc2U6Zmksbm9vcDpDaSx0b0Zpbml0ZU51bWJlcjpFaSxmaW5kS2V5Ond0LGdsb2JhbDpSdCxpc0NvbnRleHREZWZpbmVkOmt0LEFMUEhBQkVUOkR0LGdlbmVyYXRlU3RyaW5nOnlpLGlzU3BlY0NvbXBsaWFudEZvcm06UWksdG9KU09OT2JqZWN0OmhpLGlzQXN5bmNGbjp3aSxpc1RoZW5hYmxlOlJpfTtmdW5jdGlvbiBfKGUsQSx0LHIsbyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPWUsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixBJiYodGhpcy5jb2RlPUEpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG8mJih0aGlzLnJlc3BvbnNlPW8pfWMuaW5oZXJpdHMoXyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIFd0PV8ucHJvdG90eXBlLEZ0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goZT0+e0Z0W2VdPXt2YWx1ZTplfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF8sRnQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShXdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtfLmZyb209KGUsQSx0LHIsbyxpKT0+e2xldCBzPU9iamVjdC5jcmVhdGUoV3QpO3JldHVybiBjLnRvRmxhdE9iamVjdChlLHMsZnVuY3Rpb24oZil7cmV0dXJuIGYhPT1FcnJvci5wcm90b3R5cGV9LG09Pm0hPT0iaXNBeGlvc0Vycm9yIiksXy5jYWxsKHMsZS5tZXNzYWdlLEEsdCxyLG8pLHMuY2F1c2U9ZSxzLm5hbWU9ZS5uYW1lLGkmJk9iamVjdC5hc3NpZ24ocyxpKSxzfTt2YXIgdz1fO3ZhciBoZT1udWxsO2Z1bmN0aW9uIFZlKGUpe3JldHVybiBjLmlzUGxhaW5PYmplY3QoZSl8fGMuaXNBcnJheShlKX1mdW5jdGlvbiBOdChlKXtyZXR1cm4gYy5lbmRzV2l0aChlLCJbXSIpP2Uuc2xpY2UoMCwtMik6ZX1mdW5jdGlvbiBVdChlLEEsdCl7cmV0dXJuIGU/ZS5jb25jYXQoQSkubWFwKGZ1bmN0aW9uKG8saSl7cmV0dXJuIG89TnQobyksIXQmJmk/IlsiK28rIl0iOm99KS5qb2luKHQ/Ii4iOiIiKTpBfWZ1bmN0aW9uIGtpKGUpe3JldHVybiBjLmlzQXJyYXkoZSkmJiFlLnNvbWUoVmUpfXZhciBiaT1jLnRvRmxhdE9iamVjdChjLHt9LG51bGwsZnVuY3Rpb24oQSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KEEpfSk7ZnVuY3Rpb24gRGkoZSxBLHQpe2lmKCFjLmlzT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO0E9QXx8bmV3KGhlfHxGb3JtRGF0YSksdD1jLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oQixRKXtyZXR1cm4hYy5pc1VuZGVmaW5lZChRW0JdKX0pO2xldCByPXQubWV0YVRva2VucyxvPXQudmlzaXRvcnx8YSxpPXQuZG90cyxzPXQuaW5kZXhlcyxmPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmMuaXNTcGVjQ29tcGxpYW50Rm9ybShBKTtpZighYy5pc0Z1bmN0aW9uKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gcChsKXtpZihsPT09bnVsbClyZXR1cm4iIjtpZihjLmlzRGF0ZShsKSlyZXR1cm4gbC50b0lTT1N0cmluZygpO2lmKCFmJiZjLmlzQmxvYihsKSl0aHJvdyBuZXcgdygiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gYy5pc0FycmF5QnVmZmVyKGwpfHxjLmlzVHlwZWRBcnJheShsKT9mJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbbF0pOkJ1ZmZlci5mcm9tKGwpOmx9ZnVuY3Rpb24gYShsLEIsUSl7bGV0IFI9bDtpZihsJiYhUSYmdHlwZW9mIGw9PSJvYmplY3QiKXtpZihjLmVuZHNXaXRoKEIsInt9IikpQj1yP0I6Qi5zbGljZSgwLC0yKSxsPUpTT04uc3RyaW5naWZ5KGwpO2Vsc2UgaWYoYy5pc0FycmF5KGwpJiZraShsKXx8KGMuaXNGaWxlTGlzdChsKXx8Yy5lbmRzV2l0aChCLCJbXSIpKSYmKFI9Yy50b0FycmF5KGwpKSlyZXR1cm4gQj1OdChCKSxSLmZvckVhY2goZnVuY3Rpb24oUCxRcil7IShjLmlzVW5kZWZpbmVkKFApfHxQPT09bnVsbCkmJkEuYXBwZW5kKHM9PT0hMD9VdChbQl0sUXIsaSk6cz09PW51bGw/QjpCKyJbXSIscChQKSl9KSwhMX1yZXR1cm4gVmUobCk/ITA6KEEuYXBwZW5kKFV0KFEsQixpKSxwKGwpKSwhMSl9bGV0IG49W10sdT1PYmplY3QuYXNzaWduKGJpLHtkZWZhdWx0VmlzaXRvcjphLGNvbnZlcnRWYWx1ZTpwLGlzVmlzaXRhYmxlOlZlfSk7ZnVuY3Rpb24gZyhsLEIpe2lmKCFjLmlzVW5kZWZpbmVkKGwpKXtpZihuLmluZGV4T2YobCkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrQi5qb2luKCIuIikpO24ucHVzaChsKSxjLmZvckVhY2gobCxmdW5jdGlvbihSLE8peyghKGMuaXNVbmRlZmluZWQoUil8fFI9PT1udWxsKSYmby5jYWxsKEEsUixjLmlzU3RyaW5nKE8pP08udHJpbSgpOk8sQix1KSk9PT0hMCYmZyhSLEI/Qi5jb25jYXQoTyk6W09dKX0pLG4ucG9wKCl9fWlmKCFjLmlzT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gZyhlKSxBfXZhciBMPURpO2Z1bmN0aW9uIFN0KGUpe2xldCBBPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBBW3JdfSl9ZnVuY3Rpb24gT3QoZSxBKXt0aGlzLl9wYWlycz1bXSxlJiZMKGUsdGhpcyxBKX12YXIgUHQ9T3QucHJvdG90eXBlO1B0LmFwcGVuZD1mdW5jdGlvbihBLHQpe3RoaXMuX3BhaXJzLnB1c2goW0EsdF0pfTtQdC50b1N0cmluZz1mdW5jdGlvbihBKXtsZXQgdD1BP2Z1bmN0aW9uKHIpe3JldHVybiBBLmNhbGwodGhpcyxyLFN0KX06U3Q7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gdChvWzBdKSsiPSIrdChvWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHdlPU90O2Z1bmN0aW9uIFdpKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIGFlKGUsQSx0KXtpZighQSlyZXR1cm4gZTtsZXQgcj10JiZ0LmVuY29kZXx8V2ksbz10JiZ0LnNlcmlhbGl6ZSxpO2lmKG8/aT1vKEEsdCk6aT1jLmlzVVJMU2VhcmNoUGFyYW1zKEEpP0EudG9TdHJpbmcoKTpuZXcgd2UoQSx0KS50b1N0cmluZyhyKSxpKXtsZXQgcz1lLmluZGV4T2YoIiMiKTtzIT09LTEmJihlPWUuc2xpY2UoMCxzKSksZSs9KGUuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikraX1yZXR1cm4gZX12YXIgWmU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShBLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOkEscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChBKXt0aGlzLmhhbmRsZXJzW0FdJiYodGhpcy5oYW5kbGVyc1tBXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKEEpe2MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZBKHIpfSl9fSxYZT1aZTt2YXIgUmU9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciB4dD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6d2U7dmFyIFR0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgR3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgSnQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6eHQsRm9ybURhdGE6VHQsQmxvYjpHdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciAkZT17fTt3cigkZSx7aGFzQnJvd3NlckVudjooKT0+THQsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5GaSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PlVpfSk7dmFyIEx0PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLEZpPShlPT5MdCYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihlKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLFVpPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgVz17Li4uJGUsLi4uSnR9O2Z1bmN0aW9uIGVBKGUsQSl7cmV0dXJuIEwoZSxuZXcgVy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixvLGkpe3JldHVybiBXLmlzTm9kZSYmYy5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOmkuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sQSkpfWZ1bmN0aW9uIE5pKGUpe3JldHVybiBjLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxlKS5tYXAoQT0+QVswXT09PSJbXSI/IiI6QVsxXXx8QVswXSl9ZnVuY3Rpb24gU2koZSl7bGV0IEE9e30sdD1PYmplY3Qua2V5cyhlKSxyLG89dC5sZW5ndGgsaTtmb3Iocj0wO3I8bztyKyspaT10W3JdLEFbaV09ZVtpXTtyZXR1cm4gQX1mdW5jdGlvbiBPaShlKXtmdW5jdGlvbiBBKHQscixvLGkpe2xldCBzPXRbaSsrXTtpZihzPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IG09TnVtYmVyLmlzRmluaXRlKCtzKSxmPWk+PXQubGVuZ3RoO3JldHVybiBzPSFzJiZjLmlzQXJyYXkobyk/by5sZW5ndGg6cyxmPyhjLmhhc093blByb3AobyxzKT9vW3NdPVtvW3NdLHJdOm9bc109ciwhbSk6KCghb1tzXXx8IWMuaXNPYmplY3Qob1tzXSkpJiYob1tzXT1bXSksQSh0LHIsb1tzXSxpKSYmYy5pc0FycmF5KG9bc10pJiYob1tzXT1TaShvW3NdKSksIW0pfWlmKGMuaXNGb3JtRGF0YShlKSYmYy5pc0Z1bmN0aW9uKGUuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBjLmZvckVhY2hFbnRyeShlLChyLG8pPT57QShOaShyKSxvLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBrZT1PaTtmdW5jdGlvbiBQaShlLEEsdCl7aWYoYy5pc1N0cmluZyhlKSl0cnl7cmV0dXJuKEF8fEpTT04ucGFyc2UpKGUpLGMudHJpbShlKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShlKX12YXIgQUE9e3RyYW5zaXRpb25hbDpSZSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKEEsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixvPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGk9Yy5pc09iamVjdChBKTtpZihpJiZjLmlzSFRNTEZvcm0oQSkmJihBPW5ldyBGb3JtRGF0YShBKSksYy5pc0Zvcm1EYXRhKEEpKXJldHVybiBvP0pTT04uc3RyaW5naWZ5KGtlKEEpKTpBO2lmKGMuaXNBcnJheUJ1ZmZlcihBKXx8Yy5pc0J1ZmZlcihBKXx8Yy5pc1N0cmVhbShBKXx8Yy5pc0ZpbGUoQSl8fGMuaXNCbG9iKEEpKXJldHVybiBBO2lmKGMuaXNBcnJheUJ1ZmZlclZpZXcoQSkpcmV0dXJuIEEuYnVmZmVyO2lmKGMuaXNVUkxTZWFyY2hQYXJhbXMoQSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksQS50b1N0cmluZygpO2xldCBtO2lmKGkpe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIGVBKEEsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigobT1jLmlzRmlsZUxpc3QoQSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGY9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBMKG0/eyJmaWxlc1tdIjpBfTpBLGYmJm5ldyBmLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gaXx8bz8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLFBpKEEpKTpBfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKEEpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxBQS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG89dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoQSYmYy5pc1N0cmluZyhBKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bykpe2xldCBzPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm87dHJ5e3JldHVybiBKU09OLnBhcnNlKEEpfWNhdGNoKG0pe2lmKHMpdGhyb3cgbS5uYW1lPT09IlN5bnRheEVycm9yIj93LmZyb20obSx3LkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOm19fXJldHVybiBBfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpXLmNsYXNzZXMuRm9ybURhdGEsQmxvYjpXLmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oQSl7cmV0dXJuIEE+PTIwMCYmQTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtjLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sZT0+e0FBLmhlYWRlcnNbZV09e319KTt2YXIgVj1BQTt2YXIgeGk9Yy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxNdD1lPT57bGV0IEE9e30sdCxyLG87cmV0dXJuIGUmJmUuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe289cy5pbmRleE9mKCI6IiksdD1zLnN1YnN0cmluZygwLG8pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9cy5zdWJzdHJpbmcobysxKS50cmltKCksISghdHx8QVt0XSYmeGlbdF0pJiYodD09PSJzZXQtY29va2llIj9BW3RdP0FbdF0ucHVzaChyKTpBW3RdPVtyXTpBW3RdPUFbdF0/QVt0XSsiLCAiK3I6cil9KSxBfTt2YXIgSHQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBuZShlKXtyZXR1cm4gZSYmU3RyaW5nKGUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGJlKGUpe3JldHVybiBlPT09ITF8fGU9PW51bGw/ZTpjLmlzQXJyYXkoZSk/ZS5tYXAoYmUpOlN0cmluZyhlKX1mdW5jdGlvbiBUaShlKXtsZXQgQT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoZSk7KUFbclsxXV09clsyXTtyZXR1cm4gQX12YXIgR2k9ZT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChlLnRyaW0oKSk7ZnVuY3Rpb24gdEEoZSxBLHQscixvKXtpZihjLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLEEsdCk7aWYobyYmKEE9dCksISFjLmlzU3RyaW5nKEEpKXtpZihjLmlzU3RyaW5nKHIpKXJldHVybiBBLmluZGV4T2YocikhPT0tMTtpZihjLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoQSl9fWZ1bmN0aW9uIEppKGUpe3JldHVybiBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKEEsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIExpKGUsQSl7bGV0IHQ9Yy50b0NhbWVsQ2FzZSgiICIrQSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG8saSxzKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsQSxvLGkscyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFo9Y2xhc3N7Y29uc3RydWN0b3IoQSl7QSYmdGhpcy5zZXQoQSl9c2V0KEEsdCxyKXtsZXQgbz10aGlzO2Z1bmN0aW9uIGkobSxmLHApe2xldCBhPW5lKGYpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgbj1jLmZpbmRLZXkobyxhKTsoIW58fG9bbl09PT12b2lkIDB8fHA9PT0hMHx8cD09PXZvaWQgMCYmb1tuXSE9PSExKSYmKG9bbnx8Zl09YmUobSkpfWxldCBzPShtLGYpPT5jLmZvckVhY2gobSwocCxhKT0+aShwLGEsZikpO3JldHVybiBjLmlzUGxhaW5PYmplY3QoQSl8fEEgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3MoQSx0KTpjLmlzU3RyaW5nKEEpJiYoQT1BLnRyaW0oKSkmJiFHaShBKT9zKE10KEEpLHQpOkEhPW51bGwmJmkodCxBLHIpLHRoaXN9Z2V0KEEsdCl7aWYoQT1uZShBKSxBKXtsZXQgcj1jLmZpbmRLZXkodGhpcyxBKTtpZihyKXtsZXQgbz10aGlzW3JdO2lmKCF0KXJldHVybiBvO2lmKHQ9PT0hMClyZXR1cm4gVGkobyk7aWYoYy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxvLHIpO2lmKGMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhvKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKEEsdCl7aWYoQT1uZShBKSxBKXtsZXQgcj1jLmZpbmRLZXkodGhpcyxBKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fHRBKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKEEsdCl7bGV0IHI9dGhpcyxvPSExO2Z1bmN0aW9uIGkocyl7aWYocz1uZShzKSxzKXtsZXQgbT1jLmZpbmRLZXkocixzKTttJiYoIXR8fHRBKHIsclttXSxtLHQpKSYmKGRlbGV0ZSByW21dLG89ITApfX1yZXR1cm4gYy5pc0FycmF5KEEpP0EuZm9yRWFjaChpKTppKEEpLG99Y2xlYXIoQSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxvPSExO2Zvcig7ci0tOyl7bGV0IGk9dFtyXTsoIUF8fHRBKHRoaXMsdGhpc1tpXSxpLEEsITApKSYmKGRlbGV0ZSB0aGlzW2ldLG89ITApfXJldHVybiBvfW5vcm1hbGl6ZShBKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIGMuZm9yRWFjaCh0aGlzLChvLGkpPT57bGV0IHM9Yy5maW5kS2V5KHIsaSk7aWYocyl7dFtzXT1iZShvKSxkZWxldGUgdFtpXTtyZXR1cm59bGV0IG09QT9KaShpKTpTdHJpbmcoaSkudHJpbSgpO20hPT1pJiZkZWxldGUgdFtpXSx0W21dPWJlKG8pLHJbbV09ITB9KSx0aGlzfWNvbmNhdCguLi5BKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5BKX10b0pTT04oQSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gYy5mb3JFYWNoKHRoaXMsKHIsbyk9PntyIT1udWxsJiZyIT09ITEmJih0W29dPUEmJmMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtBLHRdKT0+QSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKEEpe3JldHVybiBBIGluc3RhbmNlb2YgdGhpcz9BOm5ldyB0aGlzKEEpfXN0YXRpYyBjb25jYXQoQSwuLi50KXtsZXQgcj1uZXcgdGhpcyhBKTtyZXR1cm4gdC5mb3JFYWNoKG89PnIuc2V0KG8pKSxyfXN0YXRpYyBhY2Nlc3NvcihBKXtsZXQgcj0odGhpc1tIdF09dGhpc1tIdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxvPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIGkocyl7bGV0IG09bmUocyk7clttXXx8KExpKG8scyksclttXT0hMCl9cmV0dXJuIGMuaXNBcnJheShBKT9BLmZvckVhY2goaSk6aShBKSx0aGlzfX07Wi5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7Yy5yZWR1Y2VEZXNjcmlwdG9ycyhaLnByb3RvdHlwZSwoe3ZhbHVlOmV9LEEpPT57bGV0IHQ9QVswXS50b1VwcGVyQ2FzZSgpK0Euc2xpY2UoMSk7cmV0dXJue2dldDooKT0+ZSxzZXQocil7dGhpc1t0XT1yfX19KTtjLmZyZWV6ZU1ldGhvZHMoWik7dmFyIEY9WjtmdW5jdGlvbiBzZShlLEEpe2xldCB0PXRoaXN8fFYscj1BfHx0LG89Ri5mcm9tKHIuaGVhZGVycyksaT1yLmRhdGE7cmV0dXJuIGMuZm9yRWFjaChlLGZ1bmN0aW9uKG0pe2k9bS5jYWxsKHQsaSxvLm5vcm1hbGl6ZSgpLEE/QS5zdGF0dXM6dm9pZCAwKX0pLG8ubm9ybWFsaXplKCksaX1mdW5jdGlvbiBnZShlKXtyZXR1cm4hIShlJiZlLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFl0KGUsQSx0KXt3LmNhbGwodGhpcyxlPz8iY2FuY2VsZWQiLHcuRVJSX0NBTkNFTEVELEEsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1jLmluaGVyaXRzKFl0LHcse19fQ0FOQ0VMX186ITB9KTt2YXIgTT1ZdDtmdW5jdGlvbiByQShlLEEsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/ZSh0KTpBKG5ldyB3KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW3cuRVJSX0JBRF9SRVFVRVNULHcuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIHF0PVcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShlLEEsdCxyLG8saSl7bGV0IHM9W2UrIj0iK2VuY29kZVVSSUNvbXBvbmVudChBKV07Yy5pc051bWJlcih0KSYmcy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksYy5pc1N0cmluZyhyKSYmcy5wdXNoKCJwYXRoPSIrciksYy5pc1N0cmluZyhvKSYmcy5wdXNoKCJkb21haW49IitvKSxpPT09ITAmJnMucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPXMuam9pbigiOyAiKX0scmVhZChlKXtsZXQgQT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiBBP2RlY29kZVVSSUNvbXBvbmVudChBWzNdKTpudWxsfSxyZW1vdmUoZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIGlBKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9ZnVuY3Rpb24gb0EoZSxBKXtyZXR1cm4gQT9lLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitBLnJlcGxhY2UoL15cLysvLCIiKTplfWZ1bmN0aW9uIEllKGUsQSl7cmV0dXJuIGUmJiFpQShBKT9vQShlLEEpOkF9dmFyIEt0PVcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IEE9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG8oaSl7bGV0IHM9aTtyZXR1cm4gQSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixzKSxzPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLHMpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1vKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihzKXtsZXQgbT1jLmlzU3RyaW5nKHMpP28ocyk6cztyZXR1cm4gbS5wcm90b2NvbD09PXIucHJvdG9jb2wmJm0uaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gYUEoZSl7bGV0IEE9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoZSk7cmV0dXJuIEEmJkFbMV18fCIifWZ1bmN0aW9uIE1pKGUsQSl7ZT1lfHwxMDtsZXQgdD1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSksbz0wLGk9MCxzO3JldHVybiBBPUEhPT12b2lkIDA/QToxZTMsZnVuY3Rpb24oZil7bGV0IHA9RGF0ZS5ub3coKSxhPXJbaV07c3x8KHM9cCksdFtvXT1mLHJbb109cDtsZXQgbj1pLHU9MDtmb3IoO24hPT1vOyl1Kz10W24rK10sbj1uJWU7aWYobz0obysxKSVlLG89PT1pJiYoaT0oaSsxKSVlKSxwLXM8QSlyZXR1cm47bGV0IGc9YSYmcC1hO3JldHVybiBnP01hdGgucm91bmQodSoxZTMvZyk6dm9pZCAwfX12YXIganQ9TWk7ZnVuY3Rpb24gdnQoZSxBKXtsZXQgdD0wLHI9anQoNTAsMjUwKTtyZXR1cm4gbz0+e2xldCBpPW8ubG9hZGVkLHM9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLG09aS10LGY9cihtKSxwPWk8PXM7dD1pO2xldCBhPXtsb2FkZWQ6aSx0b3RhbDpzLHByb2dyZXNzOnM/aS9zOnZvaWQgMCxieXRlczptLHJhdGU6Znx8dm9pZCAwLGVzdGltYXRlZDpmJiZzJiZwPyhzLWkpL2Y6dm9pZCAwLGV2ZW50Om99O2FbQT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxlKGEpfX12YXIgSGk9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iix6dD1IaSYmZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG89ZS5kYXRhLGk9Ri5mcm9tKGUuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpzLHdpdGhYU1JGVG9rZW46bX09ZSxmO2Z1bmN0aW9uIHAoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGYpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsZil9bGV0IGE7aWYoYy5pc0Zvcm1EYXRhKG8pKXtpZihXLmhhc1N0YW5kYXJkQnJvd3NlckVudnx8Vy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpaS5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoYT1pLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtCLC4uLlFdPWE/YS5zcGxpdCgiOyIpLm1hcChSPT5SLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO2kuc2V0Q29udGVudFR5cGUoW0J8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5RXS5qb2luKCI7ICIpKX19bGV0IG49bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGUuYXV0aCl7bGV0IEI9ZS5hdXRoLnVzZXJuYW1lfHwiIixRPWUuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5hdXRoLnBhc3N3b3JkKSk6IiI7aS5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoQisiOiIrUSkpfWxldCB1PUllKGUuYmFzZVVSTCxlLnVybCk7bi5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksYWUodSxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxuLnRpbWVvdXQ9ZS50aW1lb3V0O2Z1bmN0aW9uIGcoKXtpZighbilyZXR1cm47bGV0IEI9Ri5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gbiYmbi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksUj17ZGF0YTohc3x8cz09PSJ0ZXh0Inx8cz09PSJqc29uIj9uLnJlc3BvbnNlVGV4dDpuLnJlc3BvbnNlLHN0YXR1czpuLnN0YXR1cyxzdGF0dXNUZXh0Om4uc3RhdHVzVGV4dCxoZWFkZXJzOkIsY29uZmlnOmUscmVxdWVzdDpufTtyQShmdW5jdGlvbihQKXt0KFApLHAoKX0sZnVuY3Rpb24oUCl7cihQKSxwKCl9LFIpLG49bnVsbH1pZigib25sb2FkZW5kImluIG4/bi5vbmxvYWRlbmQ9ZzpuLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFufHxuLnJlYWR5U3RhdGUhPT00fHxuLnN0YXR1cz09PTAmJiEobi5yZXNwb25zZVVSTCYmbi5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoZyl9LG4ub25hYm9ydD1mdW5jdGlvbigpe24mJihyKG5ldyB3KCJSZXF1ZXN0IGFib3J0ZWQiLHcuRUNPTk5BQk9SVEVELGUsbikpLG49bnVsbCl9LG4ub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IHcoIk5ldHdvcmsgRXJyb3IiLHcuRVJSX05FVFdPUkssZSxuKSksbj1udWxsfSxuLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBRPWUudGltZW91dD8idGltZW91dCBvZiAiK2UudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixSPWUudHJhbnNpdGlvbmFsfHxSZTtlLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihRPWUudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgdyhRLFIuY2xhcmlmeVRpbWVvdXRFcnJvcj93LkVUSU1FRE9VVDp3LkVDT05OQUJPUlRFRCxlLG4pKSxuPW51bGx9LFcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobSYmYy5pc0Z1bmN0aW9uKG0pJiYobT1tKGUpKSxtfHxtIT09ITEmJkt0KHUpKSl7bGV0IEI9ZS54c3JmSGVhZGVyTmFtZSYmZS54c3JmQ29va2llTmFtZSYmcXQucmVhZChlLnhzcmZDb29raWVOYW1lKTtCJiZpLnNldChlLnhzcmZIZWFkZXJOYW1lLEIpfW89PT12b2lkIDAmJmkuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gbiYmYy5mb3JFYWNoKGkudG9KU09OKCksZnVuY3Rpb24oUSxSKXtuLnNldFJlcXVlc3RIZWFkZXIoUixRKX0pLGMuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwobi53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscykscyYmcyE9PSJqc29uIiYmKG4ucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSx0eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJm4uYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHZ0KGUub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmbi51cGxvYWQmJm4udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix2dChlLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYoZj1CPT57biYmKHIoIUJ8fEIudHlwZT9uZXcgTShudWxsLGUsbik6Qiksbi5hYm9ydCgpLG49bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGYpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9mKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGYpKSk7bGV0IGw9YUEodSk7aWYobCYmVy5wcm90b2NvbHMuaW5kZXhPZihsKT09PS0xKXtyKG5ldyB3KCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2wrIjoiLHcuRVJSX0JBRF9SRVFVRVNULGUpKTtyZXR1cm59bi5zZW5kKG98fG51bGwpfSl9O3ZhciBuQT17aHR0cDpoZSx4aHI6enR9O2MuZm9yRWFjaChuQSwoZSxBKT0+e2lmKGUpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibmFtZSIse3ZhbHVlOkF9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImFkYXB0ZXJOYW1lIix7dmFsdWU6QX0pfX0pO3ZhciBfdD1lPT5gLSAke2V9YCxZaT1lPT5jLmlzRnVuY3Rpb24oZSl8fGU9PT1udWxsfHxlPT09ITEsRGU9e2dldEFkYXB0ZXI6ZT0+e2U9Yy5pc0FycmF5KGUpP2U6W2VdO2xldHtsZW5ndGg6QX09ZSx0LHIsbz17fTtmb3IobGV0IGk9MDtpPEE7aSsrKXt0PWVbaV07bGV0IHM7aWYocj10LCFZaSh0KSYmKHI9bkFbKHM9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgdyhgVW5rbm93biBhZGFwdGVyICcke3N9J2ApO2lmKHIpYnJlYWs7b1tzfHwiIyIraV09cn1pZighcil7bGV0IGk9T2JqZWN0LmVudHJpZXMobykubWFwKChbbSxmXSk9PmBhZGFwdGVyICR7bX0gYCsoZj09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLHM9QT9pLmxlbmd0aD4xP2BzaW5jZSA6CmAraS5tYXAoX3QpLmpvaW4oYApgKToiICIrX3QoaVswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgdygiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK3MsIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczpuQX07ZnVuY3Rpb24gc0EoZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IE0obnVsbCxlKX1mdW5jdGlvbiBXZShlKXtyZXR1cm4gc0EoZSksZS5oZWFkZXJzPUYuZnJvbShlLmhlYWRlcnMpLGUuZGF0YT1zZS5jYWxsKGUsZS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoZS5tZXRob2QpIT09LTEmJmUuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksRGUuZ2V0QWRhcHRlcihlLmFkYXB0ZXJ8fFYuYWRhcHRlcikoZSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gc0EoZSksci5kYXRhPXNlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz1GLmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gZ2Uocil8fChzQShlKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXNlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz1GLmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIFZ0PWU9PmUgaW5zdGFuY2VvZiBGP3suLi5lfTplO2Z1bmN0aW9uIEcoZSxBKXtBPUF8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIocCxhLG4pe3JldHVybiBjLmlzUGxhaW5PYmplY3QocCkmJmMuaXNQbGFpbk9iamVjdChhKT9jLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOm59LHAsYSk6Yy5pc1BsYWluT2JqZWN0KGEpP2MubWVyZ2Uoe30sYSk6Yy5pc0FycmF5KGEpP2Euc2xpY2UoKTphfWZ1bmN0aW9uIG8ocCxhLG4pe2lmKGMuaXNVbmRlZmluZWQoYSkpe2lmKCFjLmlzVW5kZWZpbmVkKHApKXJldHVybiByKHZvaWQgMCxwLG4pfWVsc2UgcmV0dXJuIHIocCxhLG4pfWZ1bmN0aW9uIGkocCxhKXtpZighYy5pc1VuZGVmaW5lZChhKSlyZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gcyhwLGEpe2lmKGMuaXNVbmRlZmluZWQoYSkpe2lmKCFjLmlzVW5kZWZpbmVkKHApKXJldHVybiByKHZvaWQgMCxwKX1lbHNlIHJldHVybiByKHZvaWQgMCxhKX1mdW5jdGlvbiBtKHAsYSxuKXtpZihuIGluIEEpcmV0dXJuIHIocCxhKTtpZihuIGluIGUpcmV0dXJuIHIodm9pZCAwLHApfWxldCBmPXt1cmw6aSxtZXRob2Q6aSxkYXRhOmksYmFzZVVSTDpzLHRyYW5zZm9ybVJlcXVlc3Q6cyx0cmFuc2Zvcm1SZXNwb25zZTpzLHBhcmFtc1NlcmlhbGl6ZXI6cyx0aW1lb3V0OnMsdGltZW91dE1lc3NhZ2U6cyx3aXRoQ3JlZGVudGlhbHM6cyx3aXRoWFNSRlRva2VuOnMsYWRhcHRlcjpzLHJlc3BvbnNlVHlwZTpzLHhzcmZDb29raWVOYW1lOnMseHNyZkhlYWRlck5hbWU6cyxvblVwbG9hZFByb2dyZXNzOnMsb25Eb3dubG9hZFByb2dyZXNzOnMsZGVjb21wcmVzczpzLG1heENvbnRlbnRMZW5ndGg6cyxtYXhCb2R5TGVuZ3RoOnMsYmVmb3JlUmVkaXJlY3Q6cyx0cmFuc3BvcnQ6cyxodHRwQWdlbnQ6cyxodHRwc0FnZW50OnMsY2FuY2VsVG9rZW46cyxzb2NrZXRQYXRoOnMscmVzcG9uc2VFbmNvZGluZzpzLHZhbGlkYXRlU3RhdHVzOm0saGVhZGVyczoocCxhKT0+byhWdChwKSxWdChhKSwhMCl9O3JldHVybiBjLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxlLEEpKSxmdW5jdGlvbihhKXtsZXQgbj1mW2FdfHxvLHU9bihlW2FdLEFbYV0sYSk7Yy5pc1VuZGVmaW5lZCh1KSYmbiE9PW18fCh0W2FdPXUpfSksdH12YXIgRmU9IjEuNi44Ijt2YXIgZ0E9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChlLEEpPT57Z0FbZV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09ZXx8ImEiKyhBPDE/Im4gIjoiICIpK2V9fSk7dmFyIFp0PXt9O2dBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihBLHQscil7ZnVuY3Rpb24gbyhpLHMpe3JldHVybiJbQXhpb3MgdiIrRmUrIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitpKyInIitzKyhyPyIuICIrcjoiIil9cmV0dXJuKGkscyxtKT0+e2lmKEE9PT0hMSl0aHJvdyBuZXcgdyhvKHMsIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLHcuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhWnRbc10mJihadFtzXT0hMCxjb25zb2xlLndhcm4obyhzLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLEE/QShpLHMsbSk6ITB9fTtmdW5jdGlvbiBxaShlLEEsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyB3KCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iix3LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhlKSxvPXIubGVuZ3RoO2Zvcig7by0tID4wOyl7bGV0IGk9cltvXSxzPUFbaV07aWYocyl7bGV0IG09ZVtpXSxmPW09PT12b2lkIDB8fHMobSxpLGUpO2lmKGYhPT0hMCl0aHJvdyBuZXcgdygib3B0aW9uICIraSsiIG11c3QgYmUgIitmLHcuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgdygiVW5rbm93biBvcHRpb24gIitpLHcuRVJSX0JBRF9PUFRJT04pfX12YXIgVWU9e2Fzc2VydE9wdGlvbnM6cWksdmFsaWRhdG9yczpnQX07dmFyIEg9VWUudmFsaWRhdG9ycyxYPWNsYXNze2NvbnN0cnVjdG9yKEEpe3RoaXMuZGVmYXVsdHM9QSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgWGUscmVzcG9uc2U6bmV3IFhlfX1hc3luYyByZXF1ZXN0KEEsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KEEsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvPXt9KTpvPW5ldyBFcnJvcjtsZXQgaT1vLnN0YWNrP28uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP2kmJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoaS5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmAraSk6ci5zdGFjaz1pfXRocm93IHJ9fV9yZXF1ZXN0KEEsdCl7dHlwZW9mIEE9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPUEpOnQ9QXx8e30sdD1HKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6byxoZWFkZXJzOml9PXQ7ciE9PXZvaWQgMCYmVWUuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkgudHJhbnNpdGlvbmFsKEguYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pfSwhMSksbyE9bnVsbCYmKGMuaXNGdW5jdGlvbihvKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpvfTpVZS5hc3NlcnRPcHRpb25zKG8se2VuY29kZTpILmZ1bmN0aW9uLHNlcmlhbGl6ZTpILmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBzPWkmJmMubWVyZ2UoaS5jb21tb24saVt0Lm1ldGhvZF0pO2kmJmMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxsPT57ZGVsZXRlIGlbbF19KSx0LmhlYWRlcnM9Ri5jb25jYXQocyxpKTtsZXQgbT1bXSxmPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihCKXt0eXBlb2YgQi5ydW5XaGVuPT0iZnVuY3Rpb24iJiZCLnJ1bldoZW4odCk9PT0hMXx8KGY9ZiYmQi5zeW5jaHJvbm91cyxtLnVuc2hpZnQoQi5mdWxmaWxsZWQsQi5yZWplY3RlZCkpfSk7bGV0IHA9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihCKXtwLnB1c2goQi5mdWxmaWxsZWQsQi5yZWplY3RlZCl9KTtsZXQgYSxuPTAsdTtpZighZil7bGV0IGw9W1dlLmJpbmQodGhpcyksdm9pZCAwXTtmb3IobC51bnNoaWZ0LmFwcGx5KGwsbSksbC5wdXNoLmFwcGx5KGwscCksdT1sLmxlbmd0aCxhPVByb21pc2UucmVzb2x2ZSh0KTtuPHU7KWE9YS50aGVuKGxbbisrXSxsW24rK10pO3JldHVybiBhfXU9bS5sZW5ndGg7bGV0IGc9dDtmb3Iobj0wO248dTspe2xldCBsPW1bbisrXSxCPW1bbisrXTt0cnl7Zz1sKGcpfWNhdGNoKFEpe0IuY2FsbCh0aGlzLFEpO2JyZWFrfX10cnl7YT1XZS5jYWxsKHRoaXMsZyl9Y2F0Y2gobCl7cmV0dXJuIFByb21pc2UucmVqZWN0KGwpfWZvcihuPTAsdT1wLmxlbmd0aDtuPHU7KWE9YS50aGVuKHBbbisrXSxwW24rK10pO3JldHVybiBhfWdldFVyaShBKXtBPUcodGhpcy5kZWZhdWx0cyxBKTtsZXQgdD1JZShBLmJhc2VVUkwsQS51cmwpO3JldHVybiBhZSh0LEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplcil9fTtjLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKEEpe1gucHJvdG90eXBlW0FdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChHKHJ8fHt9LHttZXRob2Q6QSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtjLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihBKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihpLHMsbSl7cmV0dXJuIHRoaXMucmVxdWVzdChHKG18fHt9LHttZXRob2Q6QSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOmksZGF0YTpzfSkpfX1YLnByb3RvdHlwZVtBXT10KCksWC5wcm90b3R5cGVbQSsiRm9ybSJdPXQoITApfSk7dmFyIGxlPVg7dmFyIElBPWNsYXNzIGV7Y29uc3RydWN0b3IoQSl7aWYodHlwZW9mIEEhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpKXt0PWl9KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG89PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgaT1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7aS0tID4wOylyLl9saXN0ZW5lcnNbaV0obyk7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1vPT57bGV0IGkscz1uZXcgUHJvbWlzZShtPT57ci5zdWJzY3JpYmUobSksaT1tfSkudGhlbihvKTtyZXR1cm4gcy5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKGkpfSxzfSxBKGZ1bmN0aW9uKGkscyxtKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBNKGkscyxtKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKEEpe2lmKHRoaXMucmVhc29uKXtBKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKEEpOnRoaXMuX2xpc3RlbmVycz1bQV19dW5zdWJzY3JpYmUoQSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoQSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBBO3JldHVybnt0b2tlbjpuZXcgZShmdW5jdGlvbihvKXtBPW99KSxjYW5jZWw6QX19fSxYdD1JQTtmdW5jdGlvbiBsQShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gcEEoZSl7cmV0dXJuIGMuaXNPYmplY3QoZSkmJmUuaXNBeGlvc0Vycm9yPT09ITB9dmFyIG1BPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhtQSkuZm9yRWFjaCgoW2UsQV0pPT57bUFbQV09ZX0pO3ZhciAkdD1tQTtmdW5jdGlvbiBlcihlKXtsZXQgQT1uZXcgbGUoZSksdD1yZShsZS5wcm90b3R5cGUucmVxdWVzdCxBKTtyZXR1cm4gYy5leHRlbmQodCxsZS5wcm90b3R5cGUsQSx7YWxsT3duS2V5czohMH0pLGMuZXh0ZW5kKHQsQSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obyl7cmV0dXJuIGVyKEcoZSxvKSl9LHR9dmFyIGs9ZXIoVik7ay5BeGlvcz1sZTtrLkNhbmNlbGVkRXJyb3I9TTtrLkNhbmNlbFRva2VuPVh0O2suaXNDYW5jZWw9Z2U7ay5WRVJTSU9OPUZlO2sudG9Gb3JtRGF0YT1MO2suQXhpb3NFcnJvcj13O2suQ2FuY2VsPWsuQ2FuY2VsZWRFcnJvcjtrLmFsbD1mdW5jdGlvbihBKXtyZXR1cm4gUHJvbWlzZS5hbGwoQSl9O2suc3ByZWFkPWxBO2suaXNBeGlvc0Vycm9yPXBBO2subWVyZ2VDb25maWc9RztrLkF4aW9zSGVhZGVycz1GO2suZm9ybVRvSlNPTj1lPT5rZShjLmlzSFRNTEZvcm0oZSk/bmV3IEZvcm1EYXRhKGUpOmUpO2suZ2V0QWRhcHRlcj1EZS5nZXRBZGFwdGVyO2suSHR0cFN0YXR1c0NvZGU9JHQ7ay5kZWZhdWx0PWs7dmFyIFQ9azt2YXJ7QXhpb3M6eGcsQXhpb3NFcnJvcjpUZyxDYW5jZWxlZEVycm9yOkdnLGlzQ2FuY2VsOkpnLENhbmNlbFRva2VuOkxnLFZFUlNJT046TWcsYWxsOkhnLENhbmNlbDpZZyxpc0F4aW9zRXJyb3I6cWcsc3ByZWFkOktnLHRvRm9ybURhdGE6amcsQXhpb3NIZWFkZXJzOnZnLEh0dHBTdGF0dXNDb2RlOnpnLGZvcm1Ub0pTT046X2csZ2V0QWRhcHRlcjpWZyxtZXJnZUNvbmZpZzpaZ309VDthc3luYyBmdW5jdGlvbiBLaShlLEEpe2xldCB0PWUscj1udWxsO2lmKHQ9PW51bGwpcj1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG89YXdhaXQgVC5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6QX0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChvLmRhdGEpO3I9bmV3IFdvcmtlcihpLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBwZT1LaTtmdW5jdGlvbiBBcihlKXtsZXQgQT1LZShlKSx0PWU7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PUEsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W3FlXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OkEsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIGppKGUsQSx0KXtsZXQgcjtpZihlIT1udWxsKXtsZXQgaT1lO3JldHVybiBpLndvcmtlclByb3h5IT09dm9pZCAwPyhyPWkud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOml9KTpBcihlKX1sZXQgbz1hd2FpdCBwZShBLHQpO3JldHVybiBBcihvKX12YXIgdHI9amk7YXN5bmMgZnVuY3Rpb24gdmkoZSxBLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgZSE9InN0cmluZyI/cj1lLmhyZWY6ZS5zdGFydHNXaXRoKCJodHRwIik/cj1lOnI9dHlwZW9mIEE8InUiP2Ake0F9LyR7ZX1gOmUsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBvPWAke3J9Lndhc21gLHM9KGF3YWl0IFQuZ2V0KG8se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OnN9KX12YXIgcnI9dmk7dmFyIGlyPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBucj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixvcj1uZXcgVGV4dEVuY29kZXIsYXI9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIHppKGUsQSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1lLmZzX29wZW4oQSx0LmZsYWdzKSxpPWUuZnNfc3RhdChBKS5zaXplLHM9bnVsbDtucj9zPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihpKTpzPW5ldyBBcnJheUJ1ZmZlcihpKTtsZXQgbT1uZXcgVWludDhBcnJheShzKTtyZXR1cm4gZS5mc19yZWFkKHIsbSwwLGksMCksZS5mc19jbG9zZShyKSxtfWZ1bmN0aW9uIHNyKGUsQSx0KXtsZXQgcj1udWxsO25yP3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBvPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IFVpbnQ4QXJyYXkoZS5IRUFQVTguYnVmZmVyLEEsdCk7cmV0dXJuIG8uc2V0KGkpLG99ZnVuY3Rpb24gYihlLEEsdCxyKXtsZXQgbz0wO3JldHVybiBBIT09bnVsbCYmKG89ZS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLEEuYnVmZmVyLmJ5dGVMZW5ndGhdKSxlLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoQS5idWZmZXIpLG8pKSxvfWZ1bmN0aW9uIEsoZSxBLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KEEpLG89ZS5sZW5ndGhCeXRlc1VURjgocikrMSxpPWUuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxvXSk7ZS5zdHJpbmdUb1VURjgocixpLG8pfWZ1bmN0aW9uIFUoZSxBLHQscil7bGV0IG89ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQSx0XSksaT1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxBLHRdKSxzPXNyKGUsbyxpKTtyZXR1cm4gTihyLHMuYnVmZmVyKX1mdW5jdGlvbiBOZShlLEEpe2xldCB0PWUuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsQV0pLHI9ZS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24gX2koZSxBLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKHAsYSl7c3dpdGNoKHAudHlwZSl7Y2FzZSBJLlRleHRTdHJlYW06e2xldCBuPW9yLmVuY29kZShwLmRhdGEuZGF0YSksdT1iKGUsbixhLDApLGc9e3NpemU6bi5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gfTtLKGUsZyxhKTticmVha31jYXNlIEkuSnNvbkNvbXBhdGlibGU6e2xldCBuPW9yLmVuY29kZShKU09OLnN0cmluZ2lmeShwLmRhdGEpKSx1PWIoZSxuLGEsMCksZz17c2l6ZTpuLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWB9O0soZSxnLGEpO2JyZWFrfWNhc2UgSS5CaW5hcnlTdHJlYW06e2xldCBuPXAuZGF0YS5kYXRhLHU9YihlLG4sYSwwKSxnPXtzaXplOm4uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07SyhlLGcsYSk7YnJlYWt9Y2FzZSBJLlRleHRGaWxlOntlLmZzX3dyaXRlRmlsZShwLmRhdGEucGF0aCxwLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBJLkJpbmFyeUZpbGU6e2UuZnNfd3JpdGVGaWxlKHAuZGF0YS5wYXRoLHAuZGF0YS5kYXRhKTticmVha31jYXNlIEkuSW1hZ2U6e2xldCBuPXAuZGF0YSx1PWIoZSxuLmRhdGEsYSwwKSxnPWIoZSxuLmRpcmVjdGlvbixhLDEpLGw9dHlwZW9mIG4ubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20obi5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLEI9e2ltYWdlVHlwZTpuLmltYWdlVHlwZSxuYW1lOm4ubmFtZSxvcmlnaW46bi5vcmlnaW4sc3BhY2luZzpuLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLHNpemU6bi5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbWV0YWRhdGE6bH07SyhlLEIsYSk7YnJlYWt9Y2FzZSBJLk1lc2g6e2xldCBuPXAuZGF0YSx1PWIoZSxuLnBvaW50cyxhLDApLGc9YihlLG4uY2VsbHMsYSwxKSxsPWIoZSxuLnBvaW50RGF0YSxhLDIpLEI9YihlLG4uY2VsbERhdGEsYSwzKSxRPXttZXNoVHlwZTpuLm1lc2hUeXBlLG5hbWU6bi5uYW1lLG51bWJlck9mUG9pbnRzOm4ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mQ2VsbHM6bi5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLGNlbGxCdWZmZXJTaXplOm4uY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpuLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLG51bWJlck9mQ2VsbFBpeGVsczpuLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07SyhlLFEsYSk7YnJlYWt9Y2FzZSBJLlBvaW50U2V0OntsZXQgbj1wLmRhdGEsdT1iKGUsbi5wb2ludHMsYSwwKSxnPWIoZSxuLnBvaW50RGF0YSxhLDEpLGw9e3BvaW50U2V0VHlwZTpuLnBvaW50U2V0VHlwZSxuYW1lOm4ubmFtZSxudW1iZXJPZlBvaW50czpuLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOm4ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtnfWB9O0soZSxsLGEpO2JyZWFrfWNhc2UgSS5Qb2x5RGF0YTp7bGV0IG49cC5kYXRhLHU9YihlLG4ucG9pbnRzLGEsMCksZz1iKGUsbi52ZXJ0aWNlcyxhLDEpLGw9YihlLG4ubGluZXMsYSwyKSxCPWIoZSxuLnBvbHlnb25zLGEsMyksUT1iKGUsbi50cmlhbmdsZVN0cmlwcyxhLDQpLFI9YihlLG4ucG9pbnREYXRhLGEsNSksTz1iKGUsbi5wb2ludERhdGEsYSw2KSxQPXtwb2x5RGF0YVR5cGU6bi5wb2x5RGF0YVR5cGUsbmFtZTpuLm5hbWUsbnVtYmVyT2ZQb2ludHM6bi5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsdmVydGljZXNCdWZmZXJTaXplOm4udmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLGxpbmVzQnVmZmVyU2l6ZTpuLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxwb2x5Z29uc0J1ZmZlclNpemU6bi5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOm4udHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG51bWJlck9mUG9pbnRQaXhlbHM6bi5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YCxudW1iZXJPZkNlbGxQaXhlbHM6bi5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtPfWB9O0soZSxQLGEpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxlLnJlc2V0TW9kdWxlU3Rkb3V0KCksZS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBvPWUuc3RhY2tTYXZlKCksaT0wO3RyeXtpPWUuY2FsbE1haW4oQS5zbGljZSgpKX1jYXRjaChwKXt0aHJvdyB0eXBlb2YgcD09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLGUuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLGUuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBlLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLGUuZ2V0RXhjZXB0aW9uTWVzc2FnZShwKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxwfWZpbmFsbHl7ZS5zdGFja1Jlc3RvcmUobyl9bGV0IHM9ZS5nZXRNb2R1bGVTdGRvdXQoKSxtPWUuZ2V0TW9kdWxlU3RkZXJyKCksZj1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmaT09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihwLGEpe2xldCBuPW51bGw7c3dpdGNoKHAudHlwZSl7Y2FzZSBJLlRleHRTdHJlYW06e2xldCBnPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLGw9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQj1uZXcgVWludDhBcnJheShlLkhFQVBVOC5idWZmZXIsZyxsKTtuPXtkYXRhOmFyLmRlY29kZShCKX07YnJlYWt9Y2FzZSBJLkpzb25Db21wYXRpYmxlOntsZXQgZz1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxsPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEI9bmV3IFVpbnQ4QXJyYXkoZS5IRUFQVTguYnVmZmVyLGcsbCk7bj1KU09OLnBhcnNlKGFyLmRlY29kZShCKSk7YnJlYWt9Y2FzZSBJLkJpbmFyeVN0cmVhbTp7bGV0IGc9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksbD1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKTtuPXtkYXRhOnNyKGUsZyxsKX07YnJlYWt9Y2FzZSBJLlRleHRGaWxlOntuPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6ZS5mc19yZWFkRmlsZShwLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgSS5CaW5hcnlGaWxlOntuPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6emkoZSxwLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgSS5JbWFnZTp7bGV0IGc9TmUoZSxhKTtnLmRhdGE9VShlLGEsMCxnLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxnLmRpcmVjdGlvbj1VKGUsYSwxLEQuRmxvYXQ2NCksZy5tZXRhZGF0YT1uZXcgTWFwKGcubWV0YWRhdGEpLG49ZzticmVha31jYXNlIEkuTWVzaDp7bGV0IGc9TmUoZSxhKTtnLm51bWJlck9mUG9pbnRzPjA/Zy5wb2ludHM9VShlLGEsMCxnLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Zy5wb2ludHM9TihnLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZDZWxscz4wP2cuY2VsbHM9VShlLGEsMSxnLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpnLmNlbGxzPU4oZy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZQb2ludFBpeGVscz4wP2cucG9pbnREYXRhPVUoZSxhLDIsZy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9TihnLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZkNlbGxQaXhlbHM+MD9nLmNlbGxEYXRhPVUoZSxhLDMsZy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpnLmNlbGxEYXRhPU4oZy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbj1nO2JyZWFrfWNhc2UgSS5Qb2ludFNldDp7bGV0IGc9TmUoZSxhKTtnLm51bWJlck9mUG9pbnRzPjA/Zy5wb2ludHM9VShlLGEsMCxnLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmcucG9pbnRzPU4oZy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Zy5wb2ludERhdGE9VShlLGEsMSxnLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9TihnLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG49ZzticmVha31jYXNlIEkuUG9seURhdGE6e2xldCBnPU5lKGUsYSk7Zy5udW1iZXJPZlBvaW50cz4wP2cucG9pbnRzPVUoZSxhLDAsRC5GbG9hdDMyKTpnLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGcudmVydGljZXNCdWZmZXJTaXplPjA/Zy52ZXJ0aWNlcz1VKGUsYSwxLGguVUludDMyKTpnLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxnLmxpbmVzQnVmZmVyU2l6ZT4wP2cubGluZXM9VShlLGEsMixoLlVJbnQzMik6Zy5saW5lcz1uZXcgVWludDMyQXJyYXksZy5wb2x5Z29uc0J1ZmZlclNpemU+MD9nLnBvbHlnb25zPVUoZSxhLDMsaC5VSW50MzIpOmcucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGcudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/Zy50cmlhbmdsZVN0cmlwcz1VKGUsYSw0LGguVUludDMyKTpnLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxnLm51bWJlck9mUG9pbnRQaXhlbHM+MD9nLnBvaW50RGF0YT1VKGUsYSw1LGcucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpnLnBvaW50RGF0YT1OKGcucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZkNlbGxQaXhlbHM+MD9nLmNlbGxEYXRhPVUoZSxhLDYsZy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5jZWxsRGF0YT1OKGcucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuPWc7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgdT17dHlwZTpwLnR5cGUsZGF0YTpufTtmLnB1c2godSl9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6cyxzdGRlcnI6bSxvdXRwdXRzOmZ9fXZhciBncj1faTt2YXIgVmk9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFppKGUsQSl7aWYoZT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89WGkoZVtyXSxBKTtvIT09bnVsbCYmdC5wdXNoKG8pfXJldHVybiB0fWZ1bmN0aW9uIFhpKGUsQSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBlLmJ1ZmZlciE9PXZvaWQgMD90PWUuYnVmZmVyOmUuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9ZSksVmkmJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOkE/dDp0LnNsaWNlKDApfXZhciBJcj1aaTtmdW5jdGlvbiAkaShlKXtyZXR1cm5bZS5kYXRhLGUuZGlyZWN0aW9uXX12YXIgbHI9JGk7ZnVuY3Rpb24gZW8oZSl7cmV0dXJuW2UucG9pbnRzLGUucG9pbnREYXRhLGUuY2VsbHMsZS5jZWxsRGF0YV19dmFyIHByPWVvO2Z1bmN0aW9uIEFvKGUpe3JldHVybltlLnBvaW50cyxlLnZlcnRpY2VzLGUubGluZXMsZS5wb2x5Z29ucyxlLnRyaWFuZ2xlU3RyaXBzLGUucG9pbnREYXRhLGUuY2VsbERhdGFdfXZhciBtcj1Bbzt2YXIgdG87ZnVuY3Rpb24gU2UoKXtyZXR1cm4gdG99dmFyIHJvO2Z1bmN0aW9uIHVyKCl7cmV0dXJuIHJvfXZhciBpbztmdW5jdGlvbiBPZSgpe3JldHVybiBpb312YXIgdUE9bmV3IE1hcDtmdW5jdGlvbiBvbygpe2xldCBlPU9lKCk7cmV0dXJuIHR5cGVvZiBlPiJ1IiYmKGU9bnVsbCksZX1mdW5jdGlvbiBmcigpe2xldCBlPVNlKCk7cmV0dXJuIHR5cGVvZiBlPiJ1IiYmKGU9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxlfWZ1bmN0aW9uIFBlKCl7bGV0IGU9dXIoKTtyZXR1cm4gdHlwZW9mIGU+InUiJiYoZT17fSksZX1hc3luYyBmdW5jdGlvbiBhbyhlLEEsdCl7bGV0IHI9ZSxvPWU7aWYodHlwZW9mIGUhPSJzdHJpbmciJiYocj1uZXcgVVJMKGUuaHJlZiksbz1yLmhyZWYpLHVBLmhhcyhvKSlyZXR1cm4gdUEuZ2V0KG8pO3tsZXQgaT1hd2FpdCBycihlLEE/LnRvU3RyaW5nKCk/P2ZyKCksdD8/UGUoKSk7cmV0dXJuIHVBLnNldChvLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIG5vKGUsQSx0LHIsbyl7aWYoIWF3YWl0IGlyKCkpe2xldCBRPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChRKSxuZXcgRXJyb3IoUSl9bGV0IGk9bz8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IFE9YXdhaXQgYW8oZS50b1N0cmluZygpLG8/LnBpcGVsaW5lQmFzZVVybCxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9QZSgpKTtyZXR1cm4gZ3IoUSxBLHQscil9bGV0IHM9aSxtPW8/LnBpcGVsaW5lV29ya2VyVXJsPz9vbygpLGY9dHlwZW9mIG0hPSJzdHJpbmciJiZ0eXBlb2YgbT8uaHJlZjwidSI/bS5ocmVmOm0se3dvcmtlclByb3h5OnAsd29ya2VyOmF9PWF3YWl0IHRyKHMsZixvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9QZSgpKTtzPWE7bGV0IG49W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKFEudHlwZT09PUkuQmluYXJ5U3RyZWFtKXtsZXQgUj1RLmRhdGEuZGF0YTtuLnB1c2goUil9ZWxzZSBpZihRLnR5cGU9PT1JLkJpbmFyeUZpbGUpe2xldCBSPVEuZGF0YS5kYXRhO24ucHVzaChSKX1lbHNlIGlmKFEudHlwZT09PUkuSW1hZ2Upe2xldCBSPVEuZGF0YTtSLmRhdGEhPT1udWxsJiZuLnB1c2goLi4ubHIoUikpfWVsc2UgaWYoUS50eXBlPT09SS5NZXNoKXtsZXQgUj1RLmRhdGE7bi5wdXNoKC4uLnByKFIpKX1lbHNlIGlmKFEudHlwZT09PUkuUG9seURhdGEpe2xldCBSPVEuZGF0YTtuLnB1c2goLi4ubXIoUikpfX0pO2xldCB1PW8/LnBpcGVsaW5lQmFzZVVybD8/ZnIoKSxnPXR5cGVvZiB1IT0ic3RyaW5nIiYmdHlwZW9mIHU/LmhyZWY8InUiP3UuaHJlZjp1LGw9ciE9bnVsbD9qZShyLElyKG4sbz8ubm9Db3B5KSk6bnVsbCxCPWF3YWl0IHAucnVuUGlwZWxpbmUoZS50b1N0cmluZygpLGcsQSx0LGwsbz8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/UGUoKSk7cmV0dXJue3JldHVyblZhbHVlOkIucmV0dXJuVmFsdWUsc3Rkb3V0OkIuc3Rkb3V0LHN0ZGVycjpCLnN0ZGVycixvdXRwdXRzOkIub3V0cHV0cyx3ZWJXb3JrZXI6c319dmFyIEM9bm87dmFyIHNvPW51bGw7ZnVuY3Rpb24gY3IoKXtyZXR1cm4gc299dmFyIGdvPSIxLjMuMCIsQnI9Z287dmFyIGZBLElvPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9pbWFnZS1pb0Ake0JyfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gSEkoZSl7ZkE9ZX1mdW5jdGlvbiBFKCl7aWYodHlwZW9mIGZBPCJ1IilyZXR1cm4gZkE7bGV0IGU9U2UoKTtyZXR1cm4gdHlwZW9mIGU8InUiP2U6SW99dmFyIGNBLGxvPW51bGw7ZnVuY3Rpb24gZHIoZSl7Y0E9ZX1mdW5jdGlvbiBkKCl7aWYodHlwZW9mIGNBPCJ1IilyZXR1cm4gY0E7bGV0IGU9T2UoKTtyZXR1cm4gdHlwZW9mIGU8InUiP2U6bG99dmFyICQ9bnVsbDthc3luYyBmdW5jdGlvbiBDcigpe2xldCBlPWQoKSxBPXR5cGVvZiBlIT0ic3RyaW5nIiYmdHlwZW9mIGU/LmhyZWY8InUiP2UuaHJlZjplOyQ9YXdhaXQgcGUoQSl9ZnVuY3Rpb24gX0koZSl7JD1lfWFzeW5jIGZ1bmN0aW9uIHkoKXtpZigkIT09bnVsbClyZXR1cm4gJC50ZXJtaW5hdGVkJiZhd2FpdCBDcigpLCQ7bGV0IGU9Y3IoKTtyZXR1cm4gZSE9PW51bGw/ZTooYXdhaXQgQ3IoKSwkKX1hc3luYyBmdW5jdGlvbiBwbyhlKXtsZXQgdD0oYXdhaXQgVC5nZXQoYCR7ZX0vaW5kZXguanNvbmAse3Jlc3BvbnNlVHlwZToianNvbiJ9KSkuZGF0YSxyPWF3YWl0IFQuZ2V0KGAke2V9L2RhdGEvZGF0YS5yYXdgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIn0pO3QuZGF0YT1OKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUsci5kYXRhKTtsZXQgbz1hd2FpdCBULmdldChgJHtlfS9kYXRhL2RpcmVjdGlvbi5yYXdgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIn0pO3JldHVybiB0LmRpcmVjdGlvbj1OKEQuRmxvYXQ2NCxvLmRhdGEpLHR9dmFyIG1vPXBvO3ZhciB1bz1uZXcgTWFwKFtbImltYWdlL2pwZWciLCJqcGVnIl0sWyJpbWFnZS9wbmciLCJwbmciXSxbImltYWdlL3RpZmYiLCJ0aWZmIl0sWyJpbWFnZS94LW1zLWJtcCIsImJtcCJdLFsiaW1hZ2UveC1ibXAiLCJibXAiXSxbImltYWdlL2JtcCIsImJtcCJdLFsiYXBwbGljYXRpb24vZGljb20iLCJnZGNtIl1dKSxlZT11bzthc3luYyBmdW5jdGlvbiBmbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJwbmctcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgQkE9Zm87YXN5bmMgZnVuY3Rpb24gY28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJwbmctd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgZEE9Y287YXN5bmMgZnVuY3Rpb24gQm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibWV0YS1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBDQT1Cbzthc3luYyBmdW5jdGlvbiBDbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Im1ldGEtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgRUE9Q287YXN5bmMgZnVuY3Rpb24gRW8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0idGlmZi1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciB5QT1Fbzthc3luYyBmdW5jdGlvbiB5byhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9InRpZmYtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgUUE9eW87YXN5bmMgZnVuY3Rpb24gUW8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibmlmdGktcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgaEE9UW87YXN5bmMgZnVuY3Rpb24gaG8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJuaWZ0aS13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciB3QT1obzthc3luYyBmdW5jdGlvbiB3byhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJqcGVnLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFJBPXdvO2FzeW5jIGZ1bmN0aW9uIFJvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ianBlZy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBrQT1Sbzthc3luYyBmdW5jdGlvbiBrbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJucnJkLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIGJBPWtvO2FzeW5jIGZ1bmN0aW9uIGJvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ibnJyZC13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBEQT1ibzthc3luYyBmdW5jdGlvbiBEbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJ2dGstcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgV0E9RG87YXN5bmMgZnVuY3Rpb24gV28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJ2dGstd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgRkE9V287YXN5bmMgZnVuY3Rpb24gRm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iYm1wLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFVBPUZvO2FzeW5jIGZ1bmN0aW9uIFVvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iYm1wLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIE5BPVVvO2FzeW5jIGZ1bmN0aW9uIE5vKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImhkZjUtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgU0E9Tm87YXN5bmMgZnVuY3Rpb24gU28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJoZGY1LXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIE9BPVNvO2FzeW5jIGZ1bmN0aW9uIE9vKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Im1pbmMtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgUEE9T287YXN5bmMgZnVuY3Rpb24gUG8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJtaW5jLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIHhBPVBvO2FzeW5jIGZ1bmN0aW9uIHhvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Im1yYy1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBUQT14bzthc3luYyBmdW5jdGlvbiBUbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Im1yYy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBHQT1Ubzthc3luYyBmdW5jdGlvbiBHbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJsc20tcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgSkE9R287YXN5bmMgZnVuY3Rpb24gSm8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJsc20td3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgTEE9Sm87YXN5bmMgZnVuY3Rpb24gTG8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibWdoLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIE1BPUxvO2FzeW5jIGZ1bmN0aW9uIE1vKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ibWdoLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIEhBPU1vO2FzeW5jIGZ1bmN0aW9uIEhvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImJpby1yYWQtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgWUE9SG87YXN5bmMgZnVuY3Rpb24gWW8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJiaW8tcmFkLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIHFBPVlvO2FzeW5jIGZ1bmN0aW9uIHFvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdpcGwtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgS0E9cW87YXN5bmMgZnVuY3Rpb24gS28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnaXBsLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGpBPUtvO2FzeW5jIGZ1bmN0aW9uIGpvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdlLWFkdy1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciB2QT1qbzthc3luYyBmdW5jdGlvbiB2byhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImdlLWFkdy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciB6QT12bzthc3luYyBmdW5jdGlvbiB6byhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJnZTQtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgX0E9em87YXN5bmMgZnVuY3Rpb24gX28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnZTQtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgVkE9X287YXN5bmMgZnVuY3Rpb24gVm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iZ2U1LXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFpBPVZvO2FzeW5jIGZ1bmN0aW9uIFpvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iZ2U1LXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIFhBPVpvO2FzeW5jIGZ1bmN0aW9uIFhvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdkY20tcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgJEE9WG87YXN5bmMgZnVuY3Rpb24gJG8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnZGNtLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGV0PSRvO2FzeW5jIGZ1bmN0aW9uIGVhKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9InNjYW5jby1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBBdD1lYTthc3luYyBmdW5jdGlvbiBBYShlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9InNjYW5jby13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciB0dD1BYTthc3luYyBmdW5jdGlvbiB0YShlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJmZGYtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgcnQ9dGE7YXN5bmMgZnVuY3Rpb24gcmEoZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0id2FzbS1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBpdD1yYTthc3luYyBmdW5jdGlvbiBpYShlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Indhc20td3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgb3Q9aWE7YXN5bmMgZnVuY3Rpb24gb2EoZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0id2FzbS16c3RkLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIGF0PW9hO2FzeW5jIGZ1bmN0aW9uIGFhKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0id2FzbS16c3RkLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIG50PWFhO3ZhciBuYT1uZXcgTWFwKFtbInBuZyIsW0JBLGRBXV0sWyJtZXRhIixbQ0EsRUFdXSxbInRpZmYiLFt5QSxRQV1dLFsibmlmdGkiLFtoQSx3QV1dLFsianBlZyIsW1JBLGtBXV0sWyJucnJkIixbYkEsREFdXSxbInZ0ayIsW1dBLEZBXV0sWyJibXAiLFtVQSxOQV1dLFsiaGRmNSIsW1NBLE9BXV0sWyJtbmMiLFtQQSx4QV1dLFsibXJjIixbVEEsR0FdXSxbImxzbSIsW0pBLExBXV0sWyJtZ2giLFtNQSxIQV1dLFsiYmlvUmFkIixbWUEscUFdXSxbImdpcGwiLFtLQSxqQV1dLFsiZ2VBZHciLFt2QSx6QV1dLFsiZ2U0IixbX0EsVkFdXSxbImdlNSIsW1pBLFhBXV0sWyJnZGNtIixbJEEsZXRdXSxbInNjYW5jbyIsW0F0LHR0XV0sWyJmZGYiLFtydCxudWxsXV0sWyJ3YXNtIixbaXQsb3RdXSxbIndhc21ac3RkIixbYXQsbnRdXV0pLEFlPW5hO2FzeW5jIGZ1bmN0aW9uIHNhKGUsQT17fSl7bGV0IHQ9ZS50eXBlPz8iIixyPWUubmFtZT8/ZS5wYXRoPz8iZmlsZU5hbWUiLG89dGUocikudG9Mb3dlckNhc2UoKSxpPUE/LndlYldvcmtlcixzPWU7aWYoZSBpbnN0YW5jZW9mIEJsb2Ipe2xldCBnPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtzPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGcpfX1sZXQgbT1udWxsO2lmKHQmJmVlLmhhcyh0KSltPWVlLmdldCh0KTtlbHNlIGlmKFkuaGFzKG8pKW09WS5nZXQobyk7ZWxzZSBmb3IobGV0IGcgb2YgQWUudmFsdWVzKCkpaWYoZ1swXSE9PW51bGwpe2xldHt3ZWJXb3JrZXI6bCxjb3VsZFJlYWQ6QixpbWFnZTpRfT1hd2FpdCBnWzBdKHtwYXRoOnMucGF0aCxkYXRhOnMuZGF0YS5zbGljZSgpfSx7d2ViV29ya2VyOmksaW5mb3JtYXRpb25Pbmx5OkE/LmluZm9ybWF0aW9uT25seSxub0NvcHk6QT8ubm9Db3B5fSk7aWYoaT1sLEIpcmV0dXJuIHR5cGVvZiBBPCJ1IiYmKFE9SihRLEEpKSx7d2ViV29ya2VyOmksaW1hZ2U6UX19aWYoIW0pdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIElPIGZvcjogIityKTtsZXQgcD1BZS5nZXQobSlbMF0se3dlYldvcmtlcjphLGNvdWxkUmVhZDpuLGltYWdlOnV9PWF3YWl0IHAocyx7d2ViV29ya2VyOmksaW5mb3JtYXRpb25Pbmx5OkE/LmluZm9ybWF0aW9uT25seSxub0NvcHk6QT8ubm9Db3B5fSk7aWYoaT1hLCFuKXRocm93IEVycm9yKCJDb3VsZCBub3QgcmVhZDogIityKTtyZXR1cm4gdHlwZW9mIEE8InUiJiYodT1KKHUsQSkpLHt3ZWJXb3JrZXI6aSxpbWFnZTp1fX12YXIgc3Q9c2E7dmFyIGdhPXR5cGVvZiBnbG9iYWxUaGlzLm5hdmlnYXRvcj8uaGFyZHdhcmVDb25jdXJyZW5jeT09Im51bWJlciI/Z2xvYmFsVGhpcy5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTo2LEVyPW5ldyBNZShnYSxzdCk7YXN5bmMgZnVuY3Rpb24gSWEoZSxBPXt9KXtsZXQgdD0xLHI9MCxvPSExO3R5cGVvZiBBPT0ib2JqZWN0IiYmKHR5cGVvZiBBLnpTcGFjaW5nPCJ1IiYmKHQ9QS56U3BhY2luZyksdHlwZW9mIEEuek9yaWdpbjwidSImJihyPUEuek9yaWdpbiksdHlwZW9mIEEuc29ydGVkU2VyaWVzPCJ1IiYmKG89QS5zb3J0ZWRTZXJpZXMpKTtsZXQgaT1BcnJheS5mcm9tKGUsYXN5bmMgZnVuY3Rpb24obil7aWYobiBpbnN0YW5jZW9mIEZpbGUpe2xldCB1PWF3YWl0IG4uYXJyYXlCdWZmZXIoKTtyZXR1cm57cGF0aDpuLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19cmV0dXJuIG59KSxzPWF3YWl0IFByb21pc2UuYWxsKGkpO298fHMuc29ydCgobix1KT0+bi5wYXRoPHUucGF0aD8tMTpuLnBhdGg+dS5wYXRoPzE6MCk7bGV0IG09W107Zm9yKGxldCBuPTA7bjxzLmxlbmd0aDtuKyspbS5wdXNoKFtzW25dLHt9XSk7bGV0IHA9KGF3YWl0IEVyLnJ1blRhc2tzKG0pLnByb21pc2UpLm1hcChuPT57bGV0IHU9bi5pbWFnZTtyZXR1cm4gdS5pbWFnZVR5cGUuZGltZW5zaW9uPTMsdS5zaXplLnB1c2goMSksdS5zcGFjaW5nLnB1c2godCksdS5vcmlnaW4ucHVzaChyKSx1LmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KDkpLHUuZGlyZWN0aW9uLmZpbGwoMCksdS5kaXJlY3Rpb25bMF09MSx1LmRpcmVjdGlvbls0XT0xLHUuZGlyZWN0aW9uWzhdPTEsdX0pLGE9SmUocCk7cmV0dXJuIHR5cGVvZiBBPT0ib2JqZWN0IiYmKHR5cGVvZiBBLmNvbXBvbmVudFR5cGU8InUifHx0eXBlb2YgQS5waXhlbFR5cGU8InUiKSYmKGE9SihhLEEpKSx7aW1hZ2U6YSx3ZWJXb3JrZXJQb29sOkVyfX12YXIgbGE9SWE7YXN5bmMgZnVuY3Rpb24gcGEoZSxBLHQ9e30pe2xldCByPWU7KHR5cGVvZiB0LmNvbXBvbmVudFR5cGU8InUifHx0eXBlb2YgdC5waXhlbFR5cGU8InUiKSYmKHI9SihlLHQpKTtsZXQgbz10Lm1pbWVUeXBlLGk9dGUoQSkudG9Mb3dlckNhc2UoKSxzPXQud2ViV29ya2VyLG09bnVsbDtpZih0eXBlb2YgbzwidSImJmVlLmhhcyhvKSltPWVlLmdldChvKTtlbHNlIGlmKFkuaGFzKGkpKW09WS5nZXQoaSk7ZWxzZSBmb3IobGV0IGwgb2YgQWUudmFsdWVzKCkpaWYobFsxXSE9PW51bGwpe2xldHt3ZWJXb3JrZXI6Qixjb3VsZFdyaXRlOlEsc2VyaWFsaXplZEltYWdlOlJ9PWF3YWl0IGxbMV0oR2UociksQSx0KTtpZihzPUIsUSlyZXR1cm57d2ViV29ya2VyOnMsc2VyaWFsaXplZEltYWdlOlJ9fWlmKCFtKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIrQSk7bGV0IHA9QWUuZ2V0KG0pWzFdLHt3ZWJXb3JrZXI6YSxjb3VsZFdyaXRlOm4sc2VyaWFsaXplZEltYWdlOnV9PWF3YWl0IHAocixBLHQpO2lmKHM9YSwhbil0aHJvdyBFcnJvcigiQ291bGQgbm90IHdyaXRlOiAiK0EpO3JldHVybnt3ZWJXb3JrZXI6cyxzZXJpYWxpemVkSW1hZ2U6dX19dmFyIG1hPXBhO2FzeW5jIGZ1bmN0aW9uIHVhKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iZmRmLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGZhPXVhO3ZhciB5cj0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgSUk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBlST0oQSx0KT0+e2Zvcih2YXIgSSBpbiB0KUlJKEEsSSx7Z2V0OnRbSV0sZW51bWVyYWJsZTohMH0pfTt2YXIgdkE9U3ltYm9sKCJDb21saW5rLnByb3h5IiksZ0k9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50Iiksckk9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLHBBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxlQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksJEE9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsb0k9e2NhbkhhbmRsZTpBPT4kQShBKSYmQVt2QV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTp0LHBvcnQyOkl9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gaUEoQSx0KSxbSSxbSV1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLG5JKEEpfX0saUk9e2NhbkhhbmRsZTpBPT4kQShBKSYmZUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgdDtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOkF9LFt0LFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LEF0PW5ldyBNYXAoW1sicHJveHkiLG9JXSxbInRocm93IixpSV1dKTtmdW5jdGlvbiBDSShBLHQpe2ZvcihsZXQgSSBvZiBBKWlmKHQ9PT1JfHxJPT09IioifHxJIGluc3RhbmNlb2YgUmVnRXhwJiZJLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaUEoQSx0PWdsb2JhbFRoaXMsST1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBlKGcpe2lmKCFnfHwhZy5kYXRhKXJldHVybjtpZighQ0koSSxnLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke2cub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpyLHR5cGU6byxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGcuZGF0YSksYT0oZy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChiKSxRO3RyeXtsZXQgQj1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixzKT0+ZltzXSxBKSxpPW4ucmVkdWNlKChmLHMpPT5mW3NdLEEpO3N3aXRjaChvKXtjYXNlIkdFVCI6UT1pO2JyZWFrO2Nhc2UiU0VUIjpCW24uc2xpY2UoLTEpWzBdXT1iKGcuZGF0YS52YWx1ZSksUT0hMDticmVhaztjYXNlIkFQUExZIjpRPWkuYXBwbHkoQixhKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBpKC4uLmEpO1E9YUkoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOnN9PW5ldyBNZXNzYWdlQ2hhbm5lbDtpQShBLHMpLFE9RkEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6UT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEIpe1E9e3ZhbHVlOkIsW2VBXTowfX1Qcm9taXNlLnJlc29sdmUoUSkuY2F0Y2goQj0+KHt2YWx1ZTpCLFtlQV06MH0pKS50aGVuKEI9PntsZXRbaSxmXT1vQShCKTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpLG89PT0iUkVMRUFTRSImJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGUpLHR0KHQpLHBBIGluIEEmJnR5cGVvZiBBW3BBXT09ImZ1bmN0aW9uIiYmQVtwQV0oKSl9KS5jYXRjaChCPT57bGV0W2ksZl09b0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtlQV06MH0pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZil9KX0pLHQuc3RhcnQmJnQuc3RhcnQoKX1mdW5jdGlvbiBCSShBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiB0dChBKXtCSShBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIG5JKEEsdCl7cmV0dXJuIFNBKEEsW10sdCl9ZnVuY3Rpb24gSUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIEl0KEEpe3JldHVybiBxKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3R0KEEpfSl9dmFyIGdBPW5ldyBXZWFrTWFwLHJBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCB0PShnQS5nZXQoQSl8fDApLTE7Z0Euc2V0KEEsdCksdD09PTAmJkl0KEEpfSk7ZnVuY3Rpb24gc0koQSx0KXtsZXQgST0oZ0EuZ2V0KHQpfHwwKSsxO2dBLnNldCh0LEkpLHJBJiZyQS5yZWdpc3RlcihBLHQsQSl9ZnVuY3Rpb24gUUkoQSl7ckEmJnJBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gU0EoQSx0PVtdLEk9ZnVuY3Rpb24oKXt9KXtsZXQgZT0hMSxnPW5ldyBQcm94eShJLHtnZXQocixvKXtpZihJQShlKSxvPT09ckkpcmV0dXJuKCk9PntRSShnKSxJdChBKSxlPSEwfTtpZihvPT09InRoZW4iKXtpZih0Lmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pmd9O2xldCBuPXEoQSx7dHlwZToiR0VUIixwYXRoOnQubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKGIpO3JldHVybiBuLnRoZW4uYmluZChuKX1yZXR1cm4gU0EoQSxbLi4udCxvXSl9LHNldChyLG8sbil7SUEoZSk7bGV0W2EsUV09b0Eobik7cmV0dXJuIHEoQSx7dHlwZToiU0VUIixwYXRoOlsuLi50LG9dLm1hcChCPT5CLnRvU3RyaW5nKCkpLHZhbHVlOmF9LFEpLnRoZW4oYil9LGFwcGx5KHIsbyxuKXtJQShlKTtsZXQgYT10W3QubGVuZ3RoLTFdO2lmKGE9PT1nSSlyZXR1cm4gcShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKGIpO2lmKGE9PT0iYmluZCIpcmV0dXJuIFNBKEEsdC5zbGljZSgwLC0xKSk7bGV0W1EsQl09X0Eobik7cmV0dXJuIHEoQSx7dHlwZToiQVBQTFkiLHBhdGg6dC5tYXAoaT0+aS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6UX0sQikudGhlbihiKX0sY29uc3RydWN0KHIsbyl7SUEoZSk7bGV0W24sYV09X0Eobyk7cmV0dXJuIHEoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOnQubWFwKFE9PlEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Om59LGEpLnRoZW4oYil9fSk7cmV0dXJuIHNJKGcsQSksZ31mdW5jdGlvbiBFSShBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBfQShBKXtsZXQgdD1BLm1hcChvQSk7cmV0dXJuW3QubWFwKEk9PklbMF0pLEVJKHQubWFwKEk9PklbMV0pKV19dmFyIGV0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEZBKEEsdCl7cmV0dXJuIGV0LnNldChBLHQpLEF9ZnVuY3Rpb24gYUkoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3ZBXTohMH0pfWZ1bmN0aW9uIG9BKEEpe2ZvcihsZXRbdCxJXW9mIEF0KWlmKEkuY2FuSGFuZGxlKEEpKXtsZXRbZSxnXT1JLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6dCx2YWx1ZTplfSxnXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZXQuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gYihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBBdC5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIHEoQSx0LEkpe3JldHVybiBuZXcgUHJvbWlzZShlPT57bGV0IGc9Y0koKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobyl7IW8uZGF0YXx8IW8uZGF0YS5pZHx8by5kYXRhLmlkIT09Z3x8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZShvLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmd9LHQpLEkpfSl9ZnVuY3Rpb24gY0koKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFcoQSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseSh0LGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpmSX09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6VUF9PU9iamVjdCxCQT0oQT0+dD0+e2xldCBJPWZJLmNhbGwodCk7cmV0dXJuIEFbSV18fChBW0ldPUkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxVPUE9PihBPUEudG9Mb3dlckNhc2UoKSx0PT5CQSh0KT09PUEpLG5BPUE9PnQ9PnR5cGVvZiB0PT09QSx7aXNBcnJheTpLfT1BcnJheSxaPW5BKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBsSShBKXtyZXR1cm4gQSE9PW51bGwmJiFaKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIVooQS5jb25zdHJ1Y3RvcikmJkYoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIGl0PVUoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gREkoQSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz90PUFycmF5QnVmZmVyLmlzVmlldyhBKTp0PUEmJkEuYnVmZmVyJiZpdChBLmJ1ZmZlciksdH12YXIgdUk9bkEoInN0cmluZyIpLEY9bkEoImZ1bmN0aW9uIiksQ3Q9bkEoIm51bWJlciIpLHNBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsaEk9QT0+QT09PSEwfHxBPT09ITEsQ0E9QT0+e2lmKEJBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IHQ9VUEoQSk7cmV0dXJuKHQ9PT1udWxsfHx0PT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZEk9VSgiRGF0ZSIpLHlJPVUoIkZpbGUiKSx3ST1VKCJCbG9iIiksbUk9VSgiRmlsZUxpc3QiKSxwST1BPT5zQShBKSYmRihBLnBpcGUpLFNJPUE9PntsZXQgdDtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxGKEEuYXBwZW5kKSYmKCh0PUJBKEEpKT09PSJmb3JtZGF0YSJ8fHQ9PT0ib2JqZWN0IiYmRihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxGST1VKCJVUkxTZWFyY2hQYXJhbXMiKSxSST1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gVihBLHQse2FsbE93bktleXM6ST0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBlLGc7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEsoQSkpZm9yKGU9MCxnPUEubGVuZ3RoO2U8ZztlKyspdC5jYWxsKG51bGwsQVtlXSxlLEEpO2Vsc2V7bGV0IHI9ST9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxvPXIubGVuZ3RoLG47Zm9yKGU9MDtlPG87ZSsrKW49cltlXSx0LmNhbGwobnVsbCxBW25dLG4sQSl9fWZ1bmN0aW9uIEJ0KEEsdCl7dD10LnRvTG93ZXJDYXNlKCk7bGV0IEk9T2JqZWN0LmtleXMoQSksZT1JLmxlbmd0aCxnO2Zvcig7ZS0tID4wOylpZihnPUlbZV0sdD09PWcudG9Mb3dlckNhc2UoKSlyZXR1cm4gZztyZXR1cm4gbnVsbH12YXIgbnQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxzdD1BPT4hWihBKSYmQSE9PW50O2Z1bmN0aW9uIE5BKCl7bGV0e2Nhc2VsZXNzOkF9PXN0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LEk9KGUsZyk9PntsZXQgcj1BJiZCdCh0LGcpfHxnO0NBKHRbcl0pJiZDQShlKT90W3JdPU5BKHRbcl0sZSk6Q0EoZSk/dFtyXT1OQSh7fSxlKTpLKGUpP3Rbcl09ZS5zbGljZSgpOnRbcl09ZX07Zm9yKGxldCBlPTAsZz1hcmd1bWVudHMubGVuZ3RoO2U8ZztlKyspYXJndW1lbnRzW2VdJiZWKGFyZ3VtZW50c1tlXSxJKTtyZXR1cm4gdH12YXIgTkk9KEEsdCxJLHthbGxPd25LZXlzOmV9PXt9KT0+KFYodCwoZyxyKT0+e0kmJkYoZyk/QVtyXT1XKGcsSSk6QVtyXT1nfSx7YWxsT3duS2V5czplfSksQSksVUk9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxHST0oQSx0LEksZSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6dC5wcm90b3R5cGV9KSxJJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLEkpfSxrST0oQSx0LEksZSk9PntsZXQgZyxyLG8sbj17fTtpZih0PXR8fHt9LEE9PW51bGwpcmV0dXJuIHQ7ZG97Zm9yKGc9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSkscj1nLmxlbmd0aDtyLS0gPjA7KW89Z1tyXSwoIWV8fGUobyxBLHQpKSYmIW5bb10mJih0W29dPUFbb10sbltvXT0hMCk7QT1JIT09ITEmJlVBKEEpfXdoaWxlKEEmJighSXx8SShBLHQpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB0fSxMST0oQSx0LEkpPT57QT1TdHJpbmcoQSksKEk9PT12b2lkIDB8fEk+QS5sZW5ndGgpJiYoST1BLmxlbmd0aCksSS09dC5sZW5ndGg7bGV0IGU9QS5pbmRleE9mKHQsSSk7cmV0dXJuIGUhPT0tMSYmZT09PUl9LEpJPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihLKEEpKXJldHVybiBBO2xldCB0PUEubGVuZ3RoO2lmKCFDdCh0KSlyZXR1cm4gbnVsbDtsZXQgST1uZXcgQXJyYXkodCk7Zm9yKDt0LS0gPjA7KUlbdF09QVt0XTtyZXR1cm4gSX0sSEk9KEE9PnQ9PkEmJnQgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJlVBKFVpbnQ4QXJyYXkpKSxZST0oQSx0KT0+e2xldCBlPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksZztmb3IoOyhnPWUubmV4dCgpKSYmIWcuZG9uZTspe2xldCByPWcudmFsdWU7dC5jYWxsKEEsclswXSxyWzFdKX19LGJJPShBLHQpPT57bGV0IEksZT1bXTtmb3IoOyhJPUEuZXhlYyh0KSkhPT1udWxsOyllLnB1c2goSSk7cmV0dXJuIGV9LE1JPVUoIkhUTUxGb3JtRWxlbWVudCIpLHFJPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKEksZSxnKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK2d9KSxydD0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9Pih0LEkpPT5BLmNhbGwodCxJKSkoT2JqZWN0LnByb3RvdHlwZSksS0k9VSgiUmVnRXhwIiksUXQ9KEEsdCk9PntsZXQgST1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxlPXt9O1YoSSwoZyxyKT0+e2xldCBvOyhvPXQoZyxyLEEpKSE9PSExJiYoZVtyXT1vfHxnKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsZSl9LE9JPUE9PntRdChBLCh0LEkpPT57aWYoRihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKEkpIT09LTEpcmV0dXJuITE7bGV0IGU9QVtJXTtpZihGKGUpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK0krIlwnIil9KX19KX0sVEk9KEEsdCk9PntsZXQgST17fSxlPWc9PntnLmZvckVhY2gocj0+e0lbcl09ITB9KX07cmV0dXJuIEsoQSk/ZShBKTplKFN0cmluZyhBKS5zcGxpdCh0KSksSX0sUEk9KCk9Pnt9LHhJPShBLHQpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTp0KSxSQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLG90PSIwMTIzNDU2Nzg5IixFdD17RElHSVQ6b3QsQUxQSEE6UkEsQUxQSEFfRElHSVQ6UkErUkEudG9VcHBlckNhc2UoKStvdH0sakk9KEE9MTYsdD1FdC5BTFBIQV9ESUdJVCk9PntsZXQgST0iIix7bGVuZ3RoOmV9PXQ7Zm9yKDtBLS07KUkrPXRbTWF0aC5yYW5kb20oKSplfDBdO3JldHVybiBJfTtmdW5jdGlvbiBXSShBKXtyZXR1cm4hIShBJiZGKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgWkk9QT0+e2xldCB0PW5ldyBBcnJheSgxMCksST0oZSxnKT0+e2lmKHNBKGUpKXtpZih0LmluZGV4T2YoZSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBlKSl7dFtnXT1lO2xldCByPUsoZSk/W106e307cmV0dXJuIFYoZSwobyxuKT0+e2xldCBhPUkobyxnKzEpOyFaKGEpJiYocltuXT1hKX0pLHRbZ109dm9pZCAwLHJ9fXJldHVybiBlfTtyZXR1cm4gSShBLDApfSxWST1VKCJBc3luY0Z1bmN0aW9uIiksWEk9QT0+QSYmKHNBKEEpfHxGKEEpKSYmRihBLnRoZW4pJiZGKEEuY2F0Y2gpLEM9e2lzQXJyYXk6Syxpc0FycmF5QnVmZmVyOml0LGlzQnVmZmVyOmxJLGlzRm9ybURhdGE6U0ksaXNBcnJheUJ1ZmZlclZpZXc6REksaXNTdHJpbmc6dUksaXNOdW1iZXI6Q3QsaXNCb29sZWFuOmhJLGlzT2JqZWN0OnNBLGlzUGxhaW5PYmplY3Q6Q0EsaXNVbmRlZmluZWQ6Wixpc0RhdGU6ZEksaXNGaWxlOnlJLGlzQmxvYjp3SSxpc1JlZ0V4cDpLSSxpc0Z1bmN0aW9uOkYsaXNTdHJlYW06cEksaXNVUkxTZWFyY2hQYXJhbXM6RkksaXNUeXBlZEFycmF5OkhJLGlzRmlsZUxpc3Q6bUksZm9yRWFjaDpWLG1lcmdlOk5BLGV4dGVuZDpOSSx0cmltOlJJLHN0cmlwQk9NOlVJLGluaGVyaXRzOkdJLHRvRmxhdE9iamVjdDprSSxraW5kT2Y6QkEsa2luZE9mVGVzdDpVLGVuZHNXaXRoOkxJLHRvQXJyYXk6SkksZm9yRWFjaEVudHJ5OllJLG1hdGNoQWxsOmJJLGlzSFRNTEZvcm06TUksaGFzT3duUHJvcGVydHk6cnQsaGFzT3duUHJvcDpydCxyZWR1Y2VEZXNjcmlwdG9yczpRdCxmcmVlemVNZXRob2RzOk9JLHRvT2JqZWN0U2V0OlRJLHRvQ2FtZWxDYXNlOnFJLG5vb3A6UEksdG9GaW5pdGVOdW1iZXI6eEksZmluZEtleTpCdCxnbG9iYWw6bnQsaXNDb250ZXh0RGVmaW5lZDpzdCxBTFBIQUJFVDpFdCxnZW5lcmF0ZVN0cmluZzpqSSxpc1NwZWNDb21wbGlhbnRGb3JtOldJLHRvSlNPTk9iamVjdDpaSSxpc0FzeW5jRm46VkksaXNUaGVuYWJsZTpYSX07ZnVuY3Rpb24gTyhBLHQsSSxlLGcpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxJJiYodGhpcy5jb25maWc9SSksZSYmKHRoaXMucmVxdWVzdD1lKSxnJiYodGhpcy5yZXNwb25zZT1nKX1DLmluaGVyaXRzKE8sRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpDLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBhdD1PLnByb3RvdHlwZSxjdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntjdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLGN0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXQsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Ty5mcm9tPShBLHQsSSxlLGcscik9PntsZXQgbz1PYmplY3QuY3JlYXRlKGF0KTtyZXR1cm4gQy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGEpe3JldHVybiBhIT09RXJyb3IucHJvdG90eXBlfSxuPT5uIT09ImlzQXhpb3NFcnJvciIpLE8uY2FsbChvLEEubWVzc2FnZSx0LEksZSxnKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxyJiZPYmplY3QuYXNzaWduKG8sciksb307dmFyIGw9Tzt2YXIgUUE9bnVsbDtmdW5jdGlvbiBHQShBKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KEEpfHxDLmlzQXJyYXkoQSl9ZnVuY3Rpb24gbHQoQSl7cmV0dXJuIEMuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gZnQoQSx0LEkpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihnLHIpe3JldHVybiBnPWx0KGcpLCFJJiZyPyJbIitnKyJdIjpnfSkuam9pbihJPyIuIjoiIik6dH1mdW5jdGlvbiB6SShBKXtyZXR1cm4gQy5pc0FycmF5KEEpJiYhQS5zb21lKEdBKX12YXIgX0k9Qy50b0ZsYXRPYmplY3QoQyx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHZJKEEsdCxJKXtpZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhRQXx8Rm9ybURhdGEpLEk9Qy50b0ZsYXRPYmplY3QoSSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIUMuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgZT1JLm1ldGFUb2tlbnMsZz1JLnZpc2l0b3J8fEIscj1JLmRvdHMsbz1JLmluZGV4ZXMsYT0oSS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZDLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIUMuaXNGdW5jdGlvbihnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIFEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoQy5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYSYmQy5pc0Jsb2IoRSkpdGhyb3cgbmV3IGwoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEMuaXNBcnJheUJ1ZmZlcihFKXx8Qy5pc1R5cGVkQXJyYXkoRSk/YSYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEIoRSxjLHUpe2xldCB5PUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoQy5lbmRzV2l0aChjLCJ7fSIpKWM9ZT9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKEMuaXNBcnJheShFKSYmekkoRSl8fChDLmlzRmlsZUxpc3QoRSl8fEMuZW5kc1dpdGgoYywiW10iKSkmJih5PUMudG9BcnJheShFKSkpcmV0dXJuIGM9bHQoYykseS5mb3JFYWNoKGZ1bmN0aW9uKE4sdEkpeyEoQy5pc1VuZGVmaW5lZChOKXx8Tj09PW51bGwpJiZ0LmFwcGVuZChvPT09ITA/ZnQoW2NdLHRJLHIpOm89PT1udWxsP2M6YysiW10iLFEoTikpfSksITF9cmV0dXJuIEdBKEUpPyEwOih0LmFwcGVuZChmdCh1LGMsciksUShFKSksITEpfWxldCBpPVtdLGY9T2JqZWN0LmFzc2lnbihfSSx7ZGVmYXVsdFZpc2l0b3I6Qixjb252ZXJ0VmFsdWU6USxpc1Zpc2l0YWJsZTpHQX0pO2Z1bmN0aW9uIHMoRSxjKXtpZighQy5pc1VuZGVmaW5lZChFKSl7aWYoaS5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTtpLnB1c2goRSksQy5mb3JFYWNoKEUsZnVuY3Rpb24oeSxSKXsoIShDLmlzVW5kZWZpbmVkKHkpfHx5PT09bnVsbCkmJmcuY2FsbCh0LHksQy5pc1N0cmluZyhSKT9SLnRyaW0oKTpSLGMsZikpPT09ITAmJnMoeSxjP2MuY29uY2F0KFIpOltSXSl9KSxpLnBvcCgpfX1pZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIHMoQSksdH12YXIgSj12STtmdW5jdGlvbiBEdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIHV0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmSihBLHRoaXMsdCl9dmFyIGh0PXV0LnByb3RvdHlwZTtodC5hcHBlbmQ9ZnVuY3Rpb24odCxJKXt0aGlzLl9wYWlycy5wdXNoKFt0LEldKX07aHQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IEk9dD9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxEdCl9OkR0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIEkoZ1swXSkrIj0iK0koZ1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciBFQT11dDtmdW5jdGlvbiAkSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiBYKEEsdCxJKXtpZighdClyZXR1cm4gQTtsZXQgZT1JJiZJLmVuY29kZXx8JEksZz1JJiZJLnNlcmlhbGl6ZSxyO2lmKGc/cj1nKHQsSSk6cj1DLmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcgRUEodCxJKS50b1N0cmluZyhlKSxyKXtsZXQgbz1BLmluZGV4T2YoIiUyMyIpO28hPT0tMSYmKEE9QS5zbGljZSgwLG8pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStyfXJldHVybiBBfXZhciBrQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsSSxlKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDpJLHN5bmNocm9ub3VzOmU/ZS5zeW5jaHJvbm91czohMSxydW5XaGVuOmU/ZS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7Qy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oZSl7ZSE9PW51bGwmJnQoZSl9KX19LExBPWtBO3ZhciBhQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGR0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpFQTt2YXIgeXQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciB3dD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBtdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpkdCxGb3JtRGF0YTp5dCxCbG9iOnd0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIEpBPXt9O2VJKEpBLHtoYXNCcm93c2VyRW52OigpPT5wdCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFlLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+dGV9KTt2YXIgcHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsQWU9KEE9PnB0JiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksdGU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciB3PXsuLi5KQSwuLi5tdH07ZnVuY3Rpb24gSEEoQSx0KXtyZXR1cm4gSihBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oSSxlLGcscil7cmV0dXJuIHcuaXNOb2RlJiZDLmlzQnVmZmVyKEkpPyh0aGlzLmFwcGVuZChlLEkudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6ci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gSWUoQSl7cmV0dXJuIEMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBlZShBKXtsZXQgdD17fSxJPU9iamVjdC5rZXlzKEEpLGUsZz1JLmxlbmd0aCxyO2ZvcihlPTA7ZTxnO2UrKylyPUlbZV0sdFtyXT1BW3JdO3JldHVybiB0fWZ1bmN0aW9uIGdlKEEpe2Z1bmN0aW9uIHQoSSxlLGcscil7bGV0IG89SVtyKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgbj1OdW1iZXIuaXNGaW5pdGUoK28pLGE9cj49SS5sZW5ndGg7cmV0dXJuIG89IW8mJkMuaXNBcnJheShnKT9nLmxlbmd0aDpvLGE/KEMuaGFzT3duUHJvcChnLG8pP2dbb109W2dbb10sZV06Z1tvXT1lLCFuKTooKCFnW29dfHwhQy5pc09iamVjdChnW29dKSkmJihnW29dPVtdKSx0KEksZSxnW29dLHIpJiZDLmlzQXJyYXkoZ1tvXSkmJihnW29dPWVlKGdbb10pKSwhbil9aWYoQy5pc0Zvcm1EYXRhKEEpJiZDLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IEk9e307cmV0dXJuIEMuZm9yRWFjaEVudHJ5KEEsKGUsZyk9Pnt0KEllKGUpLGcsSSwwKX0pLEl9cmV0dXJuIG51bGx9dmFyIGNBPWdlO2Z1bmN0aW9uIHJlKEEsdCxJKXtpZihDLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksQy50cmltKEEpfWNhdGNoKGUpe2lmKGUubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgZX1yZXR1cm4oSXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBZQT17dHJhbnNpdGlvbmFsOmFBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxJKXtsZXQgZT1JLmdldENvbnRlbnRUeXBlKCl8fCIiLGc9ZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEscj1DLmlzT2JqZWN0KHQpO2lmKHImJkMuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxDLmlzRm9ybURhdGEodCkpcmV0dXJuIGc/SlNPTi5zdHJpbmdpZnkoY0EodCkpOnQ7aWYoQy5pc0FycmF5QnVmZmVyKHQpfHxDLmlzQnVmZmVyKHQpfHxDLmlzU3RyZWFtKHQpfHxDLmlzRmlsZSh0KXx8Qy5pc0Jsb2IodCkpcmV0dXJuIHQ7aWYoQy5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoQy5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IG47aWYocil7aWYoZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gSEEodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChuPUMuaXNGaWxlTGlzdCh0KSl8fGUuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEoobj97ImZpbGVzW10iOnR9OnQsYSYmbmV3IGEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiByfHxnPyhJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSkscmUodCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IEk9dGhpcy50cmFuc2l0aW9uYWx8fFlBLnRyYW5zaXRpb25hbCxlPUkmJkkuZm9yY2VkSlNPTlBhcnNpbmcsZz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZih0JiZDLmlzU3RyaW5nKHQpJiYoZSYmIXRoaXMucmVzcG9uc2VUeXBlfHxnKSl7bGV0IG89IShJJiZJLnNpbGVudEpTT05QYXJzaW5nKSYmZzt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2gobil7aWYobyl0aHJvdyBuLm5hbWU9PT0iU3ludGF4RXJyb3IiP2wuZnJvbShuLGwuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bn19cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57WUEuaGVhZGVyc1tBXT17fX0pO3ZhciBUPVlBO3ZhciBvZT1DLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLFN0PUE9PntsZXQgdD17fSxJLGUsZztyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihvKXtnPW8uaW5kZXhPZigiOiIpLEk9by5zdWJzdHJpbmcoMCxnKS50cmltKCkudG9Mb3dlckNhc2UoKSxlPW8uc3Vic3RyaW5nKGcrMSkudHJpbSgpLCEoIUl8fHRbSV0mJm9lW0ldKSYmKEk9PT0ic2V0LWNvb2tpZSI/dFtJXT90W0ldLnB1c2goZSk6dFtJXT1bZV06dFtJXT10W0ldP3RbSV0rIiwgIitlOmUpfSksdH07dmFyIEZ0PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24geihBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpDLmlzQXJyYXkoQSk/QS5tYXAoZkEpOlN0cmluZyhBKX1mdW5jdGlvbiBpZShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLEk9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxlO2Zvcig7ZT1JLmV4ZWMoQSk7KXRbZVsxXV09ZVsyXTtyZXR1cm4gdH12YXIgQ2U9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gYkEoQSx0LEksZSxnKXtpZihDLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHQsSSk7aWYoZyYmKHQ9SSksISFDLmlzU3RyaW5nKHQpKXtpZihDLmlzU3RyaW5nKGUpKXJldHVybiB0LmluZGV4T2YoZSkhPT0tMTtpZihDLmlzUmVnRXhwKGUpKXJldHVybiBlLnRlc3QodCl9fWZ1bmN0aW9uIEJlKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxJLGUpPT5JLnRvVXBwZXJDYXNlKCkrZSl9ZnVuY3Rpb24gbmUoQSx0KXtsZXQgST1DLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGUrSSx7dmFsdWU6ZnVuY3Rpb24oZyxyLG8pe3JldHVybiB0aGlzW2VdLmNhbGwodGhpcyx0LGcscixvKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxJLGUpe2xldCBnPXRoaXM7ZnVuY3Rpb24gcihuLGEsUSl7bGV0IEI9eihhKTtpZighQil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGk9Qy5maW5kS2V5KGcsQik7KCFpfHxnW2ldPT09dm9pZCAwfHxRPT09ITB8fFE9PT12b2lkIDAmJmdbaV0hPT0hMSkmJihnW2l8fGFdPWZBKG4pKX1sZXQgbz0obixhKT0+Qy5mb3JFYWNoKG4sKFEsQik9PnIoUSxCLGEpKTtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKHQsSSk6Qy5pc1N0cmluZyh0KSYmKHQ9dC50cmltKCkpJiYhQ2UodCk/byhTdCh0KSxJKTp0IT1udWxsJiZyKEksdCxlKSx0aGlzfWdldCh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtpZihlKXtsZXQgZz10aGlzW2VdO2lmKCFJKXJldHVybiBnO2lmKEk9PT0hMClyZXR1cm4gaWUoZyk7aWYoQy5pc0Z1bmN0aW9uKEkpKXJldHVybiBJLmNhbGwodGhpcyxnLGUpO2lmKEMuaXNSZWdFeHAoSSkpcmV0dXJuIEkuZXhlYyhnKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKGUmJnRoaXNbZV0hPT12b2lkIDAmJighSXx8YkEodGhpcyx0aGlzW2VdLGUsSSkpKX1yZXR1cm4hMX1kZWxldGUodCxJKXtsZXQgZT10aGlzLGc9ITE7ZnVuY3Rpb24gcihvKXtpZihvPXoobyksbyl7bGV0IG49Qy5maW5kS2V5KGUsbyk7biYmKCFJfHxiQShlLGVbbl0sbixJKSkmJihkZWxldGUgZVtuXSxnPSEwKX19cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSxnfWNsZWFyKHQpe2xldCBJPU9iamVjdC5rZXlzKHRoaXMpLGU9SS5sZW5ndGgsZz0hMTtmb3IoO2UtLTspe2xldCByPUlbZV07KCF0fHxiQSh0aGlzLHRoaXNbcl0scix0LCEwKSkmJihkZWxldGUgdGhpc1tyXSxnPSEwKX1yZXR1cm4gZ31ub3JtYWxpemUodCl7bGV0IEk9dGhpcyxlPXt9O3JldHVybiBDLmZvckVhY2godGhpcywoZyxyKT0+e2xldCBvPUMuZmluZEtleShlLHIpO2lmKG8pe0lbb109ZkEoZyksZGVsZXRlIElbcl07cmV0dXJufWxldCBuPXQ/QmUocik6U3RyaW5nKHIpLnRyaW0oKTtuIT09ciYmZGVsZXRlIElbcl0sSVtuXT1mQShnKSxlW25dPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChlLGcpPT57ZSE9bnVsbCYmZSE9PSExJiYoSVtnXT10JiZDLmlzQXJyYXkoZSk/ZS5qb2luKCIsICIpOmUpfSksSX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxJXSk9PnQrIjogIitJKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5JKXtsZXQgZT1uZXcgdGhpcyh0KTtyZXR1cm4gSS5mb3JFYWNoKGc9PmUuc2V0KGcpKSxlfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgZT0odGhpc1tGdF09dGhpc1tGdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxnPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIobyl7bGV0IG49eihvKTtlW25dfHwobmUoZyxvKSxlW25dPSEwKX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLHRoaXN9fTtQLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtDLnJlZHVjZURlc2NyaXB0b3JzKFAucHJvdG90eXBlLCh7dmFsdWU6QX0sdCk9PntsZXQgST10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChlKXt0aGlzW0ldPWV9fX0pO0MuZnJlZXplTWV0aG9kcyhQKTt2YXIgbT1QO2Z1bmN0aW9uIF8oQSx0KXtsZXQgST10aGlzfHxULGU9dHx8SSxnPW0uZnJvbShlLmhlYWRlcnMpLHI9ZS5kYXRhO3JldHVybiBDLmZvckVhY2goQSxmdW5jdGlvbihuKXtyPW4uY2FsbChJLHIsZy5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxnLm5vcm1hbGl6ZSgpLHJ9ZnVuY3Rpb24gdihBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFJ0KEEsdCxJKXtsLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGwuRVJSX0NBTkNFTEVELHQsSSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1DLmluaGVyaXRzKFJ0LGwse19fQ0FOQ0VMX186ITB9KTt2YXIgSD1SdDtmdW5jdGlvbiBNQShBLHQsSSl7bGV0IGU9SS5jb25maWcudmFsaWRhdGVTdGF0dXM7IUkuc3RhdHVzfHwhZXx8ZShJLnN0YXR1cyk/QShJKTp0KG5ldyBsKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrSS5zdGF0dXMsW2wuRVJSX0JBRF9SRVFVRVNULGwuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihJLnN0YXR1cy8xMDApLTRdLEkuY29uZmlnLEkucmVxdWVzdCxJKSl9dmFyIE50PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsSSxlLGcscil7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07Qy5pc051bWJlcihJKSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoSSkudG9HTVRTdHJpbmcoKSksQy5pc1N0cmluZyhlKSYmby5wdXNoKCJwYXRoPSIrZSksQy5pc1N0cmluZyhnKSYmby5wdXNoKCJkb21haW49IitnKSxyPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gcUEoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gS0EoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uICQoQSx0KXtyZXR1cm4gQSYmIXFBKHQpP0tBKEEsdCk6dH12YXIgVXQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLGU7ZnVuY3Rpb24gZyhyKXtsZXQgbz1yO3JldHVybiB0JiYoSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLG89SS5ocmVmKSxJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbykse2hyZWY6SS5ocmVmLHByb3RvY29sOkkucHJvdG9jb2w/SS5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6SS5ob3N0LHNlYXJjaDpJLnNlYXJjaD9JLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDpJLmhhc2g/SS5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTpJLmhvc3RuYW1lLHBvcnQ6SS5wb3J0LHBhdGhuYW1lOkkucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP0kucGF0aG5hbWU6Ii8iK0kucGF0aG5hbWV9fXJldHVybiBlPWcod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG8pe2xldCBuPUMuaXNTdHJpbmcobyk/ZyhvKTpvO3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiBPQShBKXtsZXQgdD0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gdCYmdFsxXXx8IiJ9ZnVuY3Rpb24gc2UoQSx0KXtBPUF8fDEwO2xldCBJPW5ldyBBcnJheShBKSxlPW5ldyBBcnJheShBKSxnPTAscj0wLG87cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjFlMyxmdW5jdGlvbihhKXtsZXQgUT1EYXRlLm5vdygpLEI9ZVtyXTtvfHwobz1RKSxJW2ddPWEsZVtnXT1RO2xldCBpPXIsZj0wO2Zvcig7aSE9PWc7KWYrPUlbaSsrXSxpPWklQTtpZihnPShnKzEpJUEsZz09PXImJihyPShyKzEpJUEpLFEtbzx0KXJldHVybjtsZXQgcz1CJiZRLUI7cmV0dXJuIHM/TWF0aC5yb3VuZChmKjFlMy9zKTp2b2lkIDB9fXZhciBHdD1zZTtmdW5jdGlvbiBrdChBLHQpe2xldCBJPTAsZT1HdCg1MCwyNTApO3JldHVybiBnPT57bGV0IHI9Zy5sb2FkZWQsbz1nLmxlbmd0aENvbXB1dGFibGU/Zy50b3RhbDp2b2lkIDAsbj1yLUksYT1lKG4pLFE9cjw9bztJPXI7bGV0IEI9e2xvYWRlZDpyLHRvdGFsOm8scHJvZ3Jlc3M6bz9yL286dm9pZCAwLGJ5dGVzOm4scmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJm8mJlE/KG8tcikvYTp2b2lkIDAsZXZlbnQ6Z307Qlt0PyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEoQil9fXZhciBRZT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLEx0PVFlJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSSxlKXtsZXQgZz1BLmRhdGEscj1tLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm8sd2l0aFhTUkZUb2tlbjpufT1BLGE7ZnVuY3Rpb24gUSgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQjtpZihDLmlzRm9ybURhdGEoZykpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilyLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChCPXIuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4udV09Qj9CLnNwbGl0KCI7IikubWFwKHk9PnkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107ci5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLnVdLmpvaW4oIjsgIikpfX1sZXQgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgYz1BLmF1dGgudXNlcm5hbWV8fCIiLHU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShjKyI6Iit1KSl9bGV0IGY9JChBLmJhc2VVUkwsQS51cmwpO2kub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoZixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxpLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIHMoKXtpZighaSlyZXR1cm47bGV0IGM9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gaSYmaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkseT17ZGF0YTohb3x8bz09PSJ0ZXh0Inx8bz09PSJqc29uIj9pLnJlc3BvbnNlVGV4dDppLnJlc3BvbnNlLHN0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDppfTtNQShmdW5jdGlvbihOKXtJKE4pLFEoKX0sZnVuY3Rpb24oTil7ZShOKSxRKCl9LHkpLGk9bnVsbH1pZigib25sb2FkZW5kImluIGk/aS5vbmxvYWRlbmQ9czppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFpfHxpLnJlYWR5U3RhdGUhPT00fHxpLnN0YXR1cz09PTAmJiEoaS5yZXNwb25zZVVSTCYmaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocyl9LGkub25hYm9ydD1mdW5jdGlvbigpe2kmJihlKG5ldyBsKCJSZXF1ZXN0IGFib3J0ZWQiLGwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbCl9LGkub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IGwoIk5ldHdvcmsgRXJyb3IiLGwuRVJSX05FVFdPUkssQSxpKSksaT1udWxsfSxpLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIix5PUEudHJhbnNpdGlvbmFsfHxhQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksZShuZXcgbCh1LHkuY2xhcmlmeVRpbWVvdXRFcnJvcj9sLkVUSU1FRE9VVDpsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobiYmQy5pc0Z1bmN0aW9uKG4pJiYobj1uKEEpKSxufHxuIT09ITEmJlV0KGYpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmTnQucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfWc9PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gaSYmQy5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24odSx5KXtpLnNldFJlcXVlc3RIZWFkZXIoeSx1KX0pLEMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoaS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksbyYmbyE9PSJqc29uIiYmKGkucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS51cGxvYWQmJmkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYT1jPT57aSYmKGUoIWN8fGMudHlwZT9uZXcgSChudWxsLEEsaSk6YyksaS5hYm9ydCgpLGk9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9hKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IEU9T0EoZik7aWYoRSYmdy5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtlKG5ldyBsKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGwuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59aS5zZW5kKGd8fG51bGwpfSl9O3ZhciBUQT17aHR0cDpRQSx4aHI6THR9O0MuZm9yRWFjaChUQSwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBKdD1BPT5gLSAke0F9YCxFZT1BPT5DLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbEE9e2dldEFkYXB0ZXI6QT0+e0E9Qy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxJLGUsZz17fTtmb3IobGV0IHI9MDtyPHQ7cisrKXtJPUFbcl07bGV0IG87aWYoZT1JLCFFZShJKSYmKGU9VEFbKG89U3RyaW5nKEkpKS50b0xvd2VyQ2FzZSgpXSxlPT09dm9pZCAwKSl0aHJvdyBuZXcgbChgVW5rbm93biBhZGFwdGVyIFwnJHtvfVwnYCk7aWYoZSlicmVhaztnW298fCIlMjMiK3JdPWV9aWYoIWUpe2xldCByPU9iamVjdC5lbnRyaWVzKGcpLm1hcCgoW24sYV0pPT5gYWRhcHRlciAke259IGArKGE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPXQ/ci5sZW5ndGg+MT9gc2luY2UgOiUwQWArci5tYXAoSnQpLmpvaW4oYCUwQWApOiIgIitKdChyWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBsKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIGV9LGFkYXB0ZXJzOlRBfTtmdW5jdGlvbiBQQShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSChudWxsLEEpfWZ1bmN0aW9uIERBKEEpe3JldHVybiBQQShBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGxBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxULmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFBBKEEpLGUuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUpLGUuaGVhZGVycz1tLmZyb20oZS5oZWFkZXJzKSxlfSxmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8KFBBKEEpLGUmJmUucmVzcG9uc2UmJihlLnJlc3BvbnNlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlLnJlc3BvbnNlKSxlLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKGUucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChlKX0pfXZhciBIdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgST17fTtmdW5jdGlvbiBlKFEsQixpKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KFEpJiZDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZS5jYWxsKHtjYXNlbGVzczppfSxRLEIpOkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlKHt9LEIpOkMuaXNBcnJheShCKT9CLnNsaWNlKCk6Qn1mdW5jdGlvbiBnKFEsQixpKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSxpKX1lbHNlIHJldHVybiBlKFEsQixpKX1mdW5jdGlvbiByKFEsQil7aWYoIUMuaXNVbmRlZmluZWQoQikpcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG8oUSxCKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSl9ZWxzZSByZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbihRLEIsaSl7aWYoaSBpbiB0KXJldHVybiBlKFEsQik7aWYoaSBpbiBBKXJldHVybiBlKHZvaWQgMCxRKX1sZXQgYT17dXJsOnIsbWV0aG9kOnIsZGF0YTpyLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpuLGhlYWRlcnM6KFEsQik9PmcoSHQoUSksSHQoQiksITApfTtyZXR1cm4gQy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24oQil7bGV0IGk9YVtCXXx8ZyxmPWkoQVtCXSx0W0JdLEIpO0MuaXNVbmRlZmluZWQoZikmJmkhPT1ufHwoSVtCXT1mKX0pLEl9dmFyIHVBPSIxLjYuOCI7dmFyIHhBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSx0KT0+e3hBW0FdPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09PUF8fCJhIisodDwxPyJuICI6IiAiKStBfX0pO3ZhciBZdD17fTt4QS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxJLGUpe2Z1bmN0aW9uIGcocixvKXtyZXR1cm4iW0F4aW9zIHYiK3VBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK3IrIlwnIitvKyhlPyIuICIrZToiIil9cmV0dXJuKHIsbyxuKT0+e2lmKHQ9PT0hMSl0aHJvdyBuZXcgbChnKG8sIiBoYXMgYmVlbiByZW1vdmVkIisoST8iIGluICIrSToiIikpLGwuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBJJiYhWXRbb10mJihZdFtvXT0hMCxjb25zb2xlLndhcm4oZyhvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitJKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLHQ/dChyLG8sbik6ITB9fTtmdW5jdGlvbiBhZShBLHQsSSl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBsKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxnPWUubGVuZ3RoO2Zvcig7Zy0tID4wOyl7bGV0IHI9ZVtnXSxvPXRbcl07aWYobyl7bGV0IG49QVtyXSxhPW49PT12b2lkIDB8fG8obixyLEEpO2lmKGEhPT0hMCl0aHJvdyBuZXcgbCgib3B0aW9uICIrcisiIG11c3QgYmUgIithLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKEkhPT0hMCl0aHJvdyBuZXcgbCgiVW5rbm93biBvcHRpb24gIityLGwuRVJSX0JBRF9PUFRJT04pfX12YXIgaEE9e2Fzc2VydE9wdGlvbnM6YWUsdmFsaWRhdG9yczp4QX07dmFyIFk9aEEudmFsaWRhdG9ycyx4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdHM9dCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgTEEscmVzcG9uc2U6bmV3IExBfX1hc3luYyByZXF1ZXN0KHQsSSl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KHQsSSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgZztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShnPXt9KTpnPW5ldyBFcnJvcjtsZXQgcj1nLnN0YWNrP2cuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7ZS5zdGFjaz9yJiYhU3RyaW5nKGUuc3RhY2spLmVuZHNXaXRoKHIucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihlLnN0YWNrKz1gJTBBYCtyKTplLnN0YWNrPXJ9dGhyb3cgZX19X3JlcXVlc3QodCxJKXt0eXBlb2YgdD09InN0cmluZyI/KEk9SXx8e30sSS51cmw9dCk6ST10fHx7fSxJPWsodGhpcy5kZWZhdWx0cyxJKTtsZXR7dHJhbnNpdGlvbmFsOmUscGFyYW1zU2VyaWFsaXplcjpnLGhlYWRlcnM6cn09STtlIT09dm9pZCAwJiZoQS5hc3NlcnRPcHRpb25zKGUse3NpbGVudEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbil9LCExKSxnIT1udWxsJiYoQy5pc0Z1bmN0aW9uKGcpP0kucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOmd9OmhBLmFzc2VydE9wdGlvbnMoZyx7ZW5jb2RlOlkuZnVuY3Rpb24sc2VyaWFsaXplOlkuZnVuY3Rpb259LCEwKSksSS5tZXRob2Q9KEkubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89ciYmQy5tZXJnZShyLmNvbW1vbixyW0kubWV0aG9kXSk7ciYmQy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgcltFXX0pLEkuaGVhZGVycz1tLmNvbmNhdChvLHIpO2xldCBuPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3R5cGVvZiBjLnJ1bldoZW49PSJmdW5jdGlvbiImJmMucnVuV2hlbihJKT09PSExfHwoYT1hJiZjLnN5bmNocm9ub3VzLG4udW5zaGlmdChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKSl9KTtsZXQgUT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGMpe1EucHVzaChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKX0pO2xldCBCLGk9MCxmO2lmKCFhKXtsZXQgRT1bREEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxuKSxFLnB1c2guYXBwbHkoRSxRKSxmPUUubGVuZ3RoLEI9UHJvbWlzZS5yZXNvbHZlKEkpO2k8ZjspQj1CLnRoZW4oRVtpKytdLEVbaSsrXSk7cmV0dXJuIEJ9Zj1uLmxlbmd0aDtsZXQgcz1JO2ZvcihpPTA7aTxmOyl7bGV0IEU9bltpKytdLGM9bltpKytdO3RyeXtzPUUocyl9Y2F0Y2godSl7Yy5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXtCPURBLmNhbGwodGhpcyxzKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKGk9MCxmPVEubGVuZ3RoO2k8ZjspQj1CLnRoZW4oUVtpKytdLFFbaSsrXSk7cmV0dXJuIEJ9Z2V0VXJpKHQpe3Q9ayh0aGlzLmRlZmF1bHRzLHQpO2xldCBJPSQodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gWChJLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe3gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKEksZSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKGV8fHt9LHttZXRob2Q6dCx1cmw6SSxkYXRhOihlfHx7fSkuZGF0YX0pKX19KTtDLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBJKGUpe3JldHVybiBmdW5jdGlvbihyLG8sbil7cmV0dXJuIHRoaXMucmVxdWVzdChrKG58fHt9LHttZXRob2Q6dCxoZWFkZXJzOmU/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTpvfSkpfX14LnByb3RvdHlwZVt0XT1JKCkseC5wcm90b3R5cGVbdCsiRm9ybSJdPUkoITApfSk7dmFyIEFBPXg7dmFyIGpBPWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBJO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXtJPXJ9KTtsZXQgZT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGc9PntpZighZS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1lLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOyllLl9saXN0ZW5lcnNbcl0oZyk7ZS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1nPT57bGV0IHIsbz1uZXcgUHJvbWlzZShuPT57ZS5zdWJzY3JpYmUobikscj1ufSkudGhlbihnKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKHIpfSxvfSx0KGZ1bmN0aW9uKHIsbyxuKXtlLnJlYXNvbnx8KGUucmVhc29uPW5ldyBIKHIsbyxuKSxJKGUucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IEk9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7SSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEksMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihnKXt0PWd9KSxjYW5jZWw6dH19fSxidD1qQTtmdW5jdGlvbiBXQShBKXtyZXR1cm4gZnVuY3Rpb24oSSl7cmV0dXJuIEEuYXBwbHkobnVsbCxJKX19ZnVuY3Rpb24gWkEoQSl7cmV0dXJuIEMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFZBPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhWQSkuZm9yRWFjaCgoW0EsdF0pPT57VkFbdF09QX0pO3ZhciBNdD1WQTtmdW5jdGlvbiBxdChBKXtsZXQgdD1uZXcgQUEoQSksST1XKEFBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBDLmV4dGVuZChJLEFBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksQy5leHRlbmQoSSx0LG51bGwse2FsbE93bktleXM6ITB9KSxJLmNyZWF0ZT1mdW5jdGlvbihnKXtyZXR1cm4gcXQoayhBLGcpKX0sSX12YXIgaD1xdChUKTtoLkF4aW9zPUFBO2guQ2FuY2VsZWRFcnJvcj1IO2guQ2FuY2VsVG9rZW49YnQ7aC5pc0NhbmNlbD12O2guVkVSU0lPTj11QTtoLnRvRm9ybURhdGE9SjtoLkF4aW9zRXJyb3I9bDtoLkNhbmNlbD1oLkNhbmNlbGVkRXJyb3I7aC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtoLnNwcmVhZD1XQTtoLmlzQXhpb3NFcnJvcj1aQTtoLm1lcmdlQ29uZmlnPWs7aC5BeGlvc0hlYWRlcnM9bTtoLmZvcm1Ub0pTT049QT0+Y0EoQy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtoLmdldEFkYXB0ZXI9bEEuZ2V0QWRhcHRlcjtoLkh0dHBTdGF0dXNDb2RlPU10O2guZGVmYXVsdD1oO3ZhciBkQT1oO3ZhcntBeGlvczppbyxBeGlvc0Vycm9yOkNvLENhbmNlbGVkRXJyb3I6Qm8saXNDYW5jZWw6bm8sQ2FuY2VsVG9rZW46c28sVkVSU0lPTjpRbyxhbGw6RW8sQ2FuY2VsOmFvLGlzQXhpb3NFcnJvcjpjbyxzcHJlYWQ6Zm8sdG9Gb3JtRGF0YTpsbyxBeGlvc0hlYWRlcnM6RG8sSHR0cFN0YXR1c0NvZGU6dW8sZm9ybVRvSlNPTjpobyxnZXRBZGFwdGVyOnlvLG1lcmdlQ29uZmlnOndvfT1kQTt2YXIgdEEsTCx6QSxYQT17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe3pBPW5ldyBVaW50OEFycmF5KEwuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSx5QT1jbGFzc3tpbml0KCl7cmV0dXJuIHRBfHwodHlwZW9mIGZldGNoPCJ1Ij90QT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK0t0KS50aGVuKHQ9PnQuYXJyYXlCdWZmZXIoKSkudGhlbih0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0LFhBKSkudGhlbih0aGlzLl9pbml0KTp0QT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShLdCwiYmFzZTY0IiksWEEpLnRoZW4odGhpcy5faW5pdCksdEEpfV9pbml0KHQpe0w9dC5pbnN0YW5jZSxYQS5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUodCxJPTApe2lmKCFMKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBlPXQuYnl0ZUxlbmd0aCxnPUwuZXhwb3J0cy5tYWxsb2MoZSk7ekEuc2V0KHQsZyksST1JfHxOdW1iZXIoTC5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUoZyxlKSk7bGV0IHI9TC5leHBvcnRzLm1hbGxvYyhJKSxvPUwuZXhwb3J0cy5aU1REX2RlY29tcHJlc3MocixJLGcsZSksbj16QS5zbGljZShyLHIrbyk7cmV0dXJuIEwuZXhwb3J0cy5mcmVlKGcpLEwuZXhwb3J0cy5mcmVlKHIpLG59fSxLdD0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBPdD1uZXcgeUEsVHQ9ITE7YXN5bmMgZnVuY3Rpb24gY2UoQSx0LEkpe2xldCBlPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP2U9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP2U9QTplPWAke3R9LyR7QX1gLGUuZW5kc1dpdGgoIi5qcyIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTMpKSxlLmVuZHNXaXRoKCIud2FzbSIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTUpKTtsZXQgZz1gJHtlfS53YXNtYCxyPWF3YWl0IGRBLmdldChgJHtnfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6SX0pO1R0fHwoYXdhaXQgT3QuaW5pdCgpLFR0PSEwKTtsZXQgbj1PdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7ZX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIFB0PWNlO3ZhciB3QT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGZlKEEsdCxJKXtsZXQgZT1BLGc9QSxyPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKGU9bmV3IFVSTChBLmhyZWYpLGc9ZS5ocmVmKSx3QS5oYXMoZyk/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLFB0KGUsdCxJKSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIHh0PWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9dWU7ZnVuY3Rpb24gaGUoQSx0KXtsZXQgST1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e0k9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDg6e0k9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFMuVUludDE2OntJPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFMuSW50MTY6e0k9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7ST1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDMyOntJPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ0ludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQzMjp7ST1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDY0OntJPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ST1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ST1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIEl9dmFyIEc9aGU7dmFyIFp0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGp0PW5ldyBUZXh0RW5jb2RlcixXdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSx0KXtsZXQgST17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3Blbih0LEkuZmxhZ3MpLHI9QS5mc19zdGF0KHQpLnNpemUsbz1udWxsO1p0P289bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOm89bmV3IEFycmF5QnVmZmVyKHIpO2xldCBuPW5ldyBVaW50OEFycmF5KG8pO3JldHVybiBBLmZzX3JlYWQoZSxuLDAsciwwKSxBLmZzX2Nsb3NlKGUpLG59ZnVuY3Rpb24gVnQoQSx0LEkpe2xldCBlPW51bGw7WnQ/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoSSk6ZT1uZXcgQXJyYXlCdWZmZXIoSSk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxJKTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiBkKEEsdCxJLGUpe2xldCBnPTA7cmV0dXJuIHQhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGUsdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gTShBLHQsSSl7bGV0IGU9SlNPTi5zdHJpbmdpZnkodCksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gcChBLHQsSSxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLG89VnQoQSxnLHIpO3JldHVybiBHKGUsby5idWZmZXIpfWZ1bmN0aW9uIG1BKEEsdCl7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksZT1BLlVURjhUb1N0cmluZyhJKTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLHQsSSxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxCKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IGk9anQuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IGk9anQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IGk9US5kYXRhLmRhdGEsZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IGk9US5kYXRhLGY9ZChBLGkuZGF0YSxCLDApLHM9ZChBLGkuZGlyZWN0aW9uLEIsMSksRT10eXBlb2YgaS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShpLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOmkuaW1hZ2VUeXBlLG5hbWU6aS5uYW1lLG9yaWdpbjppLm9yaWdpbixzcGFjaW5nOmkuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsc2l6ZTppLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtNKEEsYyxCKTticmVha31jYXNlIEQuTWVzaDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5jZWxscyxCLDEpLEU9ZChBLGkucG9pbnREYXRhLEIsMiksYz1kKEEsaS5jZWxsRGF0YSxCLDMpLHU9e21lc2hUeXBlOmkubWVzaFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczppLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsY2VsbEJ1ZmZlclNpemU6aS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsdSxCKTticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkucG9pbnREYXRhLEIsMSksRT17cG9pbnRTZXRUeXBlOmkucG9pbnRTZXRUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YH07TShBLEUsQik7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnZlcnRpY2VzLEIsMSksRT1kKEEsaS5saW5lcyxCLDIpLGM9ZChBLGkucG9seWdvbnMsQiwzKSx1PWQoQSxpLnRyaWFuZ2xlU3RyaXBzLEIsNCkseT1kKEEsaS5wb2ludERhdGEsQiw1KSxSPWQoQSxpLnBvaW50RGF0YSxCLDYpLE49e3BvbHlEYXRhVHlwZTppLnBvbHlEYXRhVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6aS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsbGluZXNCdWZmZXJTaXplOmkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTppLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6aS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07TShBLE4sQik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgbz1BLmdldE1vZHVsZVN0ZG91dCgpLG49QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiBJIT1udWxsJiZJLmxlbmd0aD4wJiZyPT09MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7bGV0IGk9bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9e2RhdGE6V3QuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPUpTT04ucGFyc2UoV3QuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pO2k9e2RhdGE6VnQoQSxzLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgcz1tQShBLEIpO3MuZGF0YT1wKEEsQiwwLHMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLHMuZGlyZWN0aW9uPXAoQSxCLDEsai5GbG9hdDY0KSxzLm1ldGFkYXRhPW5ldyBNYXAocy5tZXRhZGF0YSksaT1zO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxzPjA/cy5jZWxscz1wKEEsQiwxLHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOnMuY2VsbHM9RyhzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMixzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsMyxzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwxLHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxqLkZsb2F0MzIpOnMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXkscy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9zLnZlcnRpY2VzPXAoQSxCLDEsUy5VSW50MzIpOnMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LHMubGluZXNCdWZmZXJTaXplPjA/cy5saW5lcz1wKEEsQiwyLFMuVUludDMyKTpzLmxpbmVzPW5ldyBVaW50MzJBcnJheSxzLnBvbHlnb25zQnVmZmVyU2l6ZT4wP3MucG9seWdvbnM9cChBLEIsMyxTLlVJbnQzMik6cy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXkscy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9zLnRyaWFuZ2xlU3RyaXBzPXAoQSxCLDQsUy5VSW50MzIpOnMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDUscy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsNixzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOlEudHlwZSxkYXRhOml9O2EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpyLHN0ZG91dDpvLHN0ZGVycjpuLG91dHB1dHM6YX19dmFyIFh0PXllO3ZhciB3ZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gbWUoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBJPVtdO2ZvcihsZXQgZT0wO2U8QS5sZW5ndGg7ZSsrKXtsZXQgZz1wZShBW2VdLHQpO2chPT1udWxsJiZJLnB1c2goZyl9cmV0dXJuIEl9ZnVuY3Rpb24gcGUoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBJPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP0k9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoST1BKSx3ZSYmSSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9JOkkuc2xpY2UoMCl9dmFyIHp0PW1lO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBfdD1TZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgdnQ9RmU7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyICR0PVJlO2FzeW5jIGZ1bmN0aW9uIE5lKEEsdCxJLGUpe2xldCBnPVh0KEEsdCxJLGUpLHI9W107cmV0dXJuIGcub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8udHlwZT09PUQuQmluYXJ5U3RyZWFtfHxvLnR5cGU9PT1ELkJpbmFyeUZpbGUpe2xldCBuPW8uZGF0YTtyLnB1c2gobil9ZWxzZSBpZihvLnR5cGU9PT1ELkltYWdlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLl90KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuTWVzaCl7bGV0IG49by5kYXRhO3IucHVzaCguLi52dChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELlBvbHlEYXRhKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLiR0KG4pKX19KSxGQShnLHp0KHIsITApKX12YXIgQUk9TmU7dmFyIFVlPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsSSxlLGcscil7bGV0IG89YXdhaXQgeHQoQSx0LHIpO3JldHVybiBhd2FpdCBBSShvLEksZSxnKX19O2lBKFVlKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO2RyKHlyKTtleHBvcnR7WUEgYXMgYmlvUmFkUmVhZEltYWdlLHFBIGFzIGJpb1JhZFdyaXRlSW1hZ2UsVUEgYXMgYm1wUmVhZEltYWdlLE5BIGFzIGJtcFdyaXRlSW1hZ2UsWSBhcyBleHRlbnNpb25Ub0ltYWdlSW8scnQgYXMgZmRmUmVhZEltYWdlLGZhIGFzIGZkZldyaXRlSW1hZ2UsJEEgYXMgZ2RjbVJlYWRJbWFnZSxldCBhcyBnZGNtV3JpdGVJbWFnZSxfQSBhcyBnZTRSZWFkSW1hZ2UsVkEgYXMgZ2U0V3JpdGVJbWFnZSxaQSBhcyBnZTVSZWFkSW1hZ2UsWEEgYXMgZ2U1V3JpdGVJbWFnZSx2QSBhcyBnZUFkd1JlYWRJbWFnZSx6QSBhcyBnZUFkd1dyaXRlSW1hZ2UseSBhcyBnZXREZWZhdWx0V2ViV29ya2VyLGQgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsRSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLEtBIGFzIGdpcGxSZWFkSW1hZ2UsakEgYXMgZ2lwbFdyaXRlSW1hZ2UsU0EgYXMgaGRmNVJlYWRJbWFnZSxPQSBhcyBoZGY1V3JpdGVJbWFnZSxSQSBhcyBqcGVnUmVhZEltYWdlLGtBIGFzIGpwZWdXcml0ZUltYWdlLEpBIGFzIGxzbVJlYWRJbWFnZSxMQSBhcyBsc21Xcml0ZUltYWdlLENBIGFzIG1ldGFSZWFkSW1hZ2UsRUEgYXMgbWV0YVdyaXRlSW1hZ2UsTUEgYXMgbWdoUmVhZEltYWdlLEhBIGFzIG1naFdyaXRlSW1hZ2UsUEEgYXMgbWluY1JlYWRJbWFnZSx4QSBhcyBtaW5jV3JpdGVJbWFnZSxUQSBhcyBtcmNSZWFkSW1hZ2UsR0EgYXMgbXJjV3JpdGVJbWFnZSxoQSBhcyBuaWZ0aVJlYWRJbWFnZSx3QSBhcyBuaWZ0aVdyaXRlSW1hZ2UsYkEgYXMgbnJyZFJlYWRJbWFnZSxEQSBhcyBucnJkV3JpdGVJbWFnZSxCQSBhcyBwbmdSZWFkSW1hZ2UsZEEgYXMgcG5nV3JpdGVJbWFnZSxzdCBhcyByZWFkSW1hZ2UsbGEgYXMgcmVhZEltYWdlRmlsZVNlcmllcyxtbyBhcyByZWFkSW1hZ2VIdHRwLEF0IGFzIHNjYW5jb1JlYWRJbWFnZSx0dCBhcyBzY2FuY29Xcml0ZUltYWdlLF9JIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsZHIgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsSEkgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCx5QSBhcyB0aWZmUmVhZEltYWdlLFFBIGFzIHRpZmZXcml0ZUltYWdlLFdBIGFzIHZ0a1JlYWRJbWFnZSxGQSBhcyB2dGtXcml0ZUltYWdlLGl0IGFzIHdhc21SZWFkSW1hZ2Usb3QgYXMgd2FzbVdyaXRlSW1hZ2UsYXQgYXMgd2FzbVpzdGRSZWFkSW1hZ2UsbnQgYXMgd2FzbVpzdGRXcml0ZUltYWdlLG1hIGFzIHdyaXRlSW1hZ2V9OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" +default_js_module = """data:text/javascript;base64,dmFyIGhyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgd3I9KGUsQSk9Pntmb3IodmFyIHQgaW4gQSlocihlLHQse2dldDpBW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIFJyPW5ldyBNYXAoW1siYm1wIiwiYm1wIl0sWyJkY20iLCJnZGNtIl0sWyJnaXBsIiwiZ2lwbCJdLFsiZ2lwbC5neiIsImdpcGwiXSxbImhkZjUiLCJoZGY1Il0sWyJqcGciLCJqcGVnIl0sWyJqcGVnIiwianBlZyJdLFsiaXdpIiwid2FzbSJdLFsiaXdpLmNib3IiLCJ3YXNtIl0sWyJpd2kuY2Jvci56c3QiLCJ3YXNtWnN0ZCJdLFsibHNtIiwibHNtIl0sWyJtbmMiLCJtbmMiXSxbIm1uYy5neiIsIm1uYyJdLFsibW5jMiIsIm1uYyJdLFsibWdoIiwibWdoIl0sWyJtZ3oiLCJtZ2giXSxbIm1naC5neiIsIm1naCJdLFsibWhhIiwibWV0YSJdLFsibWhkIiwibWV0YSJdLFsibXJjIiwibXJjIl0sWyJuaWEiLCJuaWZ0aSJdLFsibmlpIiwibmlmdGkiXSxbIm5paS5neiIsIm5pZnRpIl0sWyJoZHIiLCJuaWZ0aSJdLFsibnJyZCIsIm5ycmQiXSxbIm5oZHIiLCJucnJkIl0sWyJwbmciLCJwbmciXSxbInBpYyIsImJpb1JhZCJdLFsidGlmIiwidGlmZiJdLFsidGlmZiIsInRpZmYiXSxbInZ0ayIsInZ0ayJdLFsiaXNxIiwic2NhbmNvIl0sWyJhaW0iLCJzY2FuY28iXSxbImZkZiIsImZkZiJdXSksWT1Scjt2YXIga3I9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxoPWtyO3ZhciBicj17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0sRD1icjtmdW5jdGlvbiBEcihlLEEpe2xldCB0PW51bGw7c3dpdGNoKGUpe2Nhc2UgaC5VSW50ODp7dD1uZXcgVWludDhBcnJheShBKTticmVha31jYXNlIGguSW50ODp7dD1uZXcgSW50OEFycmF5KEEpO2JyZWFrfWNhc2UgaC5VSW50MTY6e3Q9bmV3IFVpbnQxNkFycmF5KEEpO2JyZWFrfWNhc2UgaC5JbnQxNjp7dD1uZXcgSW50MTZBcnJheShBKTticmVha31jYXNlIGguVUludDMyOnt0PW5ldyBVaW50MzJBcnJheShBKTticmVha31jYXNlIGguSW50MzI6e3Q9bmV3IEludDMyQXJyYXkoQSk7YnJlYWt9Y2FzZSBoLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnVWludDY0QXJyYXkoQSk6dD1uZXcgVWludDhBcnJheShBKTticmVha31jYXNlIGguSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnSW50NjRBcnJheShBKTp0PW5ldyBVaW50OEFycmF5KEEpO2JyZWFrfWNhc2UgRC5GbG9hdDMyOnt0PW5ldyBGbG9hdDMyQXJyYXkoQSk7YnJlYWt9Y2FzZSBELkZsb2F0NjQ6e3Q9bmV3IEZsb2F0NjRBcnJheShBKTticmVha31jYXNlIm51bGwiOnt0PW51bGw7YnJlYWt9Y2FzZSBudWxsOnt0PW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gdH12YXIgTj1Ecjt2YXIgV3I9e1Vua25vd246IlVua25vd24iLFNjYWxhcjoiU2NhbGFyIixSR0I6IlJHQiIsUkdCQToiUkdCQSIsT2Zmc2V0OiJPZmZzZXQiLFZlY3RvcjoiVmVjdG9yIixQb2ludDoiUG9pbnQiLENvdmFyaWFudFZlY3RvcjoiQ292YXJpYW50VmVjdG9yIixTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yOiJTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yIixEaWZmdXNpb25UZW5zb3IzRDoiRGlmZnVzaW9uVGVuc29yM0QiLENvbXBsZXg6IkNvbXBsZXgiLEZpeGVkQXJyYXk6IkZpeGVkQXJyYXkiLEFycmF5OiJBcnJheSIsTWF0cml4OiJNYXRyaXgiLFZhcmlhYmxlTGVuZ3RoVmVjdG9yOiJWYXJpYWJsZUxlbmd0aFZlY3RvciIsVmFyaWFibGVTaXplTWF0cml4OiJWYXJpYWJsZVNpemVNYXRyaXgifSxtZT1Xcjt2YXIgeGU9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoQT0yLHQ9aC5VSW50OCxyPW1lLlNjYWxhcixvPTEpe3RoaXMuZGltZW5zaW9uPUEsdGhpcy5jb21wb25lbnRUeXBlPXQsdGhpcy5waXhlbFR5cGU9cix0aGlzLmNvbXBvbmVudHM9b319LGd0PXhlO2Z1bmN0aW9uIEZyKGUsQSx0LHIsbyl7ZVtyK3QqQV09b312YXIgSXQ9RnI7dmFyIFRlPWNsYXNze2ltYWdlVHlwZTtuYW1lPSJJbWFnZSI7b3JpZ2luO3NwYWNpbmc7ZGlyZWN0aW9uO3NpemU7bWV0YWRhdGE7ZGF0YTtjb25zdHJ1Y3RvcihBPW5ldyBndCl7dGhpcy5pbWFnZVR5cGU9QTtsZXQgdD1BLmRpbWVuc2lvbjt0aGlzLm9yaWdpbj1uZXcgQXJyYXkodCksdGhpcy5vcmlnaW4uZmlsbCgwKSx0aGlzLnNwYWNpbmc9bmV3IEFycmF5KHQpLHRoaXMuc3BhY2luZy5maWxsKDEpLHRoaXMuZGlyZWN0aW9uPW5ldyBGbG9hdDY0QXJyYXkodCp0KSx0aGlzLmRpcmVjdGlvbi5maWxsKDApO2ZvcihsZXQgcj0wO3I8dDtyKyspSXQodGhpcy5kaXJlY3Rpb24sdCxyLHIsMSk7dGhpcy5zaXplPW5ldyBBcnJheSh0KSx0aGlzLnNpemUuZmlsbCgwKSx0aGlzLm1ldGFkYXRhPW5ldyBNYXAsdGhpcy5kYXRhPW51bGx9fSxqPVRlO2Z1bmN0aW9uIFVyKGUpe2xldCBBPW5ldyBqKGUuaW1hZ2VUeXBlKTtpZihBLm5hbWU9ZS5uYW1lLEEub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLEEuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyksQS5kaXJlY3Rpb249ZS5kaXJlY3Rpb24uc2xpY2UoKSxBLnNpemU9QXJyYXkuZnJvbShlLnNpemUpLGUuZGF0YSE9PW51bGwpe2xldCB0PWUuZGF0YS5jb25zdHJ1Y3RvcjtBLmRhdGE9bmV3IHQoZS5kYXRhLmxlbmd0aCksQS5kYXRhIT1udWxsJiZBLmRhdGEuc2V0KGUuZGF0YSwwKX1yZXR1cm4gQX12YXIgR2U9VXI7ZnVuY3Rpb24gTnIoZSl7aWYoZS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgQT1lWzBdO2lmKEEuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgaihBLmltYWdlVHlwZSk7dC5vcmlnaW49QXJyYXkuZnJvbShBLm9yaWdpbiksdC5zcGFjaW5nPUFycmF5LmZyb20oQS5zcGFjaW5nKTtsZXQgcj10LmltYWdlVHlwZS5kaW1lbnNpb247dC5kaXJlY3Rpb249QS5kaXJlY3Rpb24uc2xpY2UoKTtsZXQgbz1yLTE7dC5zaXplPUFycmF5LmZyb20oQS5zaXplKTtsZXQgaT1lLnJlZHVjZSgoYSxuKT0+YStuLnNpemVbb10sMCk7dC5zaXplW29dPWk7bGV0IHM9dC5zaXplLnJlZHVjZSgoYSxuKT0+YSpuLDEpKnQuaW1hZ2VUeXBlLmNvbXBvbmVudHMsbT1BLmRhdGEuY29uc3RydWN0b3I7dC5kYXRhPW5ldyBtKHMpO2xldCBmPXQuaW1hZ2VUeXBlLmNvbXBvbmVudHM7Zm9yKGxldCBhPTA7YTx0LnNpemUubGVuZ3RoLTE7YSsrKWYqPXQuc2l6ZVthXTtsZXQgcD0wO2lmKHQuZGF0YSE9bnVsbClmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl0LmRhdGEuc2V0KGVbYV0uZGF0YSxmKnApLHArPWVbYV0uc2l6ZVtvXTtlbHNlIHRocm93IEVycm9yKCJDb3VsZCBub3QgY3JlYXRlIHJlc3VsdCBpbWFnZSBkYXRhLiIpO3JldHVybiB0fXZhciBKZT1OcjtmdW5jdGlvbiBTcihlKXtsZXQgQT1lLnNsaWNlKChlLmxhc3RJbmRleE9mKCIuIiktMT4+PjApKzIpO2lmKEEudG9Mb3dlckNhc2UoKT09PSJneiIpe2xldCB0PWUuc2xpY2UoMCwtMykubGFzdEluZGV4T2YoIi4iKTtBPWUuc2xpY2UoKHQtMT4+PjApKzIpfWVsc2UgaWYoQS50b0xvd2VyQ2FzZSgpPT09ImNib3IiKXtsZXQgdD1lLnNsaWNlKDAsLTUpLmxhc3RJbmRleE9mKCIuIik7QT1lLnNsaWNlKCh0LTE+Pj4wKSsyKX1lbHNlIGlmKEEudG9Mb3dlckNhc2UoKT09PSJ6c3QiKXtsZXQgdD1lLnNsaWNlKDAsLTEwKS5sYXN0SW5kZXhPZigiLiIpO0E9ZS5zbGljZSgodC0xPj4+MCkrMil9ZWxzZSBpZihBLnRvTG93ZXJDYXNlKCk9PT0iemlwIil7bGV0IHQ9ZS5zbGljZSgwLC00KS5sYXN0SW5kZXhPZigiLiIpO0E9ZS5zbGljZSgodC0xPj4+MCkrMil9cmV0dXJuIEF9dmFyIHRlPVNyO2Z1bmN0aW9uIE9yKGUsQSl7bGV0IHQ9ey4uLmUuaW1hZ2VUeXBlfTtpZih0eXBlb2YgQTwidSImJnR5cGVvZiBBLnBpeGVsVHlwZTwidSImJih0LnBpeGVsVHlwZT1BLnBpeGVsVHlwZSxBLnBpeGVsVHlwZT09PW1lLlNjYWxhciYmdC5jb21wb25lbnRzIT09MSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FzdCBtdWx0aS1jb21wb25lbnQgaW1hZ2UgdG8gYSBzY2FsYXIgaW1hZ2UiKTt0eXBlb2YgQTwidSImJnR5cGVvZiBBLmNvbXBvbmVudFR5cGU8InUiJiZBLmNvbXBvbmVudFR5cGUhPT1lLmltYWdlVHlwZS5jb21wb25lbnRUeXBlJiYodC5jb21wb25lbnRUeXBlPUEuY29tcG9uZW50VHlwZSk7bGV0IHI9bmV3IGoodCk7aWYoci5uYW1lPWUubmFtZSxyLm9yaWdpbj1BcnJheS5mcm9tKGUub3JpZ2luKSxyLnNwYWNpbmc9QXJyYXkuZnJvbShlLnNwYWNpbmcpLHIuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCksci5zaXplPUFycmF5LmZyb20oZS5zaXplKSxyLm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGUubWV0YWRhdGEpKSkpLGUuZGF0YSE9PW51bGwpaWYodHlwZW9mIEE8InUiJiZ0eXBlb2YgQS5jb21wb25lbnRUeXBlPCJ1IiYmQS5jb21wb25lbnRUeXBlIT09ZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBoLlVJbnQ4OmNhc2UgaC5JbnQ4OmNhc2UgaC5VSW50MTY6Y2FzZSBoLkludDE2OmNhc2UgaC5VSW50MzI6Y2FzZSBoLkludDMyOmNhc2UgRC5GbG9hdDMyOmNhc2UgRC5GbG9hdDY0OnN3aXRjaChyLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIGguVUludDg6ci5kYXRhPW5ldyBVaW50OEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguVUludDE2OnIuZGF0YT1uZXcgVWludDE2QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguSW50MTY6ci5kYXRhPW5ldyBJbnQxNkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDMyOnIuZGF0YT1uZXcgSW50MzJBcnJheShlLmRhdGEpO2JyZWFrO2Nhc2UgRC5GbG9hdDMyOnIuZGF0YT1uZXcgRmxvYXQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBELkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguVUludDY0OnIuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWs7Y2FzZSBoLkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEubGVuZ3RoKTtmb3IobGV0IG89MDtvPHIuZGF0YS5sZW5ndGg7bysrKXIuZGF0YVtvXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWt9YnJlYWs7Y2FzZSBoLlVJbnQ2NDpjYXNlIGguSW50NjQ6c3dpdGNoKHIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgaC5VSW50ODpyLmRhdGE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQxNjpyLmRhdGE9bmV3IFVpbnQxNkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2UgaC5JbnQxNjpyLmRhdGE9bmV3IEludDE2QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2UgaC5JbnQzMjpyLmRhdGE9bmV3IEludDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBELkZsb2F0MzI6ci5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBELkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQ2NDpyLmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG89ZS5kYXRhLmNvbnN0cnVjdG9yO3IuZGF0YT1uZXcgbyhlLmRhdGEubGVuZ3RoKSxyLmRhdGEhPW51bGwmJnIuZGF0YS5zZXQoZS5kYXRhLDApfXJldHVybiByfXZhciBKPU9yO3ZhciBMZT1jbGFzc3tmY247d29ya2VyUXVldWU7cnVuSW5mbztjb25zdHJ1Y3RvcihBLHQpe3RoaXMuZmNuPXQsdGhpcy53b3JrZXJRdWV1ZT1uZXcgQXJyYXkoQSksdGhpcy53b3JrZXJRdWV1ZS5maWxsKG51bGwpLHRoaXMucnVuSW5mbz1bXX1ydW5UYXNrcyhBLHQ9bnVsbCl7bGV0IHI9e3Rhc2tRdWV1ZTpbXSxyZXN1bHRzOltdLGFkZGluZ1Rhc2tzOiExLHBvc3Rwb25lZDohMSxydW5uaW5nV29ya2VyczowLGluZGV4OjAsY29tcGxldGVkVGFza3M6MCxwcm9ncmVzc0NhbGxiYWNrOnQsY2FuY2VsZWQ6ITF9O3JldHVybiB0aGlzLnJ1bkluZm8ucHVzaChyKSxyLmluZGV4PXRoaXMucnVuSW5mby5sZW5ndGgtMSx7cHJvbWlzZTpuZXcgUHJvbWlzZSgobyxpKT0+e3IucmVzb2x2ZT1vLHIucmVqZWN0PWksci5yZXN1bHRzPW5ldyBBcnJheShBLmxlbmd0aCksci5jb21wbGV0ZWRUYXNrcz0wLHIuYWRkaW5nVGFza3M9ITAsQS5mb3JFYWNoKChzLG0pPT57dGhpcy5hZGRUYXNrKHIuaW5kZXgsbSxzKX0pLHIuYWRkaW5nVGFza3M9ITF9KSxydW5JZDpyLmluZGV4fX10ZXJtaW5hdGVXb3JrZXJzKCl7Zm9yKGxldCBBPTA7QTx0aGlzLndvcmtlclF1ZXVlLmxlbmd0aDtBKyspe2xldCB0PXRoaXMud29ya2VyUXVldWVbQV07dD8udGVybWluYXRlKCksdGhpcy53b3JrZXJRdWV1ZVtBXT1udWxsfX1jYW5jZWwoQSl7bGV0IHQ9dGhpcy5ydW5JbmZvW0FdO3QhPW51bGwmJih0LmNhbmNlbGVkPSEwKX1hZGRUYXNrKEEsdCxyKXtsZXQgbz10aGlzLnJ1bkluZm9bQV07aWYobz8uY2FuY2VsZWQ9PT0hMCl7by5yZWplY3QoIlJlbWFpbmluZyB0YXNrcyBjYW5jZWxlZCIpLHRoaXMuY2xlYXJUYXNrKG8uaW5kZXgpO3JldHVybn1pZih0aGlzLndvcmtlclF1ZXVlLmxlbmd0aD4wKXtsZXQgaT10aGlzLndvcmtlclF1ZXVlLnBvcCgpO28ucnVubmluZ1dvcmtlcnMrKyxyW3IubGVuZ3RoLTFdLndlYldvcmtlcj1pLHRoaXMuZmNuKC4uLnIpLnRoZW4oKHt3ZWJXb3JrZXI6cywuLi5tfSk9PntpZih0aGlzLndvcmtlclF1ZXVlLnB1c2gocyksdGhpcy5ydW5JbmZvW0FdIT09bnVsbCl7aWYoby5ydW5uaW5nV29ya2Vycy0tLG8ucmVzdWx0c1t0XT1tLG8uY29tcGxldGVkVGFza3MrKyxvLnByb2dyZXNzQ2FsbGJhY2shPW51bGwmJm8ucHJvZ3Jlc3NDYWxsYmFjayhvLmNvbXBsZXRlZFRhc2tzLG8ucmVzdWx0cy5sZW5ndGgpLG8udGFza1F1ZXVlLmxlbmd0aD4wKXtsZXQgZj1vLnRhc2tRdWV1ZS5zaGlmdCgpO3RoaXMuYWRkVGFzayhBLGZbMF0sZlsxXSl9ZWxzZSBpZighby5hZGRpbmdUYXNrcyYmby5ydW5uaW5nV29ya2Vycz09PTApe2xldCBmPW8ucmVzdWx0cztvLnJlc29sdmUoZiksdGhpcy5jbGVhclRhc2soby5pbmRleCl9fX0pLmNhdGNoKHM9PntvLnJlamVjdChzKSx0aGlzLmNsZWFyVGFzayhvLmluZGV4KX0pfWVsc2Ugby5ydW5uaW5nV29ya2VycyE9PTB8fG8ucG9zdHBvbmVkP28udGFza1F1ZXVlLnB1c2goW3Qscl0pOihvLnBvc3Rwb25lZD0hMCxzZXRUaW1lb3V0KCgpPT57by5wb3N0cG9uZWQ9ITEsdGhpcy5hZGRUYXNrKG8uaW5kZXgsdCxyKX0sNTApKX1jbGVhclRhc2soQSl7dGhpcy5ydW5JbmZvW0FdLnJlc3VsdHM9W10sdGhpcy5ydW5JbmZvW0FdLnRhc2tRdWV1ZT1bXSx0aGlzLnJ1bkluZm9bQV0ucHJvZ3Jlc3NDYWxsYmFjaz1udWxsLHRoaXMucnVuSW5mb1tBXS5jYW5jZWxlZD1udWxsLHRoaXMucnVuSW5mb1tBXS5yZWplY3Q9KCk9Pnt9LHRoaXMucnVuSW5mb1tBXS5yZXNvbHZlPSgpPT57fX19LE1lPUxlO3ZhciBQcj17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEk9UHI7dmFyIHB0PVN5bWJvbCgiQ29tbGluay5wcm94eSIpLHhyPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHFlPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxIZT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZmU9U3ltYm9sKCJDb21saW5rLnRocm93biIpLG10PWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLFRyPXtjYW5IYW5kbGU6ZT0+bXQoZSkmJmVbcHRdLHNlcmlhbGl6ZShlKXtsZXR7cG9ydDE6QSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGZ0KGUsQSksW3QsW3RdXX0sZGVzZXJpYWxpemUoZSl7cmV0dXJuIGUuc3RhcnQoKSxLZShlKX19LEdyPXtjYW5IYW5kbGU6ZT0+bXQoZSkmJmZlIGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IEE7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9BPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06QT17aXNFcnJvcjohMSx2YWx1ZTplfSxbQSxbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSx1dD1uZXcgTWFwKFtbInByb3h5IixUcl0sWyJ0aHJvdyIsR3JdXSk7ZnVuY3Rpb24gSnIoZSxBKXtmb3IobGV0IHQgb2YgZSlpZihBPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KEEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGZ0KGUsQT1nbG9iYWxUaGlzLHQ9WyIqIl0pe0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihvKXtpZighb3x8IW8uZGF0YSlyZXR1cm47aWYoIUpyKHQsby5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke28ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOmksdHlwZTpzLHBhdGg6bX09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sby5kYXRhKSxmPShvLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKHEpLHA7dHJ5e2xldCBhPW0uc2xpY2UoMCwtMSkucmVkdWNlKCh1LGcpPT51W2ddLGUpLG49bS5yZWR1Y2UoKHUsZyk9PnVbZ10sZSk7c3dpdGNoKHMpe2Nhc2UiR0VUIjpwPW47YnJlYWs7Y2FzZSJTRVQiOmFbbS5zbGljZSgtMSlbMF1dPXEoby5kYXRhLnZhbHVlKSxwPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOnA9bi5hcHBseShhLGYpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IHU9bmV3IG4oLi4uZik7cD1xcih1KX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOnUscG9ydDI6Z309bmV3IE1lc3NhZ2VDaGFubmVsO2Z0KGUsZykscD1qZSh1LFt1XSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpwPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goYSl7cD17dmFsdWU6YSxbZmVdOjB9fVByb21pc2UucmVzb2x2ZShwKS5jYXRjaChhPT4oe3ZhbHVlOmEsW2ZlXTowfSkpLnRoZW4oYT0+e2xldFtuLHVdPWRlKGEpO0EucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4pLHtpZDppfSksdSkscz09PSJSRUxFQVNFIiYmKEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksY3QoQSksSGUgaW4gZSYmdHlwZW9mIGVbSGVdPT0iZnVuY3Rpb24iJiZlW0hlXSgpKX0pLmNhdGNoKGE9PntsZXRbbix1XT1kZSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2ZlXTowfSk7QS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbikse2lkOml9KSx1KX0pfSksQS5zdGFydCYmQS5zdGFydCgpfWZ1bmN0aW9uIExyKGUpe3JldHVybiBlLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIGN0KGUpe0xyKGUpJiZlLmNsb3NlKCl9ZnVuY3Rpb24gS2UoZSxBKXtyZXR1cm4gWWUoZSxbXSxBKX1mdW5jdGlvbiB1ZShlKXtpZihlKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gQnQoZSl7cmV0dXJuIHYoZSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57Y3QoZSl9KX12YXIgY2U9bmV3IFdlYWtNYXAsQmU9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShlPT57bGV0IEE9KGNlLmdldChlKXx8MCktMTtjZS5zZXQoZSxBKSxBPT09MCYmQnQoZSl9KTtmdW5jdGlvbiBNcihlLEEpe2xldCB0PShjZS5nZXQoQSl8fDApKzE7Y2Uuc2V0KEEsdCksQmUmJkJlLnJlZ2lzdGVyKGUsQSxlKX1mdW5jdGlvbiBIcihlKXtCZSYmQmUudW5yZWdpc3RlcihlKX1mdW5jdGlvbiBZZShlLEE9W10sdD1mdW5jdGlvbigpe30pe2xldCByPSExLG89bmV3IFByb3h5KHQse2dldChpLHMpe2lmKHVlKHIpLHM9PT1xZSlyZXR1cm4oKT0+e0hyKG8pLEJ0KGUpLHI9ITB9O2lmKHM9PT0idGhlbiIpe2lmKEEubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+b307bGV0IG09dihlLHt0eXBlOiJHRVQiLHBhdGg6QS5tYXAoZj0+Zi50b1N0cmluZygpKX0pLnRoZW4ocSk7cmV0dXJuIG0udGhlbi5iaW5kKG0pfXJldHVybiBZZShlLFsuLi5BLHNdKX0sc2V0KGkscyxtKXt1ZShyKTtsZXRbZixwXT1kZShtKTtyZXR1cm4gdihlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLkEsc10ubWFwKGE9PmEudG9TdHJpbmcoKSksdmFsdWU6Zn0scCkudGhlbihxKX0sYXBwbHkoaSxzLG0pe3VlKHIpO2xldCBmPUFbQS5sZW5ndGgtMV07aWYoZj09PXhyKXJldHVybiB2KGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4ocSk7aWYoZj09PSJiaW5kIilyZXR1cm4gWWUoZSxBLnNsaWNlKDAsLTEpKTtsZXRbcCxhXT1sdChtKTtyZXR1cm4gdihlLHt0eXBlOiJBUFBMWSIscGF0aDpBLm1hcChuPT5uLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpwfSxhKS50aGVuKHEpfSxjb25zdHJ1Y3QoaSxzKXt1ZShyKTtsZXRbbSxmXT1sdChzKTtyZXR1cm4gdihlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6QS5tYXAocD0+cC50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6bX0sZikudGhlbihxKX19KTtyZXR1cm4gTXIobyxlKSxvfWZ1bmN0aW9uIFlyKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIGx0KGUpe2xldCBBPWUubWFwKGRlKTtyZXR1cm5bQS5tYXAodD0+dFswXSksWXIoQS5tYXAodD0+dFsxXSkpXX12YXIgZHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gamUoZSxBKXtyZXR1cm4gZHQuc2V0KGUsQSksZX1mdW5jdGlvbiBxcihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbcHRdOiEwfSl9ZnVuY3Rpb24gZGUoZSl7Zm9yKGxldFtBLHRdb2YgdXQpaWYodC5jYW5IYW5kbGUoZSkpe2xldFtyLG9dPXQuc2VyaWFsaXplKGUpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTpBLHZhbHVlOnJ9LG9dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTplfSxkdC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBxKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHV0LmdldChlLm5hbWUpLmRlc2VyaWFsaXplKGUudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gZS52YWx1ZX19ZnVuY3Rpb24gdihlLEEsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbz1LcigpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaShzKXshcy5kYXRhfHwhcy5kYXRhLmlkfHxzLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpKSxyKHMuZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sQSksdCl9KX1mdW5jdGlvbiBLcigpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gcmUoZSxBKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseShBLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpqcn09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6X2V9PU9iamVjdCxFZT0oZT0+QT0+e2xldCB0PWpyLmNhbGwoQSk7cmV0dXJuIGVbdF18fChlW3RdPXQuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSx4PWU9PihlPWUudG9Mb3dlckNhc2UoKSxBPT5FZShBKT09PWUpLHllPWU9PkE9PnR5cGVvZiBBPT09ZSx7aXNBcnJheTp6fT1BcnJheSxpZT15ZSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gdnIoZSl7cmV0dXJuIGUhPT1udWxsJiYhaWUoZSkmJmUuY29uc3RydWN0b3IhPT1udWxsJiYhaWUoZS5jb25zdHJ1Y3RvcikmJlMoZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIFF0PXgoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24genIoZSl7bGV0IEE7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9BPUFycmF5QnVmZmVyLmlzVmlldyhlKTpBPWUmJmUuYnVmZmVyJiZRdChlLmJ1ZmZlciksQX12YXIgX3I9eWUoInN0cmluZyIpLFM9eWUoImZ1bmN0aW9uIiksaHQ9eWUoIm51bWJlciIpLFFlPWU9PmUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCIsVnI9ZT0+ZT09PSEwfHxlPT09ITEsQ2U9ZT0+e2lmKEVlKGUpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IEE9X2UoZSk7cmV0dXJuKEE9PT1udWxsfHxBPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKEEpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGUpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBlKX0sWnI9eCgiRGF0ZSIpLFhyPXgoIkZpbGUiKSwkcj14KCJCbG9iIiksZWk9eCgiRmlsZUxpc3QiKSxBaT1lPT5RZShlKSYmUyhlLnBpcGUpLHRpPWU9PntsZXQgQTtyZXR1cm4gZSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmZSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxTKGUuYXBwZW5kKSYmKChBPUVlKGUpKT09PSJmb3JtZGF0YSJ8fEE9PT0ib2JqZWN0IiYmUyhlLnRvU3RyaW5nKSYmZS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxyaT14KCJVUkxTZWFyY2hQYXJhbXMiKSxpaT1lPT5lLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gb2UoZSxBLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihlPT09bnVsbHx8dHlwZW9mIGU+InUiKXJldHVybjtsZXQgcixvO2lmKHR5cGVvZiBlIT0ib2JqZWN0IiYmKGU9W2VdKSx6KGUpKWZvcihyPTAsbz1lLmxlbmd0aDtyPG87cisrKUEuY2FsbChudWxsLGVbcl0scixlKTtlbHNle2xldCBpPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSk6T2JqZWN0LmtleXMoZSkscz1pLmxlbmd0aCxtO2ZvcihyPTA7cjxzO3IrKyltPWlbcl0sQS5jYWxsKG51bGwsZVttXSxtLGUpfX1mdW5jdGlvbiB3dChlLEEpe0E9QS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKGUpLHI9dC5sZW5ndGgsbztmb3IoO3ItLSA+MDspaWYobz10W3JdLEE9PT1vLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG87cmV0dXJuIG51bGx9dmFyIFJ0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsa3Q9ZT0+IWllKGUpJiZlIT09UnQ7ZnVuY3Rpb24gemUoKXtsZXR7Y2FzZWxlc3M6ZX09a3QodGhpcykmJnRoaXN8fHt9LEE9e30sdD0ocixvKT0+e2xldCBpPWUmJnd0KEEsbyl8fG87Q2UoQVtpXSkmJkNlKHIpP0FbaV09emUoQVtpXSxyKTpDZShyKT9BW2ldPXplKHt9LHIpOnoocik/QVtpXT1yLnNsaWNlKCk6QVtpXT1yfTtmb3IobGV0IHI9MCxvPWFyZ3VtZW50cy5sZW5ndGg7cjxvO3IrKylhcmd1bWVudHNbcl0mJm9lKGFyZ3VtZW50c1tyXSx0KTtyZXR1cm4gQX12YXIgb2k9KGUsQSx0LHthbGxPd25LZXlzOnJ9PXt9KT0+KG9lKEEsKG8saSk9Pnt0JiZTKG8pP2VbaV09cmUobyx0KTplW2ldPW99LHthbGxPd25LZXlzOnJ9KSxlKSxhaT1lPT4oZS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihlPWUuc2xpY2UoMSkpLGUpLG5pPShlLEEsdCxyKT0+e2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQS5wcm90b3R5cGUsciksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3VwZXIiLHt2YWx1ZTpBLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oZS5wcm90b3R5cGUsdCl9LHNpPShlLEEsdCxyKT0+e2xldCBvLGkscyxtPXt9O2lmKEE9QXx8e30sZT09bnVsbClyZXR1cm4gQTtkb3tmb3Iobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSxpPW8ubGVuZ3RoO2ktLSA+MDspcz1vW2ldLCghcnx8cihzLGUsQSkpJiYhbVtzXSYmKEFbc109ZVtzXSxtW3NdPSEwKTtlPXQhPT0hMSYmX2UoZSl9d2hpbGUoZSYmKCF0fHx0KGUsQSkpJiZlIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIEF9LGdpPShlLEEsdCk9PntlPVN0cmluZyhlKSwodD09PXZvaWQgMHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKSx0LT1BLmxlbmd0aDtsZXQgcj1lLmluZGV4T2YoQSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0sSWk9ZT0+e2lmKCFlKXJldHVybiBudWxsO2lmKHooZSkpcmV0dXJuIGU7bGV0IEE9ZS5sZW5ndGg7aWYoIWh0KEEpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShBKTtmb3IoO0EtLSA+MDspdFtBXT1lW0FdO3JldHVybiB0fSxsaT0oZT0+QT0+ZSYmQSBpbnN0YW5jZW9mIGUpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmX2UoVWludDhBcnJheSkpLHBpPShlLEEpPT57bGV0IHI9KGUmJmVbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChlKSxvO2Zvcig7KG89ci5uZXh0KCkpJiYhby5kb25lOyl7bGV0IGk9by52YWx1ZTtBLmNhbGwoZSxpWzBdLGlbMV0pfX0sbWk9KGUsQSk9PntsZXQgdCxyPVtdO2Zvcig7KHQ9ZS5leGVjKEEpKSE9PW51bGw7KXIucHVzaCh0KTtyZXR1cm4gcn0sdWk9eCgiSFRNTEZvcm1FbGVtZW50IiksZmk9ZT0+ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxyLG8pe3JldHVybiByLnRvVXBwZXJDYXNlKCkrb30pLEV0PSgoe2hhc093blByb3BlcnR5OmV9KT0+KEEsdCk9PmUuY2FsbChBLHQpKShPYmplY3QucHJvdG90eXBlKSxjaT14KCJSZWdFeHAiKSxidD0oZSxBKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGUpLHI9e307b2UodCwobyxpKT0+e2xldCBzOyhzPUEobyxpLGUpKSE9PSExJiYocltpXT1zfHxvKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUscil9LEJpPWU9PntidChlLChBLHQpPT57aWYoUyhlKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHQpIT09LTEpcmV0dXJuITE7bGV0IHI9ZVt0XTtpZihTKHIpKXtpZihBLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIEEpe0Eud3JpdGFibGU9ITE7cmV0dXJufUEuc2V0fHwoQS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrdCsiJyIpfSl9fSl9LGRpPShlLEEpPT57bGV0IHQ9e30scj1vPT57by5mb3JFYWNoKGk9Pnt0W2ldPSEwfSl9O3JldHVybiB6KGUpP3IoZSk6cihTdHJpbmcoZSkuc3BsaXQoQSkpLHR9LENpPSgpPT57fSxFaT0oZSxBKT0+KGU9K2UsTnVtYmVyLmlzRmluaXRlKGUpP2U6QSksdmU9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix5dD0iMDEyMzQ1Njc4OSIsRHQ9e0RJR0lUOnl0LEFMUEhBOnZlLEFMUEhBX0RJR0lUOnZlK3ZlLnRvVXBwZXJDYXNlKCkreXR9LHlpPShlPTE2LEE9RHQuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDpyfT1BO2Zvcig7ZS0tOyl0Kz1BW01hdGgucmFuZG9tKCkqcnwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gUWkoZSl7cmV0dXJuISEoZSYmUyhlLmFwcGVuZCkmJmVbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJmVbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIGhpPWU9PntsZXQgQT1uZXcgQXJyYXkoMTApLHQ9KHIsbyk9PntpZihRZShyKSl7aWYoQS5pbmRleE9mKHIpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gcikpe0Fbb109cjtsZXQgaT16KHIpP1tdOnt9O3JldHVybiBvZShyLChzLG0pPT57bGV0IGY9dChzLG8rMSk7IWllKGYpJiYoaVttXT1mKX0pLEFbb109dm9pZCAwLGl9fXJldHVybiByfTtyZXR1cm4gdChlLDApfSx3aT14KCJBc3luY0Z1bmN0aW9uIiksUmk9ZT0+ZSYmKFFlKGUpfHxTKGUpKSYmUyhlLnRoZW4pJiZTKGUuY2F0Y2gpLGM9e2lzQXJyYXk6eixpc0FycmF5QnVmZmVyOlF0LGlzQnVmZmVyOnZyLGlzRm9ybURhdGE6dGksaXNBcnJheUJ1ZmZlclZpZXc6enIsaXNTdHJpbmc6X3IsaXNOdW1iZXI6aHQsaXNCb29sZWFuOlZyLGlzT2JqZWN0OlFlLGlzUGxhaW5PYmplY3Q6Q2UsaXNVbmRlZmluZWQ6aWUsaXNEYXRlOlpyLGlzRmlsZTpYcixpc0Jsb2I6JHIsaXNSZWdFeHA6Y2ksaXNGdW5jdGlvbjpTLGlzU3RyZWFtOkFpLGlzVVJMU2VhcmNoUGFyYW1zOnJpLGlzVHlwZWRBcnJheTpsaSxpc0ZpbGVMaXN0OmVpLGZvckVhY2g6b2UsbWVyZ2U6emUsZXh0ZW5kOm9pLHRyaW06aWksc3RyaXBCT006YWksaW5oZXJpdHM6bmksdG9GbGF0T2JqZWN0OnNpLGtpbmRPZjpFZSxraW5kT2ZUZXN0OngsZW5kc1dpdGg6Z2ksdG9BcnJheTpJaSxmb3JFYWNoRW50cnk6cGksbWF0Y2hBbGw6bWksaXNIVE1MRm9ybTp1aSxoYXNPd25Qcm9wZXJ0eTpFdCxoYXNPd25Qcm9wOkV0LHJlZHVjZURlc2NyaXB0b3JzOmJ0LGZyZWV6ZU1ldGhvZHM6QmksdG9PYmplY3RTZXQ6ZGksdG9DYW1lbENhc2U6Zmksbm9vcDpDaSx0b0Zpbml0ZU51bWJlcjpFaSxmaW5kS2V5Ond0LGdsb2JhbDpSdCxpc0NvbnRleHREZWZpbmVkOmt0LEFMUEhBQkVUOkR0LGdlbmVyYXRlU3RyaW5nOnlpLGlzU3BlY0NvbXBsaWFudEZvcm06UWksdG9KU09OT2JqZWN0OmhpLGlzQXN5bmNGbjp3aSxpc1RoZW5hYmxlOlJpfTtmdW5jdGlvbiBfKGUsQSx0LHIsbyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPWUsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixBJiYodGhpcy5jb2RlPUEpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG8mJih0aGlzLnJlc3BvbnNlPW8pfWMuaW5oZXJpdHMoXyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIFd0PV8ucHJvdG90eXBlLEZ0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goZT0+e0Z0W2VdPXt2YWx1ZTplfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF8sRnQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShXdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtfLmZyb209KGUsQSx0LHIsbyxpKT0+e2xldCBzPU9iamVjdC5jcmVhdGUoV3QpO3JldHVybiBjLnRvRmxhdE9iamVjdChlLHMsZnVuY3Rpb24oZil7cmV0dXJuIGYhPT1FcnJvci5wcm90b3R5cGV9LG09Pm0hPT0iaXNBeGlvc0Vycm9yIiksXy5jYWxsKHMsZS5tZXNzYWdlLEEsdCxyLG8pLHMuY2F1c2U9ZSxzLm5hbWU9ZS5uYW1lLGkmJk9iamVjdC5hc3NpZ24ocyxpKSxzfTt2YXIgdz1fO3ZhciBoZT1udWxsO2Z1bmN0aW9uIFZlKGUpe3JldHVybiBjLmlzUGxhaW5PYmplY3QoZSl8fGMuaXNBcnJheShlKX1mdW5jdGlvbiBOdChlKXtyZXR1cm4gYy5lbmRzV2l0aChlLCJbXSIpP2Uuc2xpY2UoMCwtMik6ZX1mdW5jdGlvbiBVdChlLEEsdCl7cmV0dXJuIGU/ZS5jb25jYXQoQSkubWFwKGZ1bmN0aW9uKG8saSl7cmV0dXJuIG89TnQobyksIXQmJmk/IlsiK28rIl0iOm99KS5qb2luKHQ/Ii4iOiIiKTpBfWZ1bmN0aW9uIGtpKGUpe3JldHVybiBjLmlzQXJyYXkoZSkmJiFlLnNvbWUoVmUpfXZhciBiaT1jLnRvRmxhdE9iamVjdChjLHt9LG51bGwsZnVuY3Rpb24oQSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KEEpfSk7ZnVuY3Rpb24gRGkoZSxBLHQpe2lmKCFjLmlzT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO0E9QXx8bmV3KGhlfHxGb3JtRGF0YSksdD1jLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oQixRKXtyZXR1cm4hYy5pc1VuZGVmaW5lZChRW0JdKX0pO2xldCByPXQubWV0YVRva2VucyxvPXQudmlzaXRvcnx8YSxpPXQuZG90cyxzPXQuaW5kZXhlcyxmPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmMuaXNTcGVjQ29tcGxpYW50Rm9ybShBKTtpZighYy5pc0Z1bmN0aW9uKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gcChsKXtpZihsPT09bnVsbClyZXR1cm4iIjtpZihjLmlzRGF0ZShsKSlyZXR1cm4gbC50b0lTT1N0cmluZygpO2lmKCFmJiZjLmlzQmxvYihsKSl0aHJvdyBuZXcgdygiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gYy5pc0FycmF5QnVmZmVyKGwpfHxjLmlzVHlwZWRBcnJheShsKT9mJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbbF0pOkJ1ZmZlci5mcm9tKGwpOmx9ZnVuY3Rpb24gYShsLEIsUSl7bGV0IFI9bDtpZihsJiYhUSYmdHlwZW9mIGw9PSJvYmplY3QiKXtpZihjLmVuZHNXaXRoKEIsInt9IikpQj1yP0I6Qi5zbGljZSgwLC0yKSxsPUpTT04uc3RyaW5naWZ5KGwpO2Vsc2UgaWYoYy5pc0FycmF5KGwpJiZraShsKXx8KGMuaXNGaWxlTGlzdChsKXx8Yy5lbmRzV2l0aChCLCJbXSIpKSYmKFI9Yy50b0FycmF5KGwpKSlyZXR1cm4gQj1OdChCKSxSLmZvckVhY2goZnVuY3Rpb24oUCxRcil7IShjLmlzVW5kZWZpbmVkKFApfHxQPT09bnVsbCkmJkEuYXBwZW5kKHM9PT0hMD9VdChbQl0sUXIsaSk6cz09PW51bGw/QjpCKyJbXSIscChQKSl9KSwhMX1yZXR1cm4gVmUobCk/ITA6KEEuYXBwZW5kKFV0KFEsQixpKSxwKGwpKSwhMSl9bGV0IG49W10sdT1PYmplY3QuYXNzaWduKGJpLHtkZWZhdWx0VmlzaXRvcjphLGNvbnZlcnRWYWx1ZTpwLGlzVmlzaXRhYmxlOlZlfSk7ZnVuY3Rpb24gZyhsLEIpe2lmKCFjLmlzVW5kZWZpbmVkKGwpKXtpZihuLmluZGV4T2YobCkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrQi5qb2luKCIuIikpO24ucHVzaChsKSxjLmZvckVhY2gobCxmdW5jdGlvbihSLE8peyghKGMuaXNVbmRlZmluZWQoUil8fFI9PT1udWxsKSYmby5jYWxsKEEsUixjLmlzU3RyaW5nKE8pP08udHJpbSgpOk8sQix1KSk9PT0hMCYmZyhSLEI/Qi5jb25jYXQoTyk6W09dKX0pLG4ucG9wKCl9fWlmKCFjLmlzT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gZyhlKSxBfXZhciBMPURpO2Z1bmN0aW9uIFN0KGUpe2xldCBBPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBBW3JdfSl9ZnVuY3Rpb24gT3QoZSxBKXt0aGlzLl9wYWlycz1bXSxlJiZMKGUsdGhpcyxBKX12YXIgUHQ9T3QucHJvdG90eXBlO1B0LmFwcGVuZD1mdW5jdGlvbihBLHQpe3RoaXMuX3BhaXJzLnB1c2goW0EsdF0pfTtQdC50b1N0cmluZz1mdW5jdGlvbihBKXtsZXQgdD1BP2Z1bmN0aW9uKHIpe3JldHVybiBBLmNhbGwodGhpcyxyLFN0KX06U3Q7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gdChvWzBdKSsiPSIrdChvWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHdlPU90O2Z1bmN0aW9uIFdpKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIGFlKGUsQSx0KXtpZighQSlyZXR1cm4gZTtsZXQgcj10JiZ0LmVuY29kZXx8V2ksbz10JiZ0LnNlcmlhbGl6ZSxpO2lmKG8/aT1vKEEsdCk6aT1jLmlzVVJMU2VhcmNoUGFyYW1zKEEpP0EudG9TdHJpbmcoKTpuZXcgd2UoQSx0KS50b1N0cmluZyhyKSxpKXtsZXQgcz1lLmluZGV4T2YoIiMiKTtzIT09LTEmJihlPWUuc2xpY2UoMCxzKSksZSs9KGUuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikraX1yZXR1cm4gZX12YXIgWmU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShBLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOkEscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChBKXt0aGlzLmhhbmRsZXJzW0FdJiYodGhpcy5oYW5kbGVyc1tBXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKEEpe2MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZBKHIpfSl9fSxYZT1aZTt2YXIgUmU9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciB4dD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6d2U7dmFyIFR0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgR3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgSnQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6eHQsRm9ybURhdGE6VHQsQmxvYjpHdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciAkZT17fTt3cigkZSx7aGFzQnJvd3NlckVudjooKT0+THQsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5GaSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PlVpfSk7dmFyIEx0PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLEZpPShlPT5MdCYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihlKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLFVpPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgVz17Li4uJGUsLi4uSnR9O2Z1bmN0aW9uIGVBKGUsQSl7cmV0dXJuIEwoZSxuZXcgVy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixvLGkpe3JldHVybiBXLmlzTm9kZSYmYy5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOmkuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sQSkpfWZ1bmN0aW9uIE5pKGUpe3JldHVybiBjLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxlKS5tYXAoQT0+QVswXT09PSJbXSI/IiI6QVsxXXx8QVswXSl9ZnVuY3Rpb24gU2koZSl7bGV0IEE9e30sdD1PYmplY3Qua2V5cyhlKSxyLG89dC5sZW5ndGgsaTtmb3Iocj0wO3I8bztyKyspaT10W3JdLEFbaV09ZVtpXTtyZXR1cm4gQX1mdW5jdGlvbiBPaShlKXtmdW5jdGlvbiBBKHQscixvLGkpe2xldCBzPXRbaSsrXTtpZihzPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IG09TnVtYmVyLmlzRmluaXRlKCtzKSxmPWk+PXQubGVuZ3RoO3JldHVybiBzPSFzJiZjLmlzQXJyYXkobyk/by5sZW5ndGg6cyxmPyhjLmhhc093blByb3AobyxzKT9vW3NdPVtvW3NdLHJdOm9bc109ciwhbSk6KCghb1tzXXx8IWMuaXNPYmplY3Qob1tzXSkpJiYob1tzXT1bXSksQSh0LHIsb1tzXSxpKSYmYy5pc0FycmF5KG9bc10pJiYob1tzXT1TaShvW3NdKSksIW0pfWlmKGMuaXNGb3JtRGF0YShlKSYmYy5pc0Z1bmN0aW9uKGUuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBjLmZvckVhY2hFbnRyeShlLChyLG8pPT57QShOaShyKSxvLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBrZT1PaTtmdW5jdGlvbiBQaShlLEEsdCl7aWYoYy5pc1N0cmluZyhlKSl0cnl7cmV0dXJuKEF8fEpTT04ucGFyc2UpKGUpLGMudHJpbShlKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShlKX12YXIgQUE9e3RyYW5zaXRpb25hbDpSZSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKEEsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixvPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGk9Yy5pc09iamVjdChBKTtpZihpJiZjLmlzSFRNTEZvcm0oQSkmJihBPW5ldyBGb3JtRGF0YShBKSksYy5pc0Zvcm1EYXRhKEEpKXJldHVybiBvP0pTT04uc3RyaW5naWZ5KGtlKEEpKTpBO2lmKGMuaXNBcnJheUJ1ZmZlcihBKXx8Yy5pc0J1ZmZlcihBKXx8Yy5pc1N0cmVhbShBKXx8Yy5pc0ZpbGUoQSl8fGMuaXNCbG9iKEEpKXJldHVybiBBO2lmKGMuaXNBcnJheUJ1ZmZlclZpZXcoQSkpcmV0dXJuIEEuYnVmZmVyO2lmKGMuaXNVUkxTZWFyY2hQYXJhbXMoQSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksQS50b1N0cmluZygpO2xldCBtO2lmKGkpe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIGVBKEEsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigobT1jLmlzRmlsZUxpc3QoQSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGY9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBMKG0/eyJmaWxlc1tdIjpBfTpBLGYmJm5ldyBmLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gaXx8bz8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLFBpKEEpKTpBfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKEEpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxBQS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG89dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoQSYmYy5pc1N0cmluZyhBKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bykpe2xldCBzPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm87dHJ5e3JldHVybiBKU09OLnBhcnNlKEEpfWNhdGNoKG0pe2lmKHMpdGhyb3cgbS5uYW1lPT09IlN5bnRheEVycm9yIj93LmZyb20obSx3LkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOm19fXJldHVybiBBfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpXLmNsYXNzZXMuRm9ybURhdGEsQmxvYjpXLmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oQSl7cmV0dXJuIEE+PTIwMCYmQTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtjLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sZT0+e0FBLmhlYWRlcnNbZV09e319KTt2YXIgVj1BQTt2YXIgeGk9Yy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxNdD1lPT57bGV0IEE9e30sdCxyLG87cmV0dXJuIGUmJmUuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe289cy5pbmRleE9mKCI6IiksdD1zLnN1YnN0cmluZygwLG8pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9cy5zdWJzdHJpbmcobysxKS50cmltKCksISghdHx8QVt0XSYmeGlbdF0pJiYodD09PSJzZXQtY29va2llIj9BW3RdP0FbdF0ucHVzaChyKTpBW3RdPVtyXTpBW3RdPUFbdF0/QVt0XSsiLCAiK3I6cil9KSxBfTt2YXIgSHQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBuZShlKXtyZXR1cm4gZSYmU3RyaW5nKGUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGJlKGUpe3JldHVybiBlPT09ITF8fGU9PW51bGw/ZTpjLmlzQXJyYXkoZSk/ZS5tYXAoYmUpOlN0cmluZyhlKX1mdW5jdGlvbiBUaShlKXtsZXQgQT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoZSk7KUFbclsxXV09clsyXTtyZXR1cm4gQX12YXIgR2k9ZT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChlLnRyaW0oKSk7ZnVuY3Rpb24gdEEoZSxBLHQscixvKXtpZihjLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLEEsdCk7aWYobyYmKEE9dCksISFjLmlzU3RyaW5nKEEpKXtpZihjLmlzU3RyaW5nKHIpKXJldHVybiBBLmluZGV4T2YocikhPT0tMTtpZihjLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoQSl9fWZ1bmN0aW9uIEppKGUpe3JldHVybiBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKEEsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIExpKGUsQSl7bGV0IHQ9Yy50b0NhbWVsQ2FzZSgiICIrQSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG8saSxzKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsQSxvLGkscyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFo9Y2xhc3N7Y29uc3RydWN0b3IoQSl7QSYmdGhpcy5zZXQoQSl9c2V0KEEsdCxyKXtsZXQgbz10aGlzO2Z1bmN0aW9uIGkobSxmLHApe2xldCBhPW5lKGYpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgbj1jLmZpbmRLZXkobyxhKTsoIW58fG9bbl09PT12b2lkIDB8fHA9PT0hMHx8cD09PXZvaWQgMCYmb1tuXSE9PSExKSYmKG9bbnx8Zl09YmUobSkpfWxldCBzPShtLGYpPT5jLmZvckVhY2gobSwocCxhKT0+aShwLGEsZikpO3JldHVybiBjLmlzUGxhaW5PYmplY3QoQSl8fEEgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3MoQSx0KTpjLmlzU3RyaW5nKEEpJiYoQT1BLnRyaW0oKSkmJiFHaShBKT9zKE10KEEpLHQpOkEhPW51bGwmJmkodCxBLHIpLHRoaXN9Z2V0KEEsdCl7aWYoQT1uZShBKSxBKXtsZXQgcj1jLmZpbmRLZXkodGhpcyxBKTtpZihyKXtsZXQgbz10aGlzW3JdO2lmKCF0KXJldHVybiBvO2lmKHQ9PT0hMClyZXR1cm4gVGkobyk7aWYoYy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxvLHIpO2lmKGMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhvKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKEEsdCl7aWYoQT1uZShBKSxBKXtsZXQgcj1jLmZpbmRLZXkodGhpcyxBKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fHRBKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKEEsdCl7bGV0IHI9dGhpcyxvPSExO2Z1bmN0aW9uIGkocyl7aWYocz1uZShzKSxzKXtsZXQgbT1jLmZpbmRLZXkocixzKTttJiYoIXR8fHRBKHIsclttXSxtLHQpKSYmKGRlbGV0ZSByW21dLG89ITApfX1yZXR1cm4gYy5pc0FycmF5KEEpP0EuZm9yRWFjaChpKTppKEEpLG99Y2xlYXIoQSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxvPSExO2Zvcig7ci0tOyl7bGV0IGk9dFtyXTsoIUF8fHRBKHRoaXMsdGhpc1tpXSxpLEEsITApKSYmKGRlbGV0ZSB0aGlzW2ldLG89ITApfXJldHVybiBvfW5vcm1hbGl6ZShBKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIGMuZm9yRWFjaCh0aGlzLChvLGkpPT57bGV0IHM9Yy5maW5kS2V5KHIsaSk7aWYocyl7dFtzXT1iZShvKSxkZWxldGUgdFtpXTtyZXR1cm59bGV0IG09QT9KaShpKTpTdHJpbmcoaSkudHJpbSgpO20hPT1pJiZkZWxldGUgdFtpXSx0W21dPWJlKG8pLHJbbV09ITB9KSx0aGlzfWNvbmNhdCguLi5BKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5BKX10b0pTT04oQSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gYy5mb3JFYWNoKHRoaXMsKHIsbyk9PntyIT1udWxsJiZyIT09ITEmJih0W29dPUEmJmMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtBLHRdKT0+QSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKEEpe3JldHVybiBBIGluc3RhbmNlb2YgdGhpcz9BOm5ldyB0aGlzKEEpfXN0YXRpYyBjb25jYXQoQSwuLi50KXtsZXQgcj1uZXcgdGhpcyhBKTtyZXR1cm4gdC5mb3JFYWNoKG89PnIuc2V0KG8pKSxyfXN0YXRpYyBhY2Nlc3NvcihBKXtsZXQgcj0odGhpc1tIdF09dGhpc1tIdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxvPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIGkocyl7bGV0IG09bmUocyk7clttXXx8KExpKG8scyksclttXT0hMCl9cmV0dXJuIGMuaXNBcnJheShBKT9BLmZvckVhY2goaSk6aShBKSx0aGlzfX07Wi5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7Yy5yZWR1Y2VEZXNjcmlwdG9ycyhaLnByb3RvdHlwZSwoe3ZhbHVlOmV9LEEpPT57bGV0IHQ9QVswXS50b1VwcGVyQ2FzZSgpK0Euc2xpY2UoMSk7cmV0dXJue2dldDooKT0+ZSxzZXQocil7dGhpc1t0XT1yfX19KTtjLmZyZWV6ZU1ldGhvZHMoWik7dmFyIEY9WjtmdW5jdGlvbiBzZShlLEEpe2xldCB0PXRoaXN8fFYscj1BfHx0LG89Ri5mcm9tKHIuaGVhZGVycyksaT1yLmRhdGE7cmV0dXJuIGMuZm9yRWFjaChlLGZ1bmN0aW9uKG0pe2k9bS5jYWxsKHQsaSxvLm5vcm1hbGl6ZSgpLEE/QS5zdGF0dXM6dm9pZCAwKX0pLG8ubm9ybWFsaXplKCksaX1mdW5jdGlvbiBnZShlKXtyZXR1cm4hIShlJiZlLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFl0KGUsQSx0KXt3LmNhbGwodGhpcyxlPz8iY2FuY2VsZWQiLHcuRVJSX0NBTkNFTEVELEEsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1jLmluaGVyaXRzKFl0LHcse19fQ0FOQ0VMX186ITB9KTt2YXIgTT1ZdDtmdW5jdGlvbiByQShlLEEsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/ZSh0KTpBKG5ldyB3KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW3cuRVJSX0JBRF9SRVFVRVNULHcuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIHF0PVcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShlLEEsdCxyLG8saSl7bGV0IHM9W2UrIj0iK2VuY29kZVVSSUNvbXBvbmVudChBKV07Yy5pc051bWJlcih0KSYmcy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksYy5pc1N0cmluZyhyKSYmcy5wdXNoKCJwYXRoPSIrciksYy5pc1N0cmluZyhvKSYmcy5wdXNoKCJkb21haW49IitvKSxpPT09ITAmJnMucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPXMuam9pbigiOyAiKX0scmVhZChlKXtsZXQgQT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiBBP2RlY29kZVVSSUNvbXBvbmVudChBWzNdKTpudWxsfSxyZW1vdmUoZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIGlBKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9ZnVuY3Rpb24gb0EoZSxBKXtyZXR1cm4gQT9lLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitBLnJlcGxhY2UoL15cLysvLCIiKTplfWZ1bmN0aW9uIEllKGUsQSl7cmV0dXJuIGUmJiFpQShBKT9vQShlLEEpOkF9dmFyIEt0PVcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IEE9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG8oaSl7bGV0IHM9aTtyZXR1cm4gQSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixzKSxzPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLHMpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1vKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihzKXtsZXQgbT1jLmlzU3RyaW5nKHMpP28ocyk6cztyZXR1cm4gbS5wcm90b2NvbD09PXIucHJvdG9jb2wmJm0uaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gYUEoZSl7bGV0IEE9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoZSk7cmV0dXJuIEEmJkFbMV18fCIifWZ1bmN0aW9uIE1pKGUsQSl7ZT1lfHwxMDtsZXQgdD1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSksbz0wLGk9MCxzO3JldHVybiBBPUEhPT12b2lkIDA/QToxZTMsZnVuY3Rpb24oZil7bGV0IHA9RGF0ZS5ub3coKSxhPXJbaV07c3x8KHM9cCksdFtvXT1mLHJbb109cDtsZXQgbj1pLHU9MDtmb3IoO24hPT1vOyl1Kz10W24rK10sbj1uJWU7aWYobz0obysxKSVlLG89PT1pJiYoaT0oaSsxKSVlKSxwLXM8QSlyZXR1cm47bGV0IGc9YSYmcC1hO3JldHVybiBnP01hdGgucm91bmQodSoxZTMvZyk6dm9pZCAwfX12YXIganQ9TWk7ZnVuY3Rpb24gdnQoZSxBKXtsZXQgdD0wLHI9anQoNTAsMjUwKTtyZXR1cm4gbz0+e2xldCBpPW8ubG9hZGVkLHM9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLG09aS10LGY9cihtKSxwPWk8PXM7dD1pO2xldCBhPXtsb2FkZWQ6aSx0b3RhbDpzLHByb2dyZXNzOnM/aS9zOnZvaWQgMCxieXRlczptLHJhdGU6Znx8dm9pZCAwLGVzdGltYXRlZDpmJiZzJiZwPyhzLWkpL2Y6dm9pZCAwLGV2ZW50Om99O2FbQT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxlKGEpfX12YXIgSGk9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iix6dD1IaSYmZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG89ZS5kYXRhLGk9Ri5mcm9tKGUuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpzLHdpdGhYU1JGVG9rZW46bX09ZSxmO2Z1bmN0aW9uIHAoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGYpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsZil9bGV0IGE7aWYoYy5pc0Zvcm1EYXRhKG8pKXtpZihXLmhhc1N0YW5kYXJkQnJvd3NlckVudnx8Vy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpaS5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoYT1pLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtCLC4uLlFdPWE/YS5zcGxpdCgiOyIpLm1hcChSPT5SLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO2kuc2V0Q29udGVudFR5cGUoW0J8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5RXS5qb2luKCI7ICIpKX19bGV0IG49bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGUuYXV0aCl7bGV0IEI9ZS5hdXRoLnVzZXJuYW1lfHwiIixRPWUuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5hdXRoLnBhc3N3b3JkKSk6IiI7aS5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoQisiOiIrUSkpfWxldCB1PUllKGUuYmFzZVVSTCxlLnVybCk7bi5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksYWUodSxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxuLnRpbWVvdXQ9ZS50aW1lb3V0O2Z1bmN0aW9uIGcoKXtpZighbilyZXR1cm47bGV0IEI9Ri5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gbiYmbi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksUj17ZGF0YTohc3x8cz09PSJ0ZXh0Inx8cz09PSJqc29uIj9uLnJlc3BvbnNlVGV4dDpuLnJlc3BvbnNlLHN0YXR1czpuLnN0YXR1cyxzdGF0dXNUZXh0Om4uc3RhdHVzVGV4dCxoZWFkZXJzOkIsY29uZmlnOmUscmVxdWVzdDpufTtyQShmdW5jdGlvbihQKXt0KFApLHAoKX0sZnVuY3Rpb24oUCl7cihQKSxwKCl9LFIpLG49bnVsbH1pZigib25sb2FkZW5kImluIG4/bi5vbmxvYWRlbmQ9ZzpuLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFufHxuLnJlYWR5U3RhdGUhPT00fHxuLnN0YXR1cz09PTAmJiEobi5yZXNwb25zZVVSTCYmbi5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoZyl9LG4ub25hYm9ydD1mdW5jdGlvbigpe24mJihyKG5ldyB3KCJSZXF1ZXN0IGFib3J0ZWQiLHcuRUNPTk5BQk9SVEVELGUsbikpLG49bnVsbCl9LG4ub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IHcoIk5ldHdvcmsgRXJyb3IiLHcuRVJSX05FVFdPUkssZSxuKSksbj1udWxsfSxuLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBRPWUudGltZW91dD8idGltZW91dCBvZiAiK2UudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixSPWUudHJhbnNpdGlvbmFsfHxSZTtlLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihRPWUudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgdyhRLFIuY2xhcmlmeVRpbWVvdXRFcnJvcj93LkVUSU1FRE9VVDp3LkVDT05OQUJPUlRFRCxlLG4pKSxuPW51bGx9LFcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobSYmYy5pc0Z1bmN0aW9uKG0pJiYobT1tKGUpKSxtfHxtIT09ITEmJkt0KHUpKSl7bGV0IEI9ZS54c3JmSGVhZGVyTmFtZSYmZS54c3JmQ29va2llTmFtZSYmcXQucmVhZChlLnhzcmZDb29raWVOYW1lKTtCJiZpLnNldChlLnhzcmZIZWFkZXJOYW1lLEIpfW89PT12b2lkIDAmJmkuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gbiYmYy5mb3JFYWNoKGkudG9KU09OKCksZnVuY3Rpb24oUSxSKXtuLnNldFJlcXVlc3RIZWFkZXIoUixRKX0pLGMuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwobi53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscykscyYmcyE9PSJqc29uIiYmKG4ucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSx0eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJm4uYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHZ0KGUub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmbi51cGxvYWQmJm4udXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix2dChlLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYoZj1CPT57biYmKHIoIUJ8fEIudHlwZT9uZXcgTShudWxsLGUsbik6Qiksbi5hYm9ydCgpLG49bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGYpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9mKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGYpKSk7bGV0IGw9YUEodSk7aWYobCYmVy5wcm90b2NvbHMuaW5kZXhPZihsKT09PS0xKXtyKG5ldyB3KCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2wrIjoiLHcuRVJSX0JBRF9SRVFVRVNULGUpKTtyZXR1cm59bi5zZW5kKG98fG51bGwpfSl9O3ZhciBuQT17aHR0cDpoZSx4aHI6enR9O2MuZm9yRWFjaChuQSwoZSxBKT0+e2lmKGUpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibmFtZSIse3ZhbHVlOkF9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImFkYXB0ZXJOYW1lIix7dmFsdWU6QX0pfX0pO3ZhciBfdD1lPT5gLSAke2V9YCxZaT1lPT5jLmlzRnVuY3Rpb24oZSl8fGU9PT1udWxsfHxlPT09ITEsRGU9e2dldEFkYXB0ZXI6ZT0+e2U9Yy5pc0FycmF5KGUpP2U6W2VdO2xldHtsZW5ndGg6QX09ZSx0LHIsbz17fTtmb3IobGV0IGk9MDtpPEE7aSsrKXt0PWVbaV07bGV0IHM7aWYocj10LCFZaSh0KSYmKHI9bkFbKHM9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgdyhgVW5rbm93biBhZGFwdGVyICcke3N9J2ApO2lmKHIpYnJlYWs7b1tzfHwiIyIraV09cn1pZighcil7bGV0IGk9T2JqZWN0LmVudHJpZXMobykubWFwKChbbSxmXSk9PmBhZGFwdGVyICR7bX0gYCsoZj09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLHM9QT9pLmxlbmd0aD4xP2BzaW5jZSA6CmAraS5tYXAoX3QpLmpvaW4oYApgKToiICIrX3QoaVswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgdygiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK3MsIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczpuQX07ZnVuY3Rpb24gc0EoZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IE0obnVsbCxlKX1mdW5jdGlvbiBXZShlKXtyZXR1cm4gc0EoZSksZS5oZWFkZXJzPUYuZnJvbShlLmhlYWRlcnMpLGUuZGF0YT1zZS5jYWxsKGUsZS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoZS5tZXRob2QpIT09LTEmJmUuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksRGUuZ2V0QWRhcHRlcihlLmFkYXB0ZXJ8fFYuYWRhcHRlcikoZSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gc0EoZSksci5kYXRhPXNlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz1GLmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gZ2Uocil8fChzQShlKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXNlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz1GLmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIFZ0PWU9PmUgaW5zdGFuY2VvZiBGP3suLi5lfTplO2Z1bmN0aW9uIEcoZSxBKXtBPUF8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIocCxhLG4pe3JldHVybiBjLmlzUGxhaW5PYmplY3QocCkmJmMuaXNQbGFpbk9iamVjdChhKT9jLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOm59LHAsYSk6Yy5pc1BsYWluT2JqZWN0KGEpP2MubWVyZ2Uoe30sYSk6Yy5pc0FycmF5KGEpP2Euc2xpY2UoKTphfWZ1bmN0aW9uIG8ocCxhLG4pe2lmKGMuaXNVbmRlZmluZWQoYSkpe2lmKCFjLmlzVW5kZWZpbmVkKHApKXJldHVybiByKHZvaWQgMCxwLG4pfWVsc2UgcmV0dXJuIHIocCxhLG4pfWZ1bmN0aW9uIGkocCxhKXtpZighYy5pc1VuZGVmaW5lZChhKSlyZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gcyhwLGEpe2lmKGMuaXNVbmRlZmluZWQoYSkpe2lmKCFjLmlzVW5kZWZpbmVkKHApKXJldHVybiByKHZvaWQgMCxwKX1lbHNlIHJldHVybiByKHZvaWQgMCxhKX1mdW5jdGlvbiBtKHAsYSxuKXtpZihuIGluIEEpcmV0dXJuIHIocCxhKTtpZihuIGluIGUpcmV0dXJuIHIodm9pZCAwLHApfWxldCBmPXt1cmw6aSxtZXRob2Q6aSxkYXRhOmksYmFzZVVSTDpzLHRyYW5zZm9ybVJlcXVlc3Q6cyx0cmFuc2Zvcm1SZXNwb25zZTpzLHBhcmFtc1NlcmlhbGl6ZXI6cyx0aW1lb3V0OnMsdGltZW91dE1lc3NhZ2U6cyx3aXRoQ3JlZGVudGlhbHM6cyx3aXRoWFNSRlRva2VuOnMsYWRhcHRlcjpzLHJlc3BvbnNlVHlwZTpzLHhzcmZDb29raWVOYW1lOnMseHNyZkhlYWRlck5hbWU6cyxvblVwbG9hZFByb2dyZXNzOnMsb25Eb3dubG9hZFByb2dyZXNzOnMsZGVjb21wcmVzczpzLG1heENvbnRlbnRMZW5ndGg6cyxtYXhCb2R5TGVuZ3RoOnMsYmVmb3JlUmVkaXJlY3Q6cyx0cmFuc3BvcnQ6cyxodHRwQWdlbnQ6cyxodHRwc0FnZW50OnMsY2FuY2VsVG9rZW46cyxzb2NrZXRQYXRoOnMscmVzcG9uc2VFbmNvZGluZzpzLHZhbGlkYXRlU3RhdHVzOm0saGVhZGVyczoocCxhKT0+byhWdChwKSxWdChhKSwhMCl9O3JldHVybiBjLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxlLEEpKSxmdW5jdGlvbihhKXtsZXQgbj1mW2FdfHxvLHU9bihlW2FdLEFbYV0sYSk7Yy5pc1VuZGVmaW5lZCh1KSYmbiE9PW18fCh0W2FdPXUpfSksdH12YXIgRmU9IjEuNi44Ijt2YXIgZ0E9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChlLEEpPT57Z0FbZV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09ZXx8ImEiKyhBPDE/Im4gIjoiICIpK2V9fSk7dmFyIFp0PXt9O2dBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihBLHQscil7ZnVuY3Rpb24gbyhpLHMpe3JldHVybiJbQXhpb3MgdiIrRmUrIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitpKyInIitzKyhyPyIuICIrcjoiIil9cmV0dXJuKGkscyxtKT0+e2lmKEE9PT0hMSl0aHJvdyBuZXcgdyhvKHMsIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLHcuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhWnRbc10mJihadFtzXT0hMCxjb25zb2xlLndhcm4obyhzLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLEE/QShpLHMsbSk6ITB9fTtmdW5jdGlvbiBxaShlLEEsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyB3KCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iix3LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhlKSxvPXIubGVuZ3RoO2Zvcig7by0tID4wOyl7bGV0IGk9cltvXSxzPUFbaV07aWYocyl7bGV0IG09ZVtpXSxmPW09PT12b2lkIDB8fHMobSxpLGUpO2lmKGYhPT0hMCl0aHJvdyBuZXcgdygib3B0aW9uICIraSsiIG11c3QgYmUgIitmLHcuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgdygiVW5rbm93biBvcHRpb24gIitpLHcuRVJSX0JBRF9PUFRJT04pfX12YXIgVWU9e2Fzc2VydE9wdGlvbnM6cWksdmFsaWRhdG9yczpnQX07dmFyIEg9VWUudmFsaWRhdG9ycyxYPWNsYXNze2NvbnN0cnVjdG9yKEEpe3RoaXMuZGVmYXVsdHM9QSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgWGUscmVzcG9uc2U6bmV3IFhlfX1hc3luYyByZXF1ZXN0KEEsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KEEsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvPXt9KTpvPW5ldyBFcnJvcjtsZXQgaT1vLnN0YWNrP28uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP2kmJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoaS5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmAraSk6ci5zdGFjaz1pfXRocm93IHJ9fV9yZXF1ZXN0KEEsdCl7dHlwZW9mIEE9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPUEpOnQ9QXx8e30sdD1HKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6byxoZWFkZXJzOml9PXQ7ciE9PXZvaWQgMCYmVWUuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkgudHJhbnNpdGlvbmFsKEguYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pfSwhMSksbyE9bnVsbCYmKGMuaXNGdW5jdGlvbihvKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpvfTpVZS5hc3NlcnRPcHRpb25zKG8se2VuY29kZTpILmZ1bmN0aW9uLHNlcmlhbGl6ZTpILmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBzPWkmJmMubWVyZ2UoaS5jb21tb24saVt0Lm1ldGhvZF0pO2kmJmMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxsPT57ZGVsZXRlIGlbbF19KSx0LmhlYWRlcnM9Ri5jb25jYXQocyxpKTtsZXQgbT1bXSxmPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihCKXt0eXBlb2YgQi5ydW5XaGVuPT0iZnVuY3Rpb24iJiZCLnJ1bldoZW4odCk9PT0hMXx8KGY9ZiYmQi5zeW5jaHJvbm91cyxtLnVuc2hpZnQoQi5mdWxmaWxsZWQsQi5yZWplY3RlZCkpfSk7bGV0IHA9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihCKXtwLnB1c2goQi5mdWxmaWxsZWQsQi5yZWplY3RlZCl9KTtsZXQgYSxuPTAsdTtpZighZil7bGV0IGw9W1dlLmJpbmQodGhpcyksdm9pZCAwXTtmb3IobC51bnNoaWZ0LmFwcGx5KGwsbSksbC5wdXNoLmFwcGx5KGwscCksdT1sLmxlbmd0aCxhPVByb21pc2UucmVzb2x2ZSh0KTtuPHU7KWE9YS50aGVuKGxbbisrXSxsW24rK10pO3JldHVybiBhfXU9bS5sZW5ndGg7bGV0IGc9dDtmb3Iobj0wO248dTspe2xldCBsPW1bbisrXSxCPW1bbisrXTt0cnl7Zz1sKGcpfWNhdGNoKFEpe0IuY2FsbCh0aGlzLFEpO2JyZWFrfX10cnl7YT1XZS5jYWxsKHRoaXMsZyl9Y2F0Y2gobCl7cmV0dXJuIFByb21pc2UucmVqZWN0KGwpfWZvcihuPTAsdT1wLmxlbmd0aDtuPHU7KWE9YS50aGVuKHBbbisrXSxwW24rK10pO3JldHVybiBhfWdldFVyaShBKXtBPUcodGhpcy5kZWZhdWx0cyxBKTtsZXQgdD1JZShBLmJhc2VVUkwsQS51cmwpO3JldHVybiBhZSh0LEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplcil9fTtjLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKEEpe1gucHJvdG90eXBlW0FdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChHKHJ8fHt9LHttZXRob2Q6QSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtjLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihBKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihpLHMsbSl7cmV0dXJuIHRoaXMucmVxdWVzdChHKG18fHt9LHttZXRob2Q6QSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOmksZGF0YTpzfSkpfX1YLnByb3RvdHlwZVtBXT10KCksWC5wcm90b3R5cGVbQSsiRm9ybSJdPXQoITApfSk7dmFyIGxlPVg7dmFyIElBPWNsYXNzIGV7Y29uc3RydWN0b3IoQSl7aWYodHlwZW9mIEEhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpKXt0PWl9KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG89PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgaT1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7aS0tID4wOylyLl9saXN0ZW5lcnNbaV0obyk7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1vPT57bGV0IGkscz1uZXcgUHJvbWlzZShtPT57ci5zdWJzY3JpYmUobSksaT1tfSkudGhlbihvKTtyZXR1cm4gcy5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKGkpfSxzfSxBKGZ1bmN0aW9uKGkscyxtKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBNKGkscyxtKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKEEpe2lmKHRoaXMucmVhc29uKXtBKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKEEpOnRoaXMuX2xpc3RlbmVycz1bQV19dW5zdWJzY3JpYmUoQSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoQSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBBO3JldHVybnt0b2tlbjpuZXcgZShmdW5jdGlvbihvKXtBPW99KSxjYW5jZWw6QX19fSxYdD1JQTtmdW5jdGlvbiBsQShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gcEEoZSl7cmV0dXJuIGMuaXNPYmplY3QoZSkmJmUuaXNBeGlvc0Vycm9yPT09ITB9dmFyIG1BPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhtQSkuZm9yRWFjaCgoW2UsQV0pPT57bUFbQV09ZX0pO3ZhciAkdD1tQTtmdW5jdGlvbiBlcihlKXtsZXQgQT1uZXcgbGUoZSksdD1yZShsZS5wcm90b3R5cGUucmVxdWVzdCxBKTtyZXR1cm4gYy5leHRlbmQodCxsZS5wcm90b3R5cGUsQSx7YWxsT3duS2V5czohMH0pLGMuZXh0ZW5kKHQsQSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obyl7cmV0dXJuIGVyKEcoZSxvKSl9LHR9dmFyIGs9ZXIoVik7ay5BeGlvcz1sZTtrLkNhbmNlbGVkRXJyb3I9TTtrLkNhbmNlbFRva2VuPVh0O2suaXNDYW5jZWw9Z2U7ay5WRVJTSU9OPUZlO2sudG9Gb3JtRGF0YT1MO2suQXhpb3NFcnJvcj13O2suQ2FuY2VsPWsuQ2FuY2VsZWRFcnJvcjtrLmFsbD1mdW5jdGlvbihBKXtyZXR1cm4gUHJvbWlzZS5hbGwoQSl9O2suc3ByZWFkPWxBO2suaXNBeGlvc0Vycm9yPXBBO2subWVyZ2VDb25maWc9RztrLkF4aW9zSGVhZGVycz1GO2suZm9ybVRvSlNPTj1lPT5rZShjLmlzSFRNTEZvcm0oZSk/bmV3IEZvcm1EYXRhKGUpOmUpO2suZ2V0QWRhcHRlcj1EZS5nZXRBZGFwdGVyO2suSHR0cFN0YXR1c0NvZGU9JHQ7ay5kZWZhdWx0PWs7dmFyIFQ9azt2YXJ7QXhpb3M6eGcsQXhpb3NFcnJvcjpUZyxDYW5jZWxlZEVycm9yOkdnLGlzQ2FuY2VsOkpnLENhbmNlbFRva2VuOkxnLFZFUlNJT046TWcsYWxsOkhnLENhbmNlbDpZZyxpc0F4aW9zRXJyb3I6cWcsc3ByZWFkOktnLHRvRm9ybURhdGE6amcsQXhpb3NIZWFkZXJzOnZnLEh0dHBTdGF0dXNDb2RlOnpnLGZvcm1Ub0pTT046X2csZ2V0QWRhcHRlcjpWZyxtZXJnZUNvbmZpZzpaZ309VDthc3luYyBmdW5jdGlvbiBLaShlLEEpe2xldCB0PWUscj1udWxsO2lmKHQ9PW51bGwpcj1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG89YXdhaXQgVC5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6QX0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChvLmRhdGEpO3I9bmV3IFdvcmtlcihpLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBwZT1LaTtmdW5jdGlvbiBBcihlKXtsZXQgQT1LZShlKSx0PWU7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PUEsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W3FlXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OkEsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIGppKGUsQSx0KXtsZXQgcjtpZihlIT1udWxsKXtsZXQgaT1lO3JldHVybiBpLndvcmtlclByb3h5IT09dm9pZCAwPyhyPWkud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOml9KTpBcihlKX1sZXQgbz1hd2FpdCBwZShBLHQpO3JldHVybiBBcihvKX12YXIgdHI9amk7YXN5bmMgZnVuY3Rpb24gdmkoZSxBLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgZSE9InN0cmluZyI/cj1lLmhyZWY6ZS5zdGFydHNXaXRoKCJodHRwIik/cj1lOnI9dHlwZW9mIEE8InUiP2Ake0F9LyR7ZX1gOmUsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBvPWAke3J9Lndhc21gLHM9KGF3YWl0IFQuZ2V0KG8se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OnN9KX12YXIgcnI9dmk7dmFyIGlyPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBucj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixvcj1uZXcgVGV4dEVuY29kZXIsYXI9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIHppKGUsQSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1lLmZzX29wZW4oQSx0LmZsYWdzKSxpPWUuZnNfc3RhdChBKS5zaXplLHM9bnVsbDtucj9zPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihpKTpzPW5ldyBBcnJheUJ1ZmZlcihpKTtsZXQgbT1uZXcgVWludDhBcnJheShzKTtyZXR1cm4gZS5mc19yZWFkKHIsbSwwLGksMCksZS5mc19jbG9zZShyKSxtfWZ1bmN0aW9uIHNyKGUsQSx0KXtsZXQgcj1udWxsO25yP3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBvPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IFVpbnQ4QXJyYXkoZS5IRUFQVTguYnVmZmVyLEEsdCk7cmV0dXJuIG8uc2V0KGkpLG99ZnVuY3Rpb24gYihlLEEsdCxyKXtsZXQgbz0wO3JldHVybiBBIT09bnVsbCYmKG89ZS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLEEuYnVmZmVyLmJ5dGVMZW5ndGhdKSxlLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoQS5idWZmZXIpLG8pKSxvfWZ1bmN0aW9uIEsoZSxBLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KEEpLG89ZS5sZW5ndGhCeXRlc1VURjgocikrMSxpPWUuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxvXSk7ZS5zdHJpbmdUb1VURjgocixpLG8pfWZ1bmN0aW9uIFUoZSxBLHQscil7bGV0IG89ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQSx0XSksaT1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxBLHRdKSxzPXNyKGUsbyxpKTtyZXR1cm4gTihyLHMuYnVmZmVyKX1mdW5jdGlvbiBOZShlLEEpe2xldCB0PWUuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsQV0pLHI9ZS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24gX2koZSxBLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKHAsYSl7c3dpdGNoKHAudHlwZSl7Y2FzZSBJLlRleHRTdHJlYW06e2xldCBuPW9yLmVuY29kZShwLmRhdGEuZGF0YSksdT1iKGUsbixhLDApLGc9e3NpemU6bi5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gfTtLKGUsZyxhKTticmVha31jYXNlIEkuSnNvbkNvbXBhdGlibGU6e2xldCBuPW9yLmVuY29kZShKU09OLnN0cmluZ2lmeShwLmRhdGEpKSx1PWIoZSxuLGEsMCksZz17c2l6ZTpuLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWB9O0soZSxnLGEpO2JyZWFrfWNhc2UgSS5CaW5hcnlTdHJlYW06e2xldCBuPXAuZGF0YS5kYXRhLHU9YihlLG4sYSwwKSxnPXtzaXplOm4uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07SyhlLGcsYSk7YnJlYWt9Y2FzZSBJLlRleHRGaWxlOntlLmZzX3dyaXRlRmlsZShwLmRhdGEucGF0aCxwLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBJLkJpbmFyeUZpbGU6e2UuZnNfd3JpdGVGaWxlKHAuZGF0YS5wYXRoLHAuZGF0YS5kYXRhKTticmVha31jYXNlIEkuSW1hZ2U6e2xldCBuPXAuZGF0YSx1PWIoZSxuLmRhdGEsYSwwKSxnPWIoZSxuLmRpcmVjdGlvbixhLDEpLGw9dHlwZW9mIG4ubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20obi5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLEI9e2ltYWdlVHlwZTpuLmltYWdlVHlwZSxuYW1lOm4ubmFtZSxvcmlnaW46bi5vcmlnaW4sc3BhY2luZzpuLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLHNpemU6bi5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbWV0YWRhdGE6bH07SyhlLEIsYSk7YnJlYWt9Y2FzZSBJLk1lc2g6e2xldCBuPXAuZGF0YSx1PWIoZSxuLnBvaW50cyxhLDApLGc9YihlLG4uY2VsbHMsYSwxKSxsPWIoZSxuLnBvaW50RGF0YSxhLDIpLEI9YihlLG4uY2VsbERhdGEsYSwzKSxRPXttZXNoVHlwZTpuLm1lc2hUeXBlLG5hbWU6bi5uYW1lLG51bWJlck9mUG9pbnRzOm4ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mQ2VsbHM6bi5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLGNlbGxCdWZmZXJTaXplOm4uY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpuLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLG51bWJlck9mQ2VsbFBpeGVsczpuLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07SyhlLFEsYSk7YnJlYWt9Y2FzZSBJLlBvaW50U2V0OntsZXQgbj1wLmRhdGEsdT1iKGUsbi5wb2ludHMsYSwwKSxnPWIoZSxuLnBvaW50RGF0YSxhLDEpLGw9e3BvaW50U2V0VHlwZTpuLnBvaW50U2V0VHlwZSxuYW1lOm4ubmFtZSxudW1iZXJPZlBvaW50czpuLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOm4ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtnfWB9O0soZSxsLGEpO2JyZWFrfWNhc2UgSS5Qb2x5RGF0YTp7bGV0IG49cC5kYXRhLHU9YihlLG4ucG9pbnRzLGEsMCksZz1iKGUsbi52ZXJ0aWNlcyxhLDEpLGw9YihlLG4ubGluZXMsYSwyKSxCPWIoZSxuLnBvbHlnb25zLGEsMyksUT1iKGUsbi50cmlhbmdsZVN0cmlwcyxhLDQpLFI9YihlLG4ucG9pbnREYXRhLGEsNSksTz1iKGUsbi5wb2ludERhdGEsYSw2KSxQPXtwb2x5RGF0YVR5cGU6bi5wb2x5RGF0YVR5cGUsbmFtZTpuLm5hbWUsbnVtYmVyT2ZQb2ludHM6bi5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsdmVydGljZXNCdWZmZXJTaXplOm4udmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLGxpbmVzQnVmZmVyU2l6ZTpuLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxwb2x5Z29uc0J1ZmZlclNpemU6bi5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOm4udHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG51bWJlck9mUG9pbnRQaXhlbHM6bi5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YCxudW1iZXJPZkNlbGxQaXhlbHM6bi5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtPfWB9O0soZSxQLGEpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxlLnJlc2V0TW9kdWxlU3Rkb3V0KCksZS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBvPWUuc3RhY2tTYXZlKCksaT0wO3RyeXtpPWUuY2FsbE1haW4oQS5zbGljZSgpKX1jYXRjaChwKXt0aHJvdyB0eXBlb2YgcD09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLGUuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLGUuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBlLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLGUuZ2V0RXhjZXB0aW9uTWVzc2FnZShwKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxwfWZpbmFsbHl7ZS5zdGFja1Jlc3RvcmUobyl9bGV0IHM9ZS5nZXRNb2R1bGVTdGRvdXQoKSxtPWUuZ2V0TW9kdWxlU3RkZXJyKCksZj1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmaT09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihwLGEpe2xldCBuPW51bGw7c3dpdGNoKHAudHlwZSl7Y2FzZSBJLlRleHRTdHJlYW06e2xldCBnPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLGw9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQj1uZXcgVWludDhBcnJheShlLkhFQVBVOC5idWZmZXIsZyxsKTtuPXtkYXRhOmFyLmRlY29kZShCKX07YnJlYWt9Y2FzZSBJLkpzb25Db21wYXRpYmxlOntsZXQgZz1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxsPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEI9bmV3IFVpbnQ4QXJyYXkoZS5IRUFQVTguYnVmZmVyLGcsbCk7bj1KU09OLnBhcnNlKGFyLmRlY29kZShCKSk7YnJlYWt9Y2FzZSBJLkJpbmFyeVN0cmVhbTp7bGV0IGc9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksbD1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKTtuPXtkYXRhOnNyKGUsZyxsKX07YnJlYWt9Y2FzZSBJLlRleHRGaWxlOntuPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6ZS5mc19yZWFkRmlsZShwLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgSS5CaW5hcnlGaWxlOntuPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6emkoZSxwLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgSS5JbWFnZTp7bGV0IGc9TmUoZSxhKTtnLmRhdGE9VShlLGEsMCxnLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxnLmRpcmVjdGlvbj1VKGUsYSwxLEQuRmxvYXQ2NCksZy5tZXRhZGF0YT1uZXcgTWFwKGcubWV0YWRhdGEpLG49ZzticmVha31jYXNlIEkuTWVzaDp7bGV0IGc9TmUoZSxhKTtnLm51bWJlck9mUG9pbnRzPjA/Zy5wb2ludHM9VShlLGEsMCxnLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Zy5wb2ludHM9TihnLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZDZWxscz4wP2cuY2VsbHM9VShlLGEsMSxnLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpnLmNlbGxzPU4oZy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGcubnVtYmVyT2ZQb2ludFBpeGVscz4wP2cucG9pbnREYXRhPVUoZSxhLDIsZy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9TihnLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZkNlbGxQaXhlbHM+MD9nLmNlbGxEYXRhPVUoZSxhLDMsZy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpnLmNlbGxEYXRhPU4oZy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbj1nO2JyZWFrfWNhc2UgSS5Qb2ludFNldDp7bGV0IGc9TmUoZSxhKTtnLm51bWJlck9mUG9pbnRzPjA/Zy5wb2ludHM9VShlLGEsMCxnLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmcucG9pbnRzPU4oZy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Zy5wb2ludERhdGE9VShlLGEsMSxnLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5wb2ludERhdGE9TihnLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG49ZzticmVha31jYXNlIEkuUG9seURhdGE6e2xldCBnPU5lKGUsYSk7Zy5udW1iZXJPZlBvaW50cz4wP2cucG9pbnRzPVUoZSxhLDAsRC5GbG9hdDMyKTpnLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGcudmVydGljZXNCdWZmZXJTaXplPjA/Zy52ZXJ0aWNlcz1VKGUsYSwxLGguVUludDMyKTpnLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxnLmxpbmVzQnVmZmVyU2l6ZT4wP2cubGluZXM9VShlLGEsMixoLlVJbnQzMik6Zy5saW5lcz1uZXcgVWludDMyQXJyYXksZy5wb2x5Z29uc0J1ZmZlclNpemU+MD9nLnBvbHlnb25zPVUoZSxhLDMsaC5VSW50MzIpOmcucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGcudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/Zy50cmlhbmdsZVN0cmlwcz1VKGUsYSw0LGguVUludDMyKTpnLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxnLm51bWJlck9mUG9pbnRQaXhlbHM+MD9nLnBvaW50RGF0YT1VKGUsYSw1LGcucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpnLnBvaW50RGF0YT1OKGcucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZkNlbGxQaXhlbHM+MD9nLmNlbGxEYXRhPVUoZSxhLDYsZy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Zy5jZWxsRGF0YT1OKGcucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuPWc7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgdT17dHlwZTpwLnR5cGUsZGF0YTpufTtmLnB1c2godSl9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6cyxzdGRlcnI6bSxvdXRwdXRzOmZ9fXZhciBncj1faTt2YXIgVmk9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFppKGUsQSl7aWYoZT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89WGkoZVtyXSxBKTtvIT09bnVsbCYmdC5wdXNoKG8pfXJldHVybiB0fWZ1bmN0aW9uIFhpKGUsQSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBlLmJ1ZmZlciE9PXZvaWQgMD90PWUuYnVmZmVyOmUuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9ZSksVmkmJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOkE/dDp0LnNsaWNlKDApfXZhciBJcj1aaTtmdW5jdGlvbiAkaShlKXtyZXR1cm5bZS5kYXRhLGUuZGlyZWN0aW9uXX12YXIgbHI9JGk7ZnVuY3Rpb24gZW8oZSl7cmV0dXJuW2UucG9pbnRzLGUucG9pbnREYXRhLGUuY2VsbHMsZS5jZWxsRGF0YV19dmFyIHByPWVvO2Z1bmN0aW9uIEFvKGUpe3JldHVybltlLnBvaW50cyxlLnZlcnRpY2VzLGUubGluZXMsZS5wb2x5Z29ucyxlLnRyaWFuZ2xlU3RyaXBzLGUucG9pbnREYXRhLGUuY2VsbERhdGFdfXZhciBtcj1Bbzt2YXIgdG87ZnVuY3Rpb24gU2UoKXtyZXR1cm4gdG99dmFyIHJvO2Z1bmN0aW9uIHVyKCl7cmV0dXJuIHJvfXZhciBpbztmdW5jdGlvbiBPZSgpe3JldHVybiBpb312YXIgdUE9bmV3IE1hcDtmdW5jdGlvbiBvbygpe2xldCBlPU9lKCk7cmV0dXJuIHR5cGVvZiBlPiJ1IiYmKGU9bnVsbCksZX1mdW5jdGlvbiBmcigpe2xldCBlPVNlKCk7cmV0dXJuIHR5cGVvZiBlPiJ1IiYmKGU9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxlfWZ1bmN0aW9uIFBlKCl7bGV0IGU9dXIoKTtyZXR1cm4gdHlwZW9mIGU+InUiJiYoZT17fSksZX1hc3luYyBmdW5jdGlvbiBhbyhlLEEsdCl7bGV0IHI9ZSxvPWU7aWYodHlwZW9mIGUhPSJzdHJpbmciJiYocj1uZXcgVVJMKGUuaHJlZiksbz1yLmhyZWYpLHVBLmhhcyhvKSlyZXR1cm4gdUEuZ2V0KG8pO3tsZXQgaT1hd2FpdCBycihlLEE/LnRvU3RyaW5nKCk/P2ZyKCksdD8/UGUoKSk7cmV0dXJuIHVBLnNldChvLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIG5vKGUsQSx0LHIsbyl7aWYoIWF3YWl0IGlyKCkpe2xldCBRPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChRKSxuZXcgRXJyb3IoUSl9bGV0IGk9bz8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IFE9YXdhaXQgYW8oZS50b1N0cmluZygpLG8/LnBpcGVsaW5lQmFzZVVybCxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9QZSgpKTtyZXR1cm4gZ3IoUSxBLHQscil9bGV0IHM9aSxtPW8/LnBpcGVsaW5lV29ya2VyVXJsPz9vbygpLGY9dHlwZW9mIG0hPSJzdHJpbmciJiZ0eXBlb2YgbT8uaHJlZjwidSI/bS5ocmVmOm0se3dvcmtlclByb3h5OnAsd29ya2VyOmF9PWF3YWl0IHRyKHMsZixvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9QZSgpKTtzPWE7bGV0IG49W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKFEudHlwZT09PUkuQmluYXJ5U3RyZWFtKXtsZXQgUj1RLmRhdGEuZGF0YTtuLnB1c2goUil9ZWxzZSBpZihRLnR5cGU9PT1JLkJpbmFyeUZpbGUpe2xldCBSPVEuZGF0YS5kYXRhO24ucHVzaChSKX1lbHNlIGlmKFEudHlwZT09PUkuSW1hZ2Upe2xldCBSPVEuZGF0YTtSLmRhdGEhPT1udWxsJiZuLnB1c2goLi4ubHIoUikpfWVsc2UgaWYoUS50eXBlPT09SS5NZXNoKXtsZXQgUj1RLmRhdGE7bi5wdXNoKC4uLnByKFIpKX1lbHNlIGlmKFEudHlwZT09PUkuUG9seURhdGEpe2xldCBSPVEuZGF0YTtuLnB1c2goLi4ubXIoUikpfX0pO2xldCB1PW8/LnBpcGVsaW5lQmFzZVVybD8/ZnIoKSxnPXR5cGVvZiB1IT0ic3RyaW5nIiYmdHlwZW9mIHU/LmhyZWY8InUiP3UuaHJlZjp1LGw9ciE9bnVsbD9qZShyLElyKG4sbz8ubm9Db3B5KSk6bnVsbCxCPWF3YWl0IHAucnVuUGlwZWxpbmUoZS50b1N0cmluZygpLGcsQSx0LGwsbz8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/UGUoKSk7cmV0dXJue3JldHVyblZhbHVlOkIucmV0dXJuVmFsdWUsc3Rkb3V0OkIuc3Rkb3V0LHN0ZGVycjpCLnN0ZGVycixvdXRwdXRzOkIub3V0cHV0cyx3ZWJXb3JrZXI6c319dmFyIEM9bm87dmFyIHNvPW51bGw7ZnVuY3Rpb24gY3IoKXtyZXR1cm4gc299dmFyIGdvPSIxLjMuMSIsQnI9Z287dmFyIGZBLElvPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9pbWFnZS1pb0Ake0JyfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gSEkoZSl7ZkE9ZX1mdW5jdGlvbiBFKCl7aWYodHlwZW9mIGZBPCJ1IilyZXR1cm4gZkE7bGV0IGU9U2UoKTtyZXR1cm4gdHlwZW9mIGU8InUiP2U6SW99dmFyIGNBLGxvPW51bGw7ZnVuY3Rpb24gZHIoZSl7Y0E9ZX1mdW5jdGlvbiBkKCl7aWYodHlwZW9mIGNBPCJ1IilyZXR1cm4gY0E7bGV0IGU9T2UoKTtyZXR1cm4gdHlwZW9mIGU8InUiP2U6bG99dmFyICQ9bnVsbDthc3luYyBmdW5jdGlvbiBDcigpe2xldCBlPWQoKSxBPXR5cGVvZiBlIT0ic3RyaW5nIiYmdHlwZW9mIGU/LmhyZWY8InUiP2UuaHJlZjplOyQ9YXdhaXQgcGUoQSl9ZnVuY3Rpb24gX0koZSl7JD1lfWFzeW5jIGZ1bmN0aW9uIHkoKXtpZigkIT09bnVsbClyZXR1cm4gJC50ZXJtaW5hdGVkJiZhd2FpdCBDcigpLCQ7bGV0IGU9Y3IoKTtyZXR1cm4gZSE9PW51bGw/ZTooYXdhaXQgQ3IoKSwkKX1hc3luYyBmdW5jdGlvbiBwbyhlKXtsZXQgdD0oYXdhaXQgVC5nZXQoYCR7ZX0vaW5kZXguanNvbmAse3Jlc3BvbnNlVHlwZToianNvbiJ9KSkuZGF0YSxyPWF3YWl0IFQuZ2V0KGAke2V9L2RhdGEvZGF0YS5yYXdgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIn0pO3QuZGF0YT1OKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUsci5kYXRhKTtsZXQgbz1hd2FpdCBULmdldChgJHtlfS9kYXRhL2RpcmVjdGlvbi5yYXdgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIn0pO3JldHVybiB0LmRpcmVjdGlvbj1OKEQuRmxvYXQ2NCxvLmRhdGEpLHR9dmFyIG1vPXBvO3ZhciB1bz1uZXcgTWFwKFtbImltYWdlL2pwZWciLCJqcGVnIl0sWyJpbWFnZS9wbmciLCJwbmciXSxbImltYWdlL3RpZmYiLCJ0aWZmIl0sWyJpbWFnZS94LW1zLWJtcCIsImJtcCJdLFsiaW1hZ2UveC1ibXAiLCJibXAiXSxbImltYWdlL2JtcCIsImJtcCJdLFsiYXBwbGljYXRpb24vZGljb20iLCJnZGNtIl1dKSxlZT11bzthc3luYyBmdW5jdGlvbiBmbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJwbmctcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgQkE9Zm87YXN5bmMgZnVuY3Rpb24gY28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJwbmctd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgZEE9Y287YXN5bmMgZnVuY3Rpb24gQm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibWV0YS1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBDQT1Cbzthc3luYyBmdW5jdGlvbiBDbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Im1ldGEtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgRUE9Q287YXN5bmMgZnVuY3Rpb24gRW8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0idGlmZi1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciB5QT1Fbzthc3luYyBmdW5jdGlvbiB5byhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9InRpZmYtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgUUE9eW87YXN5bmMgZnVuY3Rpb24gUW8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibmlmdGktcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgaEE9UW87YXN5bmMgZnVuY3Rpb24gaG8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJuaWZ0aS13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciB3QT1obzthc3luYyBmdW5jdGlvbiB3byhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJqcGVnLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFJBPXdvO2FzeW5jIGZ1bmN0aW9uIFJvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ianBlZy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBrQT1Sbzthc3luYyBmdW5jdGlvbiBrbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJucnJkLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIGJBPWtvO2FzeW5jIGZ1bmN0aW9uIGJvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ibnJyZC13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBEQT1ibzthc3luYyBmdW5jdGlvbiBEbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJ2dGstcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgV0E9RG87YXN5bmMgZnVuY3Rpb24gV28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJ2dGstd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgRkE9V287YXN5bmMgZnVuY3Rpb24gRm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iYm1wLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFVBPUZvO2FzeW5jIGZ1bmN0aW9uIFVvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iYm1wLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIE5BPVVvO2FzeW5jIGZ1bmN0aW9uIE5vKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImhkZjUtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgU0E9Tm87YXN5bmMgZnVuY3Rpb24gU28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJoZGY1LXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIE9BPVNvO2FzeW5jIGZ1bmN0aW9uIE9vKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Im1pbmMtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgUEE9T287YXN5bmMgZnVuY3Rpb24gUG8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJtaW5jLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIHhBPVBvO2FzeW5jIGZ1bmN0aW9uIHhvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Im1yYy1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBUQT14bzthc3luYyBmdW5jdGlvbiBUbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Im1yYy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBHQT1Ubzthc3luYyBmdW5jdGlvbiBHbyhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJsc20tcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgSkE9R287YXN5bmMgZnVuY3Rpb24gSm8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJsc20td3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgTEE9Sm87YXN5bmMgZnVuY3Rpb24gTG8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibWdoLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIE1BPUxvO2FzeW5jIGZ1bmN0aW9uIE1vKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ibWdoLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIEhBPU1vO2FzeW5jIGZ1bmN0aW9uIEhvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImJpby1yYWQtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgWUE9SG87YXN5bmMgZnVuY3Rpb24gWW8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJiaW8tcmFkLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIHFBPVlvO2FzeW5jIGZ1bmN0aW9uIHFvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdpcGwtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgS0E9cW87YXN5bmMgZnVuY3Rpb24gS28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnaXBsLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGpBPUtvO2FzeW5jIGZ1bmN0aW9uIGpvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdlLWFkdy1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciB2QT1qbzthc3luYyBmdW5jdGlvbiB2byhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImdlLWFkdy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciB6QT12bzthc3luYyBmdW5jdGlvbiB6byhlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJnZTQtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgX0E9em87YXN5bmMgZnVuY3Rpb24gX28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnZTQtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgVkE9X287YXN5bmMgZnVuY3Rpb24gVm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iZ2U1LXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFpBPVZvO2FzeW5jIGZ1bmN0aW9uIFpvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iZ2U1LXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIFhBPVpvO2FzeW5jIGZ1bmN0aW9uIFhvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdkY20tcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgJEE9WG87YXN5bmMgZnVuY3Rpb24gJG8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6SS5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnZGNtLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGV0PSRvO2FzeW5jIGZ1bmN0aW9uIGVhKGUsQT17fSl7bGV0IHQ9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10scz1yLnBhdGg7aS5wdXNoKHMpLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9InNjYW5jby1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBBdD1lYTthc3luYyBmdW5jdGlvbiBBYShlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9InNjYW5jby13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciB0dD1BYTthc3luYyBmdW5jdGlvbiB0YShlLEE9e30pe2xldCB0PVt7dHlwZTpJLkpzb25Db21wYXRpYmxlfSx7dHlwZTpJLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLHM9ci5wYXRoO2kucHVzaChzKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJmZGYtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOm4scmV0dXJuVmFsdWU6dSxzdGRlcnI6ZyxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZnIT09IiIpdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybnt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgcnQ9dGE7YXN5bmMgZnVuY3Rpb24gcmEoZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0id2FzbS1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBpdD1yYTthc3luYyBmdW5jdGlvbiBpYShlLEEsdD17fSl7bGV0IHI9W3t0eXBlOkkuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkkuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpJLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Indhc20td3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgb3Q9aWE7YXN5bmMgZnVuY3Rpb24gb2EoZSxBPXt9KXtsZXQgdD1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpJLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxzPXIucGF0aDtpLnB1c2gocyksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0id2FzbS16c3RkLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpuLHJldHVyblZhbHVlOnUsc3RkZXJyOmcsb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmZyE9PSIiKXRocm93IG5ldyBFcnJvcihnKTtyZXR1cm57d2ViV29ya2VyOm4sY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIGF0PW9hO2FzeW5jIGZ1bmN0aW9uIGFhKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0id2FzbS16c3RkLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIG50PWFhO3ZhciBuYT1uZXcgTWFwKFtbInBuZyIsW0JBLGRBXV0sWyJtZXRhIixbQ0EsRUFdXSxbInRpZmYiLFt5QSxRQV1dLFsibmlmdGkiLFtoQSx3QV1dLFsianBlZyIsW1JBLGtBXV0sWyJucnJkIixbYkEsREFdXSxbInZ0ayIsW1dBLEZBXV0sWyJibXAiLFtVQSxOQV1dLFsiaGRmNSIsW1NBLE9BXV0sWyJtbmMiLFtQQSx4QV1dLFsibXJjIixbVEEsR0FdXSxbImxzbSIsW0pBLExBXV0sWyJtZ2giLFtNQSxIQV1dLFsiYmlvUmFkIixbWUEscUFdXSxbImdpcGwiLFtLQSxqQV1dLFsiZ2VBZHciLFt2QSx6QV1dLFsiZ2U0IixbX0EsVkFdXSxbImdlNSIsW1pBLFhBXV0sWyJnZGNtIixbJEEsZXRdXSxbInNjYW5jbyIsW0F0LHR0XV0sWyJmZGYiLFtydCxudWxsXV0sWyJ3YXNtIixbaXQsb3RdXSxbIndhc21ac3RkIixbYXQsbnRdXV0pLEFlPW5hO2FzeW5jIGZ1bmN0aW9uIHNhKGUsQT17fSl7bGV0IHQ9ZS50eXBlPz8iIixyPWUubmFtZT8/ZS5wYXRoPz8iZmlsZU5hbWUiLG89dGUocikudG9Mb3dlckNhc2UoKSxpPUE/LndlYldvcmtlcixzPWU7aWYoZSBpbnN0YW5jZW9mIEJsb2Ipe2xldCBnPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtzPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGcpfX1sZXQgbT1udWxsO2lmKHQmJmVlLmhhcyh0KSltPWVlLmdldCh0KTtlbHNlIGlmKFkuaGFzKG8pKW09WS5nZXQobyk7ZWxzZSBmb3IobGV0IGcgb2YgQWUudmFsdWVzKCkpaWYoZ1swXSE9PW51bGwpe2xldHt3ZWJXb3JrZXI6bCxjb3VsZFJlYWQ6QixpbWFnZTpRfT1hd2FpdCBnWzBdKHtwYXRoOnMucGF0aCxkYXRhOnMuZGF0YS5zbGljZSgpfSx7d2ViV29ya2VyOmksaW5mb3JtYXRpb25Pbmx5OkE/LmluZm9ybWF0aW9uT25seSxub0NvcHk6QT8ubm9Db3B5fSk7aWYoaT1sLEIpcmV0dXJuIHR5cGVvZiBBPCJ1IiYmKFE9SihRLEEpKSx7d2ViV29ya2VyOmksaW1hZ2U6UX19aWYoIW0pdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIElPIGZvcjogIityKTtsZXQgcD1BZS5nZXQobSlbMF0se3dlYldvcmtlcjphLGNvdWxkUmVhZDpuLGltYWdlOnV9PWF3YWl0IHAocyx7d2ViV29ya2VyOmksaW5mb3JtYXRpb25Pbmx5OkE/LmluZm9ybWF0aW9uT25seSxub0NvcHk6QT8ubm9Db3B5fSk7aWYoaT1hLCFuKXRocm93IEVycm9yKCJDb3VsZCBub3QgcmVhZDogIityKTtyZXR1cm4gdHlwZW9mIEE8InUiJiYodT1KKHUsQSkpLHt3ZWJXb3JrZXI6aSxpbWFnZTp1fX12YXIgc3Q9c2E7dmFyIGdhPXR5cGVvZiBnbG9iYWxUaGlzLm5hdmlnYXRvcj8uaGFyZHdhcmVDb25jdXJyZW5jeT09Im51bWJlciI/Z2xvYmFsVGhpcy5uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeTo2LEVyPW5ldyBNZShnYSxzdCk7YXN5bmMgZnVuY3Rpb24gSWEoZSxBPXt9KXtsZXQgdD0xLHI9MCxvPSExO3R5cGVvZiBBPT0ib2JqZWN0IiYmKHR5cGVvZiBBLnpTcGFjaW5nPCJ1IiYmKHQ9QS56U3BhY2luZyksdHlwZW9mIEEuek9yaWdpbjwidSImJihyPUEuek9yaWdpbiksdHlwZW9mIEEuc29ydGVkU2VyaWVzPCJ1IiYmKG89QS5zb3J0ZWRTZXJpZXMpKTtsZXQgaT1BcnJheS5mcm9tKGUsYXN5bmMgZnVuY3Rpb24obil7aWYobiBpbnN0YW5jZW9mIEZpbGUpe2xldCB1PWF3YWl0IG4uYXJyYXlCdWZmZXIoKTtyZXR1cm57cGF0aDpuLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19cmV0dXJuIG59KSxzPWF3YWl0IFByb21pc2UuYWxsKGkpO298fHMuc29ydCgobix1KT0+bi5wYXRoPHUucGF0aD8tMTpuLnBhdGg+dS5wYXRoPzE6MCk7bGV0IG09W107Zm9yKGxldCBuPTA7bjxzLmxlbmd0aDtuKyspbS5wdXNoKFtzW25dLHt9XSk7bGV0IHA9KGF3YWl0IEVyLnJ1blRhc2tzKG0pLnByb21pc2UpLm1hcChuPT57bGV0IHU9bi5pbWFnZTtyZXR1cm4gdS5pbWFnZVR5cGUuZGltZW5zaW9uPTMsdS5zaXplLnB1c2goMSksdS5zcGFjaW5nLnB1c2godCksdS5vcmlnaW4ucHVzaChyKSx1LmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KDkpLHUuZGlyZWN0aW9uLmZpbGwoMCksdS5kaXJlY3Rpb25bMF09MSx1LmRpcmVjdGlvbls0XT0xLHUuZGlyZWN0aW9uWzhdPTEsdX0pLGE9SmUocCk7cmV0dXJuIHR5cGVvZiBBPT0ib2JqZWN0IiYmKHR5cGVvZiBBLmNvbXBvbmVudFR5cGU8InUifHx0eXBlb2YgQS5waXhlbFR5cGU8InUiKSYmKGE9SihhLEEpKSx7aW1hZ2U6YSx3ZWJXb3JrZXJQb29sOkVyfX12YXIgbGE9SWE7YXN5bmMgZnVuY3Rpb24gcGEoZSxBLHQ9e30pe2xldCByPWU7KHR5cGVvZiB0LmNvbXBvbmVudFR5cGU8InUifHx0eXBlb2YgdC5waXhlbFR5cGU8InUiKSYmKHI9SihlLHQpKTtsZXQgbz10Lm1pbWVUeXBlLGk9dGUoQSkudG9Mb3dlckNhc2UoKSxzPXQud2ViV29ya2VyLG09bnVsbDtpZih0eXBlb2YgbzwidSImJmVlLmhhcyhvKSltPWVlLmdldChvKTtlbHNlIGlmKFkuaGFzKGkpKW09WS5nZXQoaSk7ZWxzZSBmb3IobGV0IGwgb2YgQWUudmFsdWVzKCkpaWYobFsxXSE9PW51bGwpe2xldHt3ZWJXb3JrZXI6Qixjb3VsZFdyaXRlOlEsc2VyaWFsaXplZEltYWdlOlJ9PWF3YWl0IGxbMV0oR2UociksQSx0KTtpZihzPUIsUSlyZXR1cm57d2ViV29ya2VyOnMsc2VyaWFsaXplZEltYWdlOlJ9fWlmKCFtKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIrQSk7bGV0IHA9QWUuZ2V0KG0pWzFdLHt3ZWJXb3JrZXI6YSxjb3VsZFdyaXRlOm4sc2VyaWFsaXplZEltYWdlOnV9PWF3YWl0IHAocixBLHQpO2lmKHM9YSwhbil0aHJvdyBFcnJvcigiQ291bGQgbm90IHdyaXRlOiAiK0EpO3JldHVybnt3ZWJXb3JrZXI6cyxzZXJpYWxpemVkSW1hZ2U6dX19dmFyIG1hPXBhO2FzeW5jIGZ1bmN0aW9uIHVhKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6SS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6SS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkkuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iZmRmLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6bixyZXR1cm5WYWx1ZTp1LHN0ZGVycjpnLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJmchPT0iIil0aHJvdyBuZXcgRXJyb3IoZyk7cmV0dXJue3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGZhPXVhO3ZhciB5cj0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgSUk9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBlST0oQSx0KT0+e2Zvcih2YXIgSSBpbiB0KUlJKEEsSSx7Z2V0OnRbSV0sZW51bWVyYWJsZTohMH0pfTt2YXIgdkE9U3ltYm9sKCJDb21saW5rLnByb3h5IiksZ0k9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50Iiksckk9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLHBBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxlQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksJEE9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsb0k9e2NhbkhhbmRsZTpBPT4kQShBKSYmQVt2QV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTp0LHBvcnQyOkl9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gaUEoQSx0KSxbSSxbSV1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLG5JKEEpfX0saUk9e2NhbkhhbmRsZTpBPT4kQShBKSYmZUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgdDtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOkF9LFt0LFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LEF0PW5ldyBNYXAoW1sicHJveHkiLG9JXSxbInRocm93IixpSV1dKTtmdW5jdGlvbiBDSShBLHQpe2ZvcihsZXQgSSBvZiBBKWlmKHQ9PT1JfHxJPT09IioifHxJIGluc3RhbmNlb2YgUmVnRXhwJiZJLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaUEoQSx0PWdsb2JhbFRoaXMsST1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBlKGcpe2lmKCFnfHwhZy5kYXRhKXJldHVybjtpZighQ0koSSxnLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke2cub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpyLHR5cGU6byxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGcuZGF0YSksYT0oZy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChiKSxRO3RyeXtsZXQgQj1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixzKT0+ZltzXSxBKSxpPW4ucmVkdWNlKChmLHMpPT5mW3NdLEEpO3N3aXRjaChvKXtjYXNlIkdFVCI6UT1pO2JyZWFrO2Nhc2UiU0VUIjpCW24uc2xpY2UoLTEpWzBdXT1iKGcuZGF0YS52YWx1ZSksUT0hMDticmVhaztjYXNlIkFQUExZIjpRPWkuYXBwbHkoQixhKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBpKC4uLmEpO1E9YUkoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOnN9PW5ldyBNZXNzYWdlQ2hhbm5lbDtpQShBLHMpLFE9RkEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6UT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEIpe1E9e3ZhbHVlOkIsW2VBXTowfX1Qcm9taXNlLnJlc29sdmUoUSkuY2F0Y2goQj0+KHt2YWx1ZTpCLFtlQV06MH0pKS50aGVuKEI9PntsZXRbaSxmXT1vQShCKTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxpKSx7aWQ6cn0pLGYpLG89PT0iUkVMRUFTRSImJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGUpLHR0KHQpLHBBIGluIEEmJnR5cGVvZiBBW3BBXT09ImZ1bmN0aW9uIiYmQVtwQV0oKSl9KS5jYXRjaChCPT57bGV0W2ksZl09b0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtlQV06MH0pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZil9KX0pLHQuc3RhcnQmJnQuc3RhcnQoKX1mdW5jdGlvbiBCSShBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiB0dChBKXtCSShBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIG5JKEEsdCl7cmV0dXJuIFNBKEEsW10sdCl9ZnVuY3Rpb24gSUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIEl0KEEpe3JldHVybiBxKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e3R0KEEpfSl9dmFyIGdBPW5ldyBXZWFrTWFwLHJBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCB0PShnQS5nZXQoQSl8fDApLTE7Z0Euc2V0KEEsdCksdD09PTAmJkl0KEEpfSk7ZnVuY3Rpb24gc0koQSx0KXtsZXQgST0oZ0EuZ2V0KHQpfHwwKSsxO2dBLnNldCh0LEkpLHJBJiZyQS5yZWdpc3RlcihBLHQsQSl9ZnVuY3Rpb24gUUkoQSl7ckEmJnJBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gU0EoQSx0PVtdLEk9ZnVuY3Rpb24oKXt9KXtsZXQgZT0hMSxnPW5ldyBQcm94eShJLHtnZXQocixvKXtpZihJQShlKSxvPT09ckkpcmV0dXJuKCk9PntRSShnKSxJdChBKSxlPSEwfTtpZihvPT09InRoZW4iKXtpZih0Lmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pmd9O2xldCBuPXEoQSx7dHlwZToiR0VUIixwYXRoOnQubWFwKGE9PmEudG9TdHJpbmcoKSl9KS50aGVuKGIpO3JldHVybiBuLnRoZW4uYmluZChuKX1yZXR1cm4gU0EoQSxbLi4udCxvXSl9LHNldChyLG8sbil7SUEoZSk7bGV0W2EsUV09b0Eobik7cmV0dXJuIHEoQSx7dHlwZToiU0VUIixwYXRoOlsuLi50LG9dLm1hcChCPT5CLnRvU3RyaW5nKCkpLHZhbHVlOmF9LFEpLnRoZW4oYil9LGFwcGx5KHIsbyxuKXtJQShlKTtsZXQgYT10W3QubGVuZ3RoLTFdO2lmKGE9PT1nSSlyZXR1cm4gcShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKGIpO2lmKGE9PT0iYmluZCIpcmV0dXJuIFNBKEEsdC5zbGljZSgwLC0xKSk7bGV0W1EsQl09X0Eobik7cmV0dXJuIHEoQSx7dHlwZToiQVBQTFkiLHBhdGg6dC5tYXAoaT0+aS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6UX0sQikudGhlbihiKX0sY29uc3RydWN0KHIsbyl7SUEoZSk7bGV0W24sYV09X0Eobyk7cmV0dXJuIHEoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOnQubWFwKFE9PlEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Om59LGEpLnRoZW4oYil9fSk7cmV0dXJuIHNJKGcsQSksZ31mdW5jdGlvbiBFSShBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBfQShBKXtsZXQgdD1BLm1hcChvQSk7cmV0dXJuW3QubWFwKEk9PklbMF0pLEVJKHQubWFwKEk9PklbMV0pKV19dmFyIGV0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEZBKEEsdCl7cmV0dXJuIGV0LnNldChBLHQpLEF9ZnVuY3Rpb24gYUkoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3ZBXTohMH0pfWZ1bmN0aW9uIG9BKEEpe2ZvcihsZXRbdCxJXW9mIEF0KWlmKEkuY2FuSGFuZGxlKEEpKXtsZXRbZSxnXT1JLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6dCx2YWx1ZTplfSxnXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZXQuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gYihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBBdC5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIHEoQSx0LEkpe3JldHVybiBuZXcgUHJvbWlzZShlPT57bGV0IGc9Y0koKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobyl7IW8uZGF0YXx8IW8uZGF0YS5pZHx8by5kYXRhLmlkIT09Z3x8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZShvLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOmd9LHQpLEkpfSl9ZnVuY3Rpb24gY0koKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFcoQSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseSh0LGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpmSX09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6VUF9PU9iamVjdCxCQT0oQT0+dD0+e2xldCBJPWZJLmNhbGwodCk7cmV0dXJuIEFbSV18fChBW0ldPUkuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxVPUE9PihBPUEudG9Mb3dlckNhc2UoKSx0PT5CQSh0KT09PUEpLG5BPUE9PnQ9PnR5cGVvZiB0PT09QSx7aXNBcnJheTpLfT1BcnJheSxaPW5BKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBsSShBKXtyZXR1cm4gQSE9PW51bGwmJiFaKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIVooQS5jb25zdHJ1Y3RvcikmJkYoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIGl0PVUoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gREkoQSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz90PUFycmF5QnVmZmVyLmlzVmlldyhBKTp0PUEmJkEuYnVmZmVyJiZpdChBLmJ1ZmZlciksdH12YXIgdUk9bkEoInN0cmluZyIpLEY9bkEoImZ1bmN0aW9uIiksQ3Q9bkEoIm51bWJlciIpLHNBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsaEk9QT0+QT09PSEwfHxBPT09ITEsQ0E9QT0+e2lmKEJBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IHQ9VUEoQSk7cmV0dXJuKHQ9PT1udWxsfHx0PT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZEk9VSgiRGF0ZSIpLHlJPVUoIkZpbGUiKSx3ST1VKCJCbG9iIiksbUk9VSgiRmlsZUxpc3QiKSxwST1BPT5zQShBKSYmRihBLnBpcGUpLFNJPUE9PntsZXQgdDtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxGKEEuYXBwZW5kKSYmKCh0PUJBKEEpKT09PSJmb3JtZGF0YSJ8fHQ9PT0ib2JqZWN0IiYmRihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxGST1VKCJVUkxTZWFyY2hQYXJhbXMiKSxSST1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gVihBLHQse2FsbE93bktleXM6ST0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBlLGc7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLEsoQSkpZm9yKGU9MCxnPUEubGVuZ3RoO2U8ZztlKyspdC5jYWxsKG51bGwsQVtlXSxlLEEpO2Vsc2V7bGV0IHI9ST9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxvPXIubGVuZ3RoLG47Zm9yKGU9MDtlPG87ZSsrKW49cltlXSx0LmNhbGwobnVsbCxBW25dLG4sQSl9fWZ1bmN0aW9uIEJ0KEEsdCl7dD10LnRvTG93ZXJDYXNlKCk7bGV0IEk9T2JqZWN0LmtleXMoQSksZT1JLmxlbmd0aCxnO2Zvcig7ZS0tID4wOylpZihnPUlbZV0sdD09PWcudG9Mb3dlckNhc2UoKSlyZXR1cm4gZztyZXR1cm4gbnVsbH12YXIgbnQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxzdD1BPT4hWihBKSYmQSE9PW50O2Z1bmN0aW9uIE5BKCl7bGV0e2Nhc2VsZXNzOkF9PXN0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LEk9KGUsZyk9PntsZXQgcj1BJiZCdCh0LGcpfHxnO0NBKHRbcl0pJiZDQShlKT90W3JdPU5BKHRbcl0sZSk6Q0EoZSk/dFtyXT1OQSh7fSxlKTpLKGUpP3Rbcl09ZS5zbGljZSgpOnRbcl09ZX07Zm9yKGxldCBlPTAsZz1hcmd1bWVudHMubGVuZ3RoO2U8ZztlKyspYXJndW1lbnRzW2VdJiZWKGFyZ3VtZW50c1tlXSxJKTtyZXR1cm4gdH12YXIgTkk9KEEsdCxJLHthbGxPd25LZXlzOmV9PXt9KT0+KFYodCwoZyxyKT0+e0kmJkYoZyk/QVtyXT1XKGcsSSk6QVtyXT1nfSx7YWxsT3duS2V5czplfSksQSksVUk9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxHST0oQSx0LEksZSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLGUpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6dC5wcm90b3R5cGV9KSxJJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLEkpfSxrST0oQSx0LEksZSk9PntsZXQgZyxyLG8sbj17fTtpZih0PXR8fHt9LEE9PW51bGwpcmV0dXJuIHQ7ZG97Zm9yKGc9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSkscj1nLmxlbmd0aDtyLS0gPjA7KW89Z1tyXSwoIWV8fGUobyxBLHQpKSYmIW5bb10mJih0W29dPUFbb10sbltvXT0hMCk7QT1JIT09ITEmJlVBKEEpfXdoaWxlKEEmJighSXx8SShBLHQpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB0fSxMST0oQSx0LEkpPT57QT1TdHJpbmcoQSksKEk9PT12b2lkIDB8fEk+QS5sZW5ndGgpJiYoST1BLmxlbmd0aCksSS09dC5sZW5ndGg7bGV0IGU9QS5pbmRleE9mKHQsSSk7cmV0dXJuIGUhPT0tMSYmZT09PUl9LEpJPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihLKEEpKXJldHVybiBBO2xldCB0PUEubGVuZ3RoO2lmKCFDdCh0KSlyZXR1cm4gbnVsbDtsZXQgST1uZXcgQXJyYXkodCk7Zm9yKDt0LS0gPjA7KUlbdF09QVt0XTtyZXR1cm4gSX0sSEk9KEE9PnQ9PkEmJnQgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJlVBKFVpbnQ4QXJyYXkpKSxZST0oQSx0KT0+e2xldCBlPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksZztmb3IoOyhnPWUubmV4dCgpKSYmIWcuZG9uZTspe2xldCByPWcudmFsdWU7dC5jYWxsKEEsclswXSxyWzFdKX19LGJJPShBLHQpPT57bGV0IEksZT1bXTtmb3IoOyhJPUEuZXhlYyh0KSkhPT1udWxsOyllLnB1c2goSSk7cmV0dXJuIGV9LE1JPVUoIkhUTUxGb3JtRWxlbWVudCIpLHFJPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKEksZSxnKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpK2d9KSxydD0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9Pih0LEkpPT5BLmNhbGwodCxJKSkoT2JqZWN0LnByb3RvdHlwZSksS0k9VSgiUmVnRXhwIiksUXQ9KEEsdCk9PntsZXQgST1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxlPXt9O1YoSSwoZyxyKT0+e2xldCBvOyhvPXQoZyxyLEEpKSE9PSExJiYoZVtyXT1vfHxnKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsZSl9LE9JPUE9PntRdChBLCh0LEkpPT57aWYoRihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKEkpIT09LTEpcmV0dXJuITE7bGV0IGU9QVtJXTtpZihGKGUpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK0krIlwnIil9KX19KX0sVEk9KEEsdCk9PntsZXQgST17fSxlPWc9PntnLmZvckVhY2gocj0+e0lbcl09ITB9KX07cmV0dXJuIEsoQSk/ZShBKTplKFN0cmluZyhBKS5zcGxpdCh0KSksSX0sUEk9KCk9Pnt9LHhJPShBLHQpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTp0KSxSQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLG90PSIwMTIzNDU2Nzg5IixFdD17RElHSVQ6b3QsQUxQSEE6UkEsQUxQSEFfRElHSVQ6UkErUkEudG9VcHBlckNhc2UoKStvdH0sakk9KEE9MTYsdD1FdC5BTFBIQV9ESUdJVCk9PntsZXQgST0iIix7bGVuZ3RoOmV9PXQ7Zm9yKDtBLS07KUkrPXRbTWF0aC5yYW5kb20oKSplfDBdO3JldHVybiBJfTtmdW5jdGlvbiBXSShBKXtyZXR1cm4hIShBJiZGKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgWkk9QT0+e2xldCB0PW5ldyBBcnJheSgxMCksST0oZSxnKT0+e2lmKHNBKGUpKXtpZih0LmluZGV4T2YoZSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBlKSl7dFtnXT1lO2xldCByPUsoZSk/W106e307cmV0dXJuIFYoZSwobyxuKT0+e2xldCBhPUkobyxnKzEpOyFaKGEpJiYocltuXT1hKX0pLHRbZ109dm9pZCAwLHJ9fXJldHVybiBlfTtyZXR1cm4gSShBLDApfSxWST1VKCJBc3luY0Z1bmN0aW9uIiksWEk9QT0+QSYmKHNBKEEpfHxGKEEpKSYmRihBLnRoZW4pJiZGKEEuY2F0Y2gpLEM9e2lzQXJyYXk6Syxpc0FycmF5QnVmZmVyOml0LGlzQnVmZmVyOmxJLGlzRm9ybURhdGE6U0ksaXNBcnJheUJ1ZmZlclZpZXc6REksaXNTdHJpbmc6dUksaXNOdW1iZXI6Q3QsaXNCb29sZWFuOmhJLGlzT2JqZWN0OnNBLGlzUGxhaW5PYmplY3Q6Q0EsaXNVbmRlZmluZWQ6Wixpc0RhdGU6ZEksaXNGaWxlOnlJLGlzQmxvYjp3SSxpc1JlZ0V4cDpLSSxpc0Z1bmN0aW9uOkYsaXNTdHJlYW06cEksaXNVUkxTZWFyY2hQYXJhbXM6RkksaXNUeXBlZEFycmF5OkhJLGlzRmlsZUxpc3Q6bUksZm9yRWFjaDpWLG1lcmdlOk5BLGV4dGVuZDpOSSx0cmltOlJJLHN0cmlwQk9NOlVJLGluaGVyaXRzOkdJLHRvRmxhdE9iamVjdDprSSxraW5kT2Y6QkEsa2luZE9mVGVzdDpVLGVuZHNXaXRoOkxJLHRvQXJyYXk6SkksZm9yRWFjaEVudHJ5OllJLG1hdGNoQWxsOmJJLGlzSFRNTEZvcm06TUksaGFzT3duUHJvcGVydHk6cnQsaGFzT3duUHJvcDpydCxyZWR1Y2VEZXNjcmlwdG9yczpRdCxmcmVlemVNZXRob2RzOk9JLHRvT2JqZWN0U2V0OlRJLHRvQ2FtZWxDYXNlOnFJLG5vb3A6UEksdG9GaW5pdGVOdW1iZXI6eEksZmluZEtleTpCdCxnbG9iYWw6bnQsaXNDb250ZXh0RGVmaW5lZDpzdCxBTFBIQUJFVDpFdCxnZW5lcmF0ZVN0cmluZzpqSSxpc1NwZWNDb21wbGlhbnRGb3JtOldJLHRvSlNPTk9iamVjdDpaSSxpc0FzeW5jRm46VkksaXNUaGVuYWJsZTpYSX07ZnVuY3Rpb24gTyhBLHQsSSxlLGcpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxJJiYodGhpcy5jb25maWc9SSksZSYmKHRoaXMucmVxdWVzdD1lKSxnJiYodGhpcy5yZXNwb25zZT1nKX1DLmluaGVyaXRzKE8sRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpDLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBhdD1PLnByb3RvdHlwZSxjdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntjdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLGN0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXQsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Ty5mcm9tPShBLHQsSSxlLGcscik9PntsZXQgbz1PYmplY3QuY3JlYXRlKGF0KTtyZXR1cm4gQy50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKGEpe3JldHVybiBhIT09RXJyb3IucHJvdG90eXBlfSxuPT5uIT09ImlzQXhpb3NFcnJvciIpLE8uY2FsbChvLEEubWVzc2FnZSx0LEksZSxnKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxyJiZPYmplY3QuYXNzaWduKG8sciksb307dmFyIGw9Tzt2YXIgUUE9bnVsbDtmdW5jdGlvbiBHQShBKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KEEpfHxDLmlzQXJyYXkoQSl9ZnVuY3Rpb24gbHQoQSl7cmV0dXJuIEMuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gZnQoQSx0LEkpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihnLHIpe3JldHVybiBnPWx0KGcpLCFJJiZyPyJbIitnKyJdIjpnfSkuam9pbihJPyIuIjoiIik6dH1mdW5jdGlvbiB6SShBKXtyZXR1cm4gQy5pc0FycmF5KEEpJiYhQS5zb21lKEdBKX12YXIgX0k9Qy50b0ZsYXRPYmplY3QoQyx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHZJKEEsdCxJKXtpZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhRQXx8Rm9ybURhdGEpLEk9Qy50b0ZsYXRPYmplY3QoSSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIUMuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgZT1JLm1ldGFUb2tlbnMsZz1JLnZpc2l0b3J8fEIscj1JLmRvdHMsbz1JLmluZGV4ZXMsYT0oSS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZDLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIUMuaXNGdW5jdGlvbihnKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIFEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoQy5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYSYmQy5pc0Jsb2IoRSkpdGhyb3cgbmV3IGwoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEMuaXNBcnJheUJ1ZmZlcihFKXx8Qy5pc1R5cGVkQXJyYXkoRSk/YSYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIEIoRSxjLHUpe2xldCB5PUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoQy5lbmRzV2l0aChjLCJ7fSIpKWM9ZT9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKEMuaXNBcnJheShFKSYmekkoRSl8fChDLmlzRmlsZUxpc3QoRSl8fEMuZW5kc1dpdGgoYywiW10iKSkmJih5PUMudG9BcnJheShFKSkpcmV0dXJuIGM9bHQoYykseS5mb3JFYWNoKGZ1bmN0aW9uKE4sdEkpeyEoQy5pc1VuZGVmaW5lZChOKXx8Tj09PW51bGwpJiZ0LmFwcGVuZChvPT09ITA/ZnQoW2NdLHRJLHIpOm89PT1udWxsP2M6YysiW10iLFEoTikpfSksITF9cmV0dXJuIEdBKEUpPyEwOih0LmFwcGVuZChmdCh1LGMsciksUShFKSksITEpfWxldCBpPVtdLGY9T2JqZWN0LmFzc2lnbihfSSx7ZGVmYXVsdFZpc2l0b3I6Qixjb252ZXJ0VmFsdWU6USxpc1Zpc2l0YWJsZTpHQX0pO2Z1bmN0aW9uIHMoRSxjKXtpZighQy5pc1VuZGVmaW5lZChFKSl7aWYoaS5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTtpLnB1c2goRSksQy5mb3JFYWNoKEUsZnVuY3Rpb24oeSxSKXsoIShDLmlzVW5kZWZpbmVkKHkpfHx5PT09bnVsbCkmJmcuY2FsbCh0LHksQy5pc1N0cmluZyhSKT9SLnRyaW0oKTpSLGMsZikpPT09ITAmJnMoeSxjP2MuY29uY2F0KFIpOltSXSl9KSxpLnBvcCgpfX1pZighQy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIHMoQSksdH12YXIgSj12STtmdW5jdGlvbiBEdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1bmN0aW9uIHV0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmSihBLHRoaXMsdCl9dmFyIGh0PXV0LnByb3RvdHlwZTtodC5hcHBlbmQ9ZnVuY3Rpb24odCxJKXt0aGlzLl9wYWlycy5wdXNoKFt0LEldKX07aHQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IEk9dD9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsZSxEdCl9OkR0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIEkoZ1swXSkrIj0iK0koZ1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciBFQT11dDtmdW5jdGlvbiAkSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiBYKEEsdCxJKXtpZighdClyZXR1cm4gQTtsZXQgZT1JJiZJLmVuY29kZXx8JEksZz1JJiZJLnNlcmlhbGl6ZSxyO2lmKGc/cj1nKHQsSSk6cj1DLmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcgRUEodCxJKS50b1N0cmluZyhlKSxyKXtsZXQgbz1BLmluZGV4T2YoIiUyMyIpO28hPT0tMSYmKEE9QS5zbGljZSgwLG8pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStyfXJldHVybiBBfXZhciBrQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsSSxlKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDpJLHN5bmNocm9ub3VzOmU/ZS5zeW5jaHJvbm91czohMSxydW5XaGVuOmU/ZS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7Qy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oZSl7ZSE9PW51bGwmJnQoZSl9KX19LExBPWtBO3ZhciBhQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGR0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpFQTt2YXIgeXQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciB3dD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBtdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpkdCxGb3JtRGF0YTp5dCxCbG9iOnd0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIEpBPXt9O2VJKEpBLHtoYXNCcm93c2VyRW52OigpPT5wdCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFlLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+dGV9KTt2YXIgcHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsQWU9KEE9PnB0JiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksdGU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciB3PXsuLi5KQSwuLi5tdH07ZnVuY3Rpb24gSEEoQSx0KXtyZXR1cm4gSihBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oSSxlLGcscil7cmV0dXJuIHcuaXNOb2RlJiZDLmlzQnVmZmVyKEkpPyh0aGlzLmFwcGVuZChlLEkudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6ci5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gSWUoQSl7cmV0dXJuIEMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBlZShBKXtsZXQgdD17fSxJPU9iamVjdC5rZXlzKEEpLGUsZz1JLmxlbmd0aCxyO2ZvcihlPTA7ZTxnO2UrKylyPUlbZV0sdFtyXT1BW3JdO3JldHVybiB0fWZ1bmN0aW9uIGdlKEEpe2Z1bmN0aW9uIHQoSSxlLGcscil7bGV0IG89SVtyKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgbj1OdW1iZXIuaXNGaW5pdGUoK28pLGE9cj49SS5sZW5ndGg7cmV0dXJuIG89IW8mJkMuaXNBcnJheShnKT9nLmxlbmd0aDpvLGE/KEMuaGFzT3duUHJvcChnLG8pP2dbb109W2dbb10sZV06Z1tvXT1lLCFuKTooKCFnW29dfHwhQy5pc09iamVjdChnW29dKSkmJihnW29dPVtdKSx0KEksZSxnW29dLHIpJiZDLmlzQXJyYXkoZ1tvXSkmJihnW29dPWVlKGdbb10pKSwhbil9aWYoQy5pc0Zvcm1EYXRhKEEpJiZDLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IEk9e307cmV0dXJuIEMuZm9yRWFjaEVudHJ5KEEsKGUsZyk9Pnt0KEllKGUpLGcsSSwwKX0pLEl9cmV0dXJuIG51bGx9dmFyIGNBPWdlO2Z1bmN0aW9uIHJlKEEsdCxJKXtpZihDLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksQy50cmltKEEpfWNhdGNoKGUpe2lmKGUubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgZX1yZXR1cm4oSXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBZQT17dHJhbnNpdGlvbmFsOmFBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxJKXtsZXQgZT1JLmdldENvbnRlbnRUeXBlKCl8fCIiLGc9ZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEscj1DLmlzT2JqZWN0KHQpO2lmKHImJkMuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxDLmlzRm9ybURhdGEodCkpcmV0dXJuIGc/SlNPTi5zdHJpbmdpZnkoY0EodCkpOnQ7aWYoQy5pc0FycmF5QnVmZmVyKHQpfHxDLmlzQnVmZmVyKHQpfHxDLmlzU3RyZWFtKHQpfHxDLmlzRmlsZSh0KXx8Qy5pc0Jsb2IodCkpcmV0dXJuIHQ7aWYoQy5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoQy5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gSS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IG47aWYocil7aWYoZS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gSEEodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChuPUMuaXNGaWxlTGlzdCh0KSl8fGUuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEoobj97ImZpbGVzW10iOnR9OnQsYSYmbmV3IGEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiByfHxnPyhJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSkscmUodCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IEk9dGhpcy50cmFuc2l0aW9uYWx8fFlBLnRyYW5zaXRpb25hbCxlPUkmJkkuZm9yY2VkSlNPTlBhcnNpbmcsZz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZih0JiZDLmlzU3RyaW5nKHQpJiYoZSYmIXRoaXMucmVzcG9uc2VUeXBlfHxnKSl7bGV0IG89IShJJiZJLnNpbGVudEpTT05QYXJzaW5nKSYmZzt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2gobil7aWYobyl0aHJvdyBuLm5hbWU9PT0iU3ludGF4RXJyb3IiP2wuZnJvbShuLGwuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bn19cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57WUEuaGVhZGVyc1tBXT17fX0pO3ZhciBUPVlBO3ZhciBvZT1DLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLFN0PUE9PntsZXQgdD17fSxJLGUsZztyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihvKXtnPW8uaW5kZXhPZigiOiIpLEk9by5zdWJzdHJpbmcoMCxnKS50cmltKCkudG9Mb3dlckNhc2UoKSxlPW8uc3Vic3RyaW5nKGcrMSkudHJpbSgpLCEoIUl8fHRbSV0mJm9lW0ldKSYmKEk9PT0ic2V0LWNvb2tpZSI/dFtJXT90W0ldLnB1c2goZSk6dFtJXT1bZV06dFtJXT10W0ldP3RbSV0rIiwgIitlOmUpfSksdH07dmFyIEZ0PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24geihBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpDLmlzQXJyYXkoQSk/QS5tYXAoZkEpOlN0cmluZyhBKX1mdW5jdGlvbiBpZShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLEk9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxlO2Zvcig7ZT1JLmV4ZWMoQSk7KXRbZVsxXV09ZVsyXTtyZXR1cm4gdH12YXIgQ2U9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gYkEoQSx0LEksZSxnKXtpZihDLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHQsSSk7aWYoZyYmKHQ9SSksISFDLmlzU3RyaW5nKHQpKXtpZihDLmlzU3RyaW5nKGUpKXJldHVybiB0LmluZGV4T2YoZSkhPT0tMTtpZihDLmlzUmVnRXhwKGUpKXJldHVybiBlLnRlc3QodCl9fWZ1bmN0aW9uIEJlKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxJLGUpPT5JLnRvVXBwZXJDYXNlKCkrZSl9ZnVuY3Rpb24gbmUoQSx0KXtsZXQgST1DLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLGUrSSx7dmFsdWU6ZnVuY3Rpb24oZyxyLG8pe3JldHVybiB0aGlzW2VdLmNhbGwodGhpcyx0LGcscixvKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxJLGUpe2xldCBnPXRoaXM7ZnVuY3Rpb24gcihuLGEsUSl7bGV0IEI9eihhKTtpZighQil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGk9Qy5maW5kS2V5KGcsQik7KCFpfHxnW2ldPT09dm9pZCAwfHxRPT09ITB8fFE9PT12b2lkIDAmJmdbaV0hPT0hMSkmJihnW2l8fGFdPWZBKG4pKX1sZXQgbz0obixhKT0+Qy5mb3JFYWNoKG4sKFEsQik9PnIoUSxCLGEpKTtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKHQsSSk6Qy5pc1N0cmluZyh0KSYmKHQ9dC50cmltKCkpJiYhQ2UodCk/byhTdCh0KSxJKTp0IT1udWxsJiZyKEksdCxlKSx0aGlzfWdldCh0LEkpe2lmKHQ9eih0KSx0KXtsZXQgZT1DLmZpbmRLZXkodGhpcyx0KTtpZihlKXtsZXQgZz10aGlzW2VdO2lmKCFJKXJldHVybiBnO2lmKEk9PT0hMClyZXR1cm4gaWUoZyk7aWYoQy5pc0Z1bmN0aW9uKEkpKXJldHVybiBJLmNhbGwodGhpcyxnLGUpO2lmKEMuaXNSZWdFeHAoSSkpcmV0dXJuIEkuZXhlYyhnKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKGUmJnRoaXNbZV0hPT12b2lkIDAmJighSXx8YkEodGhpcyx0aGlzW2VdLGUsSSkpKX1yZXR1cm4hMX1kZWxldGUodCxJKXtsZXQgZT10aGlzLGc9ITE7ZnVuY3Rpb24gcihvKXtpZihvPXoobyksbyl7bGV0IG49Qy5maW5kS2V5KGUsbyk7biYmKCFJfHxiQShlLGVbbl0sbixJKSkmJihkZWxldGUgZVtuXSxnPSEwKX19cmV0dXJuIEMuaXNBcnJheSh0KT90LmZvckVhY2gocik6cih0KSxnfWNsZWFyKHQpe2xldCBJPU9iamVjdC5rZXlzKHRoaXMpLGU9SS5sZW5ndGgsZz0hMTtmb3IoO2UtLTspe2xldCByPUlbZV07KCF0fHxiQSh0aGlzLHRoaXNbcl0scix0LCEwKSkmJihkZWxldGUgdGhpc1tyXSxnPSEwKX1yZXR1cm4gZ31ub3JtYWxpemUodCl7bGV0IEk9dGhpcyxlPXt9O3JldHVybiBDLmZvckVhY2godGhpcywoZyxyKT0+e2xldCBvPUMuZmluZEtleShlLHIpO2lmKG8pe0lbb109ZkEoZyksZGVsZXRlIElbcl07cmV0dXJufWxldCBuPXQ/QmUocik6U3RyaW5nKHIpLnRyaW0oKTtuIT09ciYmZGVsZXRlIElbcl0sSVtuXT1mQShnKSxlW25dPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChlLGcpPT57ZSE9bnVsbCYmZSE9PSExJiYoSVtnXT10JiZDLmlzQXJyYXkoZSk/ZS5qb2luKCIsICIpOmUpfSksSX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxJXSk9PnQrIjogIitJKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5JKXtsZXQgZT1uZXcgdGhpcyh0KTtyZXR1cm4gSS5mb3JFYWNoKGc9PmUuc2V0KGcpKSxlfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgZT0odGhpc1tGdF09dGhpc1tGdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxnPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIobyl7bGV0IG49eihvKTtlW25dfHwobmUoZyxvKSxlW25dPSEwKX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLHRoaXN9fTtQLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtDLnJlZHVjZURlc2NyaXB0b3JzKFAucHJvdG90eXBlLCh7dmFsdWU6QX0sdCk9PntsZXQgST10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChlKXt0aGlzW0ldPWV9fX0pO0MuZnJlZXplTWV0aG9kcyhQKTt2YXIgbT1QO2Z1bmN0aW9uIF8oQSx0KXtsZXQgST10aGlzfHxULGU9dHx8SSxnPW0uZnJvbShlLmhlYWRlcnMpLHI9ZS5kYXRhO3JldHVybiBDLmZvckVhY2goQSxmdW5jdGlvbihuKXtyPW4uY2FsbChJLHIsZy5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxnLm5vcm1hbGl6ZSgpLHJ9ZnVuY3Rpb24gdihBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFJ0KEEsdCxJKXtsLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGwuRVJSX0NBTkNFTEVELHQsSSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1DLmluaGVyaXRzKFJ0LGwse19fQ0FOQ0VMX186ITB9KTt2YXIgSD1SdDtmdW5jdGlvbiBNQShBLHQsSSl7bGV0IGU9SS5jb25maWcudmFsaWRhdGVTdGF0dXM7IUkuc3RhdHVzfHwhZXx8ZShJLnN0YXR1cyk/QShJKTp0KG5ldyBsKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrSS5zdGF0dXMsW2wuRVJSX0JBRF9SRVFVRVNULGwuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihJLnN0YXR1cy8xMDApLTRdLEkuY29uZmlnLEkucmVxdWVzdCxJKSl9dmFyIE50PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsSSxlLGcscil7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07Qy5pc051bWJlcihJKSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoSSkudG9HTVRTdHJpbmcoKSksQy5pc1N0cmluZyhlKSYmby5wdXNoKCJwYXRoPSIrZSksQy5pc1N0cmluZyhnKSYmby5wdXNoKCJkb21haW49IitnKSxyPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gcUEoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gS0EoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uICQoQSx0KXtyZXR1cm4gQSYmIXFBKHQpP0tBKEEsdCk6dH12YXIgVXQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLGU7ZnVuY3Rpb24gZyhyKXtsZXQgbz1yO3JldHVybiB0JiYoSS5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLG89SS5ocmVmKSxJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbykse2hyZWY6SS5ocmVmLHByb3RvY29sOkkucHJvdG9jb2w/SS5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6SS5ob3N0LHNlYXJjaDpJLnNlYXJjaD9JLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDpJLmhhc2g/SS5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTpJLmhvc3RuYW1lLHBvcnQ6SS5wb3J0LHBhdGhuYW1lOkkucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP0kucGF0aG5hbWU6Ii8iK0kucGF0aG5hbWV9fXJldHVybiBlPWcod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG8pe2xldCBuPUMuaXNTdHJpbmcobyk/ZyhvKTpvO3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiBPQShBKXtsZXQgdD0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gdCYmdFsxXXx8IiJ9ZnVuY3Rpb24gc2UoQSx0KXtBPUF8fDEwO2xldCBJPW5ldyBBcnJheShBKSxlPW5ldyBBcnJheShBKSxnPTAscj0wLG87cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjFlMyxmdW5jdGlvbihhKXtsZXQgUT1EYXRlLm5vdygpLEI9ZVtyXTtvfHwobz1RKSxJW2ddPWEsZVtnXT1RO2xldCBpPXIsZj0wO2Zvcig7aSE9PWc7KWYrPUlbaSsrXSxpPWklQTtpZihnPShnKzEpJUEsZz09PXImJihyPShyKzEpJUEpLFEtbzx0KXJldHVybjtsZXQgcz1CJiZRLUI7cmV0dXJuIHM/TWF0aC5yb3VuZChmKjFlMy9zKTp2b2lkIDB9fXZhciBHdD1zZTtmdW5jdGlvbiBrdChBLHQpe2xldCBJPTAsZT1HdCg1MCwyNTApO3JldHVybiBnPT57bGV0IHI9Zy5sb2FkZWQsbz1nLmxlbmd0aENvbXB1dGFibGU/Zy50b3RhbDp2b2lkIDAsbj1yLUksYT1lKG4pLFE9cjw9bztJPXI7bGV0IEI9e2xvYWRlZDpyLHRvdGFsOm8scHJvZ3Jlc3M6bz9yL286dm9pZCAwLGJ5dGVzOm4scmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJm8mJlE/KG8tcikvYTp2b2lkIDAsZXZlbnQ6Z307Qlt0PyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEoQil9fXZhciBRZT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLEx0PVFlJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSSxlKXtsZXQgZz1BLmRhdGEscj1tLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm8sd2l0aFhTUkZUb2tlbjpufT1BLGE7ZnVuY3Rpb24gUSgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQjtpZihDLmlzRm9ybURhdGEoZykpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilyLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChCPXIuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4udV09Qj9CLnNwbGl0KCI7IikubWFwKHk9PnkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107ci5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLnVdLmpvaW4oIjsgIikpfX1sZXQgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgYz1BLmF1dGgudXNlcm5hbWV8fCIiLHU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShjKyI6Iit1KSl9bGV0IGY9JChBLmJhc2VVUkwsQS51cmwpO2kub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoZixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxpLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIHMoKXtpZighaSlyZXR1cm47bGV0IGM9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gaSYmaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkseT17ZGF0YTohb3x8bz09PSJ0ZXh0Inx8bz09PSJqc29uIj9pLnJlc3BvbnNlVGV4dDppLnJlc3BvbnNlLHN0YXR1czppLnN0YXR1cyxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDppfTtNQShmdW5jdGlvbihOKXtJKE4pLFEoKX0sZnVuY3Rpb24oTil7ZShOKSxRKCl9LHkpLGk9bnVsbH1pZigib25sb2FkZW5kImluIGk/aS5vbmxvYWRlbmQ9czppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFpfHxpLnJlYWR5U3RhdGUhPT00fHxpLnN0YXR1cz09PTAmJiEoaS5yZXNwb25zZVVSTCYmaS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocyl9LGkub25hYm9ydD1mdW5jdGlvbigpe2kmJihlKG5ldyBsKCJSZXF1ZXN0IGFib3J0ZWQiLGwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbCl9LGkub25lcnJvcj1mdW5jdGlvbigpe2UobmV3IGwoIk5ldHdvcmsgRXJyb3IiLGwuRVJSX05FVFdPUkssQSxpKSksaT1udWxsfSxpLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIix5PUEudHJhbnNpdGlvbmFsfHxhQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksZShuZXcgbCh1LHkuY2xhcmlmeVRpbWVvdXRFcnJvcj9sLkVUSU1FRE9VVDpsLkVDT05OQUJPUlRFRCxBLGkpKSxpPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobiYmQy5pc0Z1bmN0aW9uKG4pJiYobj1uKEEpKSxufHxuIT09ITEmJlV0KGYpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmTnQucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfWc9PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gaSYmQy5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24odSx5KXtpLnNldFJlcXVlc3RIZWFkZXIoeSx1KX0pLEMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoaS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksbyYmbyE9PSJqc29uIiYmKGkucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS51cGxvYWQmJmkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixrdChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYT1jPT57aSYmKGUoIWN8fGMudHlwZT9uZXcgSChudWxsLEEsaSk6YyksaS5hYm9ydCgpLGk9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9hKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IEU9T0EoZik7aWYoRSYmdy5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtlKG5ldyBsKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGwuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59aS5zZW5kKGd8fG51bGwpfSl9O3ZhciBUQT17aHR0cDpRQSx4aHI6THR9O0MuZm9yRWFjaChUQSwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBKdD1BPT5gLSAke0F9YCxFZT1BPT5DLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbEE9e2dldEFkYXB0ZXI6QT0+e0E9Qy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxJLGUsZz17fTtmb3IobGV0IHI9MDtyPHQ7cisrKXtJPUFbcl07bGV0IG87aWYoZT1JLCFFZShJKSYmKGU9VEFbKG89U3RyaW5nKEkpKS50b0xvd2VyQ2FzZSgpXSxlPT09dm9pZCAwKSl0aHJvdyBuZXcgbChgVW5rbm93biBhZGFwdGVyIFwnJHtvfVwnYCk7aWYoZSlicmVhaztnW298fCIlMjMiK3JdPWV9aWYoIWUpe2xldCByPU9iamVjdC5lbnRyaWVzKGcpLm1hcCgoW24sYV0pPT5gYWRhcHRlciAke259IGArKGE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPXQ/ci5sZW5ndGg+MT9gc2luY2UgOiUwQWArci5tYXAoSnQpLmpvaW4oYCUwQWApOiIgIitKdChyWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBsKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIGV9LGFkYXB0ZXJzOlRBfTtmdW5jdGlvbiBQQShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSChudWxsLEEpfWZ1bmN0aW9uIERBKEEpe3JldHVybiBQQShBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLGxBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxULmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIFBBKEEpLGUuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUpLGUuaGVhZGVycz1tLmZyb20oZS5oZWFkZXJzKSxlfSxmdW5jdGlvbihlKXtyZXR1cm4gdihlKXx8KFBBKEEpLGUmJmUucmVzcG9uc2UmJihlLnJlc3BvbnNlLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxlLnJlc3BvbnNlKSxlLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKGUucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChlKX0pfXZhciBIdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgST17fTtmdW5jdGlvbiBlKFEsQixpKXtyZXR1cm4gQy5pc1BsYWluT2JqZWN0KFEpJiZDLmlzUGxhaW5PYmplY3QoQik/Qy5tZXJnZS5jYWxsKHtjYXNlbGVzczppfSxRLEIpOkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlKHt9LEIpOkMuaXNBcnJheShCKT9CLnNsaWNlKCk6Qn1mdW5jdGlvbiBnKFEsQixpKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSxpKX1lbHNlIHJldHVybiBlKFEsQixpKX1mdW5jdGlvbiByKFEsQil7aWYoIUMuaXNVbmRlZmluZWQoQikpcmV0dXJuIGUodm9pZCAwLEIpfWZ1bmN0aW9uIG8oUSxCKXtpZihDLmlzVW5kZWZpbmVkKEIpKXtpZighQy5pc1VuZGVmaW5lZChRKSlyZXR1cm4gZSh2b2lkIDAsUSl9ZWxzZSByZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbihRLEIsaSl7aWYoaSBpbiB0KXJldHVybiBlKFEsQik7aWYoaSBpbiBBKXJldHVybiBlKHZvaWQgMCxRKX1sZXQgYT17dXJsOnIsbWV0aG9kOnIsZGF0YTpyLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpuLGhlYWRlcnM6KFEsQik9PmcoSHQoUSksSHQoQiksITApfTtyZXR1cm4gQy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24oQil7bGV0IGk9YVtCXXx8ZyxmPWkoQVtCXSx0W0JdLEIpO0MuaXNVbmRlZmluZWQoZikmJmkhPT1ufHwoSVtCXT1mKX0pLEl9dmFyIHVBPSIxLjYuOCI7dmFyIHhBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSx0KT0+e3hBW0FdPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09PUF8fCJhIisodDwxPyJuICI6IiAiKStBfX0pO3ZhciBZdD17fTt4QS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxJLGUpe2Z1bmN0aW9uIGcocixvKXtyZXR1cm4iW0F4aW9zIHYiK3VBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK3IrIlwnIitvKyhlPyIuICIrZToiIil9cmV0dXJuKHIsbyxuKT0+e2lmKHQ9PT0hMSl0aHJvdyBuZXcgbChnKG8sIiBoYXMgYmVlbiByZW1vdmVkIisoST8iIGluICIrSToiIikpLGwuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBJJiYhWXRbb10mJihZdFtvXT0hMCxjb25zb2xlLndhcm4oZyhvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitJKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLHQ/dChyLG8sbik6ITB9fTtmdW5jdGlvbiBhZShBLHQsSSl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBsKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixsLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxnPWUubGVuZ3RoO2Zvcig7Zy0tID4wOyl7bGV0IHI9ZVtnXSxvPXRbcl07aWYobyl7bGV0IG49QVtyXSxhPW49PT12b2lkIDB8fG8obixyLEEpO2lmKGEhPT0hMCl0aHJvdyBuZXcgbCgib3B0aW9uICIrcisiIG11c3QgYmUgIithLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKEkhPT0hMCl0aHJvdyBuZXcgbCgiVW5rbm93biBvcHRpb24gIityLGwuRVJSX0JBRF9PUFRJT04pfX12YXIgaEE9e2Fzc2VydE9wdGlvbnM6YWUsdmFsaWRhdG9yczp4QX07dmFyIFk9aEEudmFsaWRhdG9ycyx4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdHM9dCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgTEEscmVzcG9uc2U6bmV3IExBfX1hc3luYyByZXF1ZXN0KHQsSSl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KHQsSSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgZztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShnPXt9KTpnPW5ldyBFcnJvcjtsZXQgcj1nLnN0YWNrP2cuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7ZS5zdGFjaz9yJiYhU3RyaW5nKGUuc3RhY2spLmVuZHNXaXRoKHIucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihlLnN0YWNrKz1gJTBBYCtyKTplLnN0YWNrPXJ9dGhyb3cgZX19X3JlcXVlc3QodCxJKXt0eXBlb2YgdD09InN0cmluZyI/KEk9SXx8e30sSS51cmw9dCk6ST10fHx7fSxJPWsodGhpcy5kZWZhdWx0cyxJKTtsZXR7dHJhbnNpdGlvbmFsOmUscGFyYW1zU2VyaWFsaXplcjpnLGhlYWRlcnM6cn09STtlIT09dm9pZCAwJiZoQS5hc3NlcnRPcHRpb25zKGUse3NpbGVudEpTT05QYXJzaW5nOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOlkudHJhbnNpdGlvbmFsKFkuYm9vbGVhbil9LCExKSxnIT1udWxsJiYoQy5pc0Z1bmN0aW9uKGcpP0kucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOmd9OmhBLmFzc2VydE9wdGlvbnMoZyx7ZW5jb2RlOlkuZnVuY3Rpb24sc2VyaWFsaXplOlkuZnVuY3Rpb259LCEwKSksSS5tZXRob2Q9KEkubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89ciYmQy5tZXJnZShyLmNvbW1vbixyW0kubWV0aG9kXSk7ciYmQy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgcltFXX0pLEkuaGVhZGVycz1tLmNvbmNhdChvLHIpO2xldCBuPVtdLGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3R5cGVvZiBjLnJ1bldoZW49PSJmdW5jdGlvbiImJmMucnVuV2hlbihJKT09PSExfHwoYT1hJiZjLnN5bmNocm9ub3VzLG4udW5zaGlmdChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKSl9KTtsZXQgUT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGMpe1EucHVzaChjLmZ1bGZpbGxlZCxjLnJlamVjdGVkKX0pO2xldCBCLGk9MCxmO2lmKCFhKXtsZXQgRT1bREEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxuKSxFLnB1c2guYXBwbHkoRSxRKSxmPUUubGVuZ3RoLEI9UHJvbWlzZS5yZXNvbHZlKEkpO2k8ZjspQj1CLnRoZW4oRVtpKytdLEVbaSsrXSk7cmV0dXJuIEJ9Zj1uLmxlbmd0aDtsZXQgcz1JO2ZvcihpPTA7aTxmOyl7bGV0IEU9bltpKytdLGM9bltpKytdO3RyeXtzPUUocyl9Y2F0Y2godSl7Yy5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXtCPURBLmNhbGwodGhpcyxzKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKGk9MCxmPVEubGVuZ3RoO2k8ZjspQj1CLnRoZW4oUVtpKytdLFFbaSsrXSk7cmV0dXJuIEJ9Z2V0VXJpKHQpe3Q9ayh0aGlzLmRlZmF1bHRzLHQpO2xldCBJPSQodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gWChJLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe3gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKEksZSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKGV8fHt9LHttZXRob2Q6dCx1cmw6SSxkYXRhOihlfHx7fSkuZGF0YX0pKX19KTtDLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBJKGUpe3JldHVybiBmdW5jdGlvbihyLG8sbil7cmV0dXJuIHRoaXMucmVxdWVzdChrKG58fHt9LHttZXRob2Q6dCxoZWFkZXJzOmU/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTpvfSkpfX14LnByb3RvdHlwZVt0XT1JKCkseC5wcm90b3R5cGVbdCsiRm9ybSJdPUkoITApfSk7dmFyIEFBPXg7dmFyIGpBPWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBJO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXtJPXJ9KTtsZXQgZT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGc9PntpZighZS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1lLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOyllLl9saXN0ZW5lcnNbcl0oZyk7ZS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1nPT57bGV0IHIsbz1uZXcgUHJvbWlzZShuPT57ZS5zdWJzY3JpYmUobikscj1ufSkudGhlbihnKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKHIpfSxvfSx0KGZ1bmN0aW9uKHIsbyxuKXtlLnJlYXNvbnx8KGUucmVhc29uPW5ldyBIKHIsbyxuKSxJKGUucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IEk9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7SSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEksMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihnKXt0PWd9KSxjYW5jZWw6dH19fSxidD1qQTtmdW5jdGlvbiBXQShBKXtyZXR1cm4gZnVuY3Rpb24oSSl7cmV0dXJuIEEuYXBwbHkobnVsbCxJKX19ZnVuY3Rpb24gWkEoQSl7cmV0dXJuIEMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFZBPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhWQSkuZm9yRWFjaCgoW0EsdF0pPT57VkFbdF09QX0pO3ZhciBNdD1WQTtmdW5jdGlvbiBxdChBKXtsZXQgdD1uZXcgQUEoQSksST1XKEFBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBDLmV4dGVuZChJLEFBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksQy5leHRlbmQoSSx0LG51bGwse2FsbE93bktleXM6ITB9KSxJLmNyZWF0ZT1mdW5jdGlvbihnKXtyZXR1cm4gcXQoayhBLGcpKX0sSX12YXIgaD1xdChUKTtoLkF4aW9zPUFBO2guQ2FuY2VsZWRFcnJvcj1IO2guQ2FuY2VsVG9rZW49YnQ7aC5pc0NhbmNlbD12O2guVkVSU0lPTj11QTtoLnRvRm9ybURhdGE9SjtoLkF4aW9zRXJyb3I9bDtoLkNhbmNlbD1oLkNhbmNlbGVkRXJyb3I7aC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtoLnNwcmVhZD1XQTtoLmlzQXhpb3NFcnJvcj1aQTtoLm1lcmdlQ29uZmlnPWs7aC5BeGlvc0hlYWRlcnM9bTtoLmZvcm1Ub0pTT049QT0+Y0EoQy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtoLmdldEFkYXB0ZXI9bEEuZ2V0QWRhcHRlcjtoLkh0dHBTdGF0dXNDb2RlPU10O2guZGVmYXVsdD1oO3ZhciBkQT1oO3ZhcntBeGlvczppbyxBeGlvc0Vycm9yOkNvLENhbmNlbGVkRXJyb3I6Qm8saXNDYW5jZWw6bm8sQ2FuY2VsVG9rZW46c28sVkVSU0lPTjpRbyxhbGw6RW8sQ2FuY2VsOmFvLGlzQXhpb3NFcnJvcjpjbyxzcHJlYWQ6Zm8sdG9Gb3JtRGF0YTpsbyxBeGlvc0hlYWRlcnM6RG8sSHR0cFN0YXR1c0NvZGU6dW8sZm9ybVRvSlNPTjpobyxnZXRBZGFwdGVyOnlvLG1lcmdlQ29uZmlnOndvfT1kQTt2YXIgdEEsTCx6QSxYQT17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe3pBPW5ldyBVaW50OEFycmF5KEwuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSx5QT1jbGFzc3tpbml0KCl7cmV0dXJuIHRBfHwodHlwZW9mIGZldGNoPCJ1Ij90QT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK0t0KS50aGVuKHQ9PnQuYXJyYXlCdWZmZXIoKSkudGhlbih0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0LFhBKSkudGhlbih0aGlzLl9pbml0KTp0QT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShLdCwiYmFzZTY0IiksWEEpLnRoZW4odGhpcy5faW5pdCksdEEpfV9pbml0KHQpe0w9dC5pbnN0YW5jZSxYQS5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUodCxJPTApe2lmKCFMKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBlPXQuYnl0ZUxlbmd0aCxnPUwuZXhwb3J0cy5tYWxsb2MoZSk7ekEuc2V0KHQsZyksST1JfHxOdW1iZXIoTC5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUoZyxlKSk7bGV0IHI9TC5leHBvcnRzLm1hbGxvYyhJKSxvPUwuZXhwb3J0cy5aU1REX2RlY29tcHJlc3MocixJLGcsZSksbj16QS5zbGljZShyLHIrbyk7cmV0dXJuIEwuZXhwb3J0cy5mcmVlKGcpLEwuZXhwb3J0cy5mcmVlKHIpLG59fSxLdD0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBPdD1uZXcgeUEsVHQ9ITE7YXN5bmMgZnVuY3Rpb24gY2UoQSx0LEkpe2xldCBlPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP2U9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP2U9QTplPWAke3R9LyR7QX1gLGUuZW5kc1dpdGgoIi5qcyIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTMpKSxlLmVuZHNXaXRoKCIud2FzbSIpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTUpKTtsZXQgZz1gJHtlfS53YXNtYCxyPWF3YWl0IGRBLmdldChgJHtnfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6SX0pO1R0fHwoYXdhaXQgT3QuaW5pdCgpLFR0PSEwKTtsZXQgbj1PdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoci5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7ZX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIFB0PWNlO3ZhciB3QT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIGZlKEEsdCxJKXtsZXQgZT1BLGc9QSxyPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKGU9bmV3IFVSTChBLmhyZWYpLGc9ZS5ocmVmKSx3QS5oYXMoZyk/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLFB0KGUsdCxJKSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIHh0PWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9dWU7ZnVuY3Rpb24gaGUoQSx0KXtsZXQgST1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e0k9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDg6e0k9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFMuVUludDE2OntJPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFMuSW50MTY6e0k9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7ST1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDMyOntJPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOkk9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP0k9bmV3IEJpZ0ludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIGouRmxvYXQzMjp7ST1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDY0OntJPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ST1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ST1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIEl9dmFyIEc9aGU7dmFyIFp0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGp0PW5ldyBUZXh0RW5jb2RlcixXdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSx0KXtsZXQgST17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3Blbih0LEkuZmxhZ3MpLHI9QS5mc19zdGF0KHQpLnNpemUsbz1udWxsO1p0P289bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOm89bmV3IEFycmF5QnVmZmVyKHIpO2xldCBuPW5ldyBVaW50OEFycmF5KG8pO3JldHVybiBBLmZzX3JlYWQoZSxuLDAsciwwKSxBLmZzX2Nsb3NlKGUpLG59ZnVuY3Rpb24gVnQoQSx0LEkpe2xldCBlPW51bGw7WnQ/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoSSk6ZT1uZXcgQXJyYXlCdWZmZXIoSSk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxJKTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiBkKEEsdCxJLGUpe2xldCBnPTA7cmV0dXJuIHQhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGUsdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gTShBLHQsSSl7bGV0IGU9SlNPTi5zdHJpbmdpZnkodCksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gcChBLHQsSSxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LEldKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLG89VnQoQSxnLHIpO3JldHVybiBHKGUsby5idWZmZXIpfWZ1bmN0aW9uIG1BKEEsdCl7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksZT1BLlVURjhUb1N0cmluZyhJKTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLHQsSSxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxCKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IGk9anQuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IGk9anQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IGk9US5kYXRhLmRhdGEsZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IGk9US5kYXRhLGY9ZChBLGkuZGF0YSxCLDApLHM9ZChBLGkuZGlyZWN0aW9uLEIsMSksRT10eXBlb2YgaS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShpLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOmkuaW1hZ2VUeXBlLG5hbWU6aS5uYW1lLG9yaWdpbjppLm9yaWdpbixzcGFjaW5nOmkuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsc2l6ZTppLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtNKEEsYyxCKTticmVha31jYXNlIEQuTWVzaDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5jZWxscyxCLDEpLEU9ZChBLGkucG9pbnREYXRhLEIsMiksYz1kKEEsaS5jZWxsRGF0YSxCLDMpLHU9e21lc2hUeXBlOmkubWVzaFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczppLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsY2VsbEJ1ZmZlclNpemU6aS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtNKEEsdSxCKTticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkucG9pbnREYXRhLEIsMSksRT17cG9pbnRTZXRUeXBlOmkucG9pbnRTZXRUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YH07TShBLEUsQik7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLnZlcnRpY2VzLEIsMSksRT1kKEEsaS5saW5lcyxCLDIpLGM9ZChBLGkucG9seWdvbnMsQiwzKSx1PWQoQSxpLnRyaWFuZ2xlU3RyaXBzLEIsNCkseT1kKEEsaS5wb2ludERhdGEsQiw1KSxSPWQoQSxpLnBvaW50RGF0YSxCLDYpLE49e3BvbHlEYXRhVHlwZTppLnBvbHlEYXRhVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6aS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsbGluZXNCdWZmZXJTaXplOmkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTppLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6aS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eX1gLG51bWJlck9mQ2VsbFBpeGVsczppLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07TShBLE4sQik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgbz1BLmdldE1vZHVsZVN0ZG91dCgpLG49QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiBJIT1udWxsJiZJLmxlbmd0aD4wJiZyPT09MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKFEsQil7bGV0IGk9bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9e2RhdGE6V3QuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxFKTtpPUpTT04ucGFyc2UoV3QuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pO2k9e2RhdGE6VnQoQSxzLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e2k9e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgcz1tQShBLEIpO3MuZGF0YT1wKEEsQiwwLHMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLHMuZGlyZWN0aW9uPXAoQSxCLDEsai5GbG9hdDY0KSxzLm1ldGFkYXRhPW5ldyBNYXAocy5tZXRhZGF0YSksaT1zO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxzPjA/cy5jZWxscz1wKEEsQiwxLHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOnMuY2VsbHM9RyhzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsMixzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsMyxzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvaW50U2V0OntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9RyhzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwxLHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1HKHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWNhc2UgRC5Qb2x5RGF0YTp7bGV0IHM9bUEoQSxCKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9cChBLEIsMCxqLkZsb2F0MzIpOnMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXkscy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9zLnZlcnRpY2VzPXAoQSxCLDEsUy5VSW50MzIpOnMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LHMubGluZXNCdWZmZXJTaXplPjA/cy5saW5lcz1wKEEsQiwyLFMuVUludDMyKTpzLmxpbmVzPW5ldyBVaW50MzJBcnJheSxzLnBvbHlnb25zQnVmZmVyU2l6ZT4wP3MucG9seWdvbnM9cChBLEIsMyxTLlVJbnQzMik6cy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXkscy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9zLnRyaWFuZ2xlU3RyaXBzPXAoQSxCLDQsUy5VSW50MzIpOnMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDUscy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9cChBLEIsNixzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPUcocy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOlEudHlwZSxkYXRhOml9O2EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpyLHN0ZG91dDpvLHN0ZGVycjpuLG91dHB1dHM6YX19dmFyIFh0PXllO3ZhciB3ZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gbWUoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBJPVtdO2ZvcihsZXQgZT0wO2U8QS5sZW5ndGg7ZSsrKXtsZXQgZz1wZShBW2VdLHQpO2chPT1udWxsJiZJLnB1c2goZyl9cmV0dXJuIEl9ZnVuY3Rpb24gcGUoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBJPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP0k9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoST1BKSx3ZSYmSSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9JOkkuc2xpY2UoMCl9dmFyIHp0PW1lO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBfdD1TZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgdnQ9RmU7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyICR0PVJlO2FzeW5jIGZ1bmN0aW9uIE5lKEEsdCxJLGUpe2xldCBnPVh0KEEsdCxJLGUpLHI9W107cmV0dXJuIGcub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8udHlwZT09PUQuQmluYXJ5U3RyZWFtfHxvLnR5cGU9PT1ELkJpbmFyeUZpbGUpe2xldCBuPW8uZGF0YTtyLnB1c2gobil9ZWxzZSBpZihvLnR5cGU9PT1ELkltYWdlKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLl90KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuTWVzaCl7bGV0IG49by5kYXRhO3IucHVzaCguLi52dChuKSl9ZWxzZSBpZihvLnR5cGU9PT1ELlBvbHlEYXRhKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLiR0KG4pKX19KSxGQShnLHp0KHIsITApKX12YXIgQUk9TmU7dmFyIFVlPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsSSxlLGcscil7bGV0IG89YXdhaXQgeHQoQSx0LHIpO3JldHVybiBhd2FpdCBBSShvLEksZSxnKX19O2lBKFVlKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO2RyKHlyKTtleHBvcnR7WUEgYXMgYmlvUmFkUmVhZEltYWdlLHFBIGFzIGJpb1JhZFdyaXRlSW1hZ2UsVUEgYXMgYm1wUmVhZEltYWdlLE5BIGFzIGJtcFdyaXRlSW1hZ2UsWSBhcyBleHRlbnNpb25Ub0ltYWdlSW8scnQgYXMgZmRmUmVhZEltYWdlLGZhIGFzIGZkZldyaXRlSW1hZ2UsJEEgYXMgZ2RjbVJlYWRJbWFnZSxldCBhcyBnZGNtV3JpdGVJbWFnZSxfQSBhcyBnZTRSZWFkSW1hZ2UsVkEgYXMgZ2U0V3JpdGVJbWFnZSxaQSBhcyBnZTVSZWFkSW1hZ2UsWEEgYXMgZ2U1V3JpdGVJbWFnZSx2QSBhcyBnZUFkd1JlYWRJbWFnZSx6QSBhcyBnZUFkd1dyaXRlSW1hZ2UseSBhcyBnZXREZWZhdWx0V2ViV29ya2VyLGQgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsRSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLEtBIGFzIGdpcGxSZWFkSW1hZ2UsakEgYXMgZ2lwbFdyaXRlSW1hZ2UsU0EgYXMgaGRmNVJlYWRJbWFnZSxPQSBhcyBoZGY1V3JpdGVJbWFnZSxSQSBhcyBqcGVnUmVhZEltYWdlLGtBIGFzIGpwZWdXcml0ZUltYWdlLEpBIGFzIGxzbVJlYWRJbWFnZSxMQSBhcyBsc21Xcml0ZUltYWdlLENBIGFzIG1ldGFSZWFkSW1hZ2UsRUEgYXMgbWV0YVdyaXRlSW1hZ2UsTUEgYXMgbWdoUmVhZEltYWdlLEhBIGFzIG1naFdyaXRlSW1hZ2UsUEEgYXMgbWluY1JlYWRJbWFnZSx4QSBhcyBtaW5jV3JpdGVJbWFnZSxUQSBhcyBtcmNSZWFkSW1hZ2UsR0EgYXMgbXJjV3JpdGVJbWFnZSxoQSBhcyBuaWZ0aVJlYWRJbWFnZSx3QSBhcyBuaWZ0aVdyaXRlSW1hZ2UsYkEgYXMgbnJyZFJlYWRJbWFnZSxEQSBhcyBucnJkV3JpdGVJbWFnZSxCQSBhcyBwbmdSZWFkSW1hZ2UsZEEgYXMgcG5nV3JpdGVJbWFnZSxzdCBhcyByZWFkSW1hZ2UsbGEgYXMgcmVhZEltYWdlRmlsZVNlcmllcyxtbyBhcyByZWFkSW1hZ2VIdHRwLEF0IGFzIHNjYW5jb1JlYWRJbWFnZSx0dCBhcyBzY2FuY29Xcml0ZUltYWdlLF9JIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsZHIgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsSEkgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCx5QSBhcyB0aWZmUmVhZEltYWdlLFFBIGFzIHRpZmZXcml0ZUltYWdlLFdBIGFzIHZ0a1JlYWRJbWFnZSxGQSBhcyB2dGtXcml0ZUltYWdlLGl0IGFzIHdhc21SZWFkSW1hZ2Usb3QgYXMgd2FzbVdyaXRlSW1hZ2UsYXQgYXMgd2FzbVpzdGRSZWFkSW1hZ2UsbnQgYXMgd2FzbVpzdGRXcml0ZUltYWdlLG1hIGFzIHdyaXRlSW1hZ2V9OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/image-io/python/itkwasm-image-io-wasi/itkwasm_image_io_wasi/_version.py b/packages/image-io/python/itkwasm-image-io-wasi/itkwasm_image_io_wasi/_version.py index 67bc602ab..9c73af26b 100644 --- a/packages/image-io/python/itkwasm-image-io-wasi/itkwasm_image_io_wasi/_version.py +++ b/packages/image-io/python/itkwasm-image-io-wasi/itkwasm_image_io_wasi/_version.py @@ -1 +1 @@ -__version__ = "1.3.0" +__version__ = "1.3.1" diff --git a/packages/image-io/python/itkwasm-image-io/itkwasm_image_io/_version.py b/packages/image-io/python/itkwasm-image-io/itkwasm_image_io/_version.py index 67bc602ab..9c73af26b 100644 --- a/packages/image-io/python/itkwasm-image-io/itkwasm_image_io/_version.py +++ b/packages/image-io/python/itkwasm-image-io/itkwasm_image_io/_version.py @@ -1 +1 @@ -__version__ = "1.3.0" +__version__ = "1.3.1" diff --git a/packages/image-io/typescript/package.json b/packages/image-io/typescript/package.json index b79f59c1b..96323afd2 100644 --- a/packages/image-io/typescript/package.json +++ b/packages/image-io/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/image-io", - "version": "1.3.0", + "version": "1.3.1", "packageManager": "pnpm@9.6.0", "description": "Input and output for scientific and medical image file formats.", "type": "module", From 37068a17ded159c6adc16e7966155ecae0f869f5 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Thu, 24 Oct 2024 15:45:36 -0400 Subject: [PATCH 29/39] build(mesh-io): add pixi configuration --- packages/mesh-io/.gitignore | 2 +- packages/mesh-io/.npmrc | 1 + packages/mesh-io/environment.yml | 9 - packages/mesh-io/package.json | 17 +- packages/mesh-io/pixi.lock | 9250 +++++++++++++++++ packages/mesh-io/pixi.toml | 139 + .../python/itkwasm-mesh-io/tests/fixtures.py | 4 + .../tests/test_read_write_mesh_async.py | 5 +- .../tests/test_read_write_point_set_async.py | 5 +- .../tests/test_vtk_poly_data_async.py | 5 +- pnpm-lock.yaml | 3 - 11 files changed, 9410 insertions(+), 30 deletions(-) create mode 100644 packages/mesh-io/.npmrc delete mode 100644 packages/mesh-io/environment.yml create mode 100644 packages/mesh-io/pixi.lock create mode 100644 packages/mesh-io/pixi.toml diff --git a/packages/mesh-io/.gitignore b/packages/mesh-io/.gitignore index 5d2e6f616..ff6b194ad 100644 --- a/packages/mesh-io/.gitignore +++ b/packages/mesh-io/.gitignore @@ -3,5 +3,5 @@ emscripten-build/ wasi-build/ package-lock.json test/ -micromamba/ typescript/src/version.ts +pyodide/ diff --git a/packages/mesh-io/.npmrc b/packages/mesh-io/.npmrc new file mode 100644 index 000000000..a4be22c92 --- /dev/null +++ b/packages/mesh-io/.npmrc @@ -0,0 +1 @@ +git-checks=false diff --git a/packages/mesh-io/environment.yml b/packages/mesh-io/environment.yml deleted file mode 100644 index a5d9efbbe..000000000 --- a/packages/mesh-io/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: mesh-io -channels: - - conda-forge -dependencies: - - pytest - - python=3.11 - - pip - - pip: - - hatch diff --git a/packages/mesh-io/package.json b/packages/mesh-io/package.json index db9495739..877104118 100644 --- a/packages/mesh-io/package.json +++ b/packages/mesh-io/package.json @@ -1,8 +1,7 @@ { "name": "@itk-wasm/mesh-io-build", - "version": "1.0.0", + "version": "1.4.2", "private": true, - "packageManager": "pnpm@9.6.0", "description": "scripts to generate @itk-wasm/compare-stringify itk-wasm artifacts.", "type": "module", "itk-wasm": { @@ -23,27 +22,23 @@ "build:emscripten:debug": "itk-wasm pnpm-script build:emscripten:debug", "build:wasi": "itk-wasm pnpm-script build:wasi", "build:wasi:debug": "itk-wasm pnpm-script build:wasi:debug", - "build:python:wasi": "itk-wasm pnpm-script build:python:wasi", + "build:python:wasi": "echo 'No build:python:wasi script required with pixi'", "bindgen:typescript": "itk-wasm pnpm-script bindgen:typescript", "bindgen:python": "itk-wasm pnpm-script bindgen:python", "build:gen:typescript": "itk-wasm pnpm-script build:gen:typescript", - "build:gen:python": "itk-wasm pnpm-script build:gen:python", - "build:micromamba": "itk-wasm pnpm-script build:micromamba", - "build:python:versionSync": "itk-wasm pnpm-script build:python:versionSync", - "publish:python": "itk-wasm pnpm-script publish:python", + "build:gen:python": "pnpm build:wasi && pnpm bindgen:python", "test": "pnpm test:data:download && pnpm build:gen:python && pnpm test:python", "test:data:download": "dam download test/data test/data.tar.gz bafkreiahocrgb3p4xrjozr7cg5wdpdt6wp77kolnqyupae6awkplb5p4he https://bafybeian677gvnngces3pbcv6zpzauf3yn5bedxdis4smwzwh5xeewazuq.ipfs.w3s.link/ipfs/bafybeian677gvnngces3pbcv6zpzauf3yn5bedxdis4smwzwh5xeewazuq/data.tar.gz", "test:data:pack": "dam pack test/data test/data.tar.gz", - "test:python:wasi": "itk-wasm pnpm-script test:python:wasi", - "test:python:emscripten": "itk-wasm pnpm-script test:python:emscripten", - "test:python:dispatch": "itk-wasm pnpm-script test:python:emscripten", + "test:python:wasi": "pnpm test:data:download && pixi run test-wasi", + "test:python:emscripten": "pnpm test:data:download && pixi run test-emscripten", + "test:python:dispatch": "pnpm test:data:download && pixi run test-dispatch", "test:python": "itk-wasm pnpm-script test:python", "test:wasi": "itk-wasm pnpm-script test:wasi" }, "license": "Apache-2.0", "devDependencies": { "@itk-wasm/dam": "^1.1.0", - "@thewtex/setup-micromamba": "^1.9.7", "itk-wasm": "workspace:^" } } diff --git a/packages/mesh-io/pixi.lock b/packages/mesh-io/pixi.lock new file mode 100644 index 000000000..e9138399d --- /dev/null +++ b/packages/mesh-io/pixi.lock @@ -0,0 +1,9250 @@ +version: 5 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + python: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.12.1-hf0a5ef3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.16-h922389a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.22-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.0.0-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.44-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-hec21d91_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.4.0-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.2-h0d9d63b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.0.0-py312h5ab5af3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.11-h86ecc28_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-hfce79cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.2-h9f1df11_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.0.0-py312haf37ca6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.22-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.0-hfc51747_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py312h381445a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl +packages: +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + size: 23621 + timestamp: 1650670423406 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23621 + timestamp: 1650670423406 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + size: 23712 + timestamp: 1650670790230 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23712 + timestamp: 1650670790230 +- kind: conda + name: anyio + version: 4.6.2.post1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - uvloop >=0.21.0b1 + - trio >=0.26.1 + license: MIT + license_family: MIT + size: 109864 + timestamp: 1728935803440 +- kind: conda + name: anyio + version: 4.6.2.post1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - uvloop >=0.21.0b1 + - trio >=0.26.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/anyio?source=compressed-mapping + size: 109864 + timestamp: 1728935803440 +- kind: pypi + name: attrs + version: 24.2.0 + url: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + sha256: 81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'benchmark' + - hypothesis ; extra == 'benchmark' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pympler ; extra == 'benchmark' + - pytest-codspeed ; extra == 'benchmark' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pytest-xdist[psutil] ; extra == 'benchmark' + - pytest>=4.3.0 ; extra == 'benchmark' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'cov' + - coverage[toml]>=5.3 ; extra == 'cov' + - hypothesis ; extra == 'cov' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'cov' + - pympler ; extra == 'cov' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'cov' + - pytest-xdist[psutil] ; extra == 'cov' + - pytest>=4.3.0 ; extra == 'cov' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'dev' + - hypothesis ; extra == 'dev' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'dev' + - pre-commit ; extra == 'dev' + - pympler ; extra == 'dev' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'dev' + - pytest-xdist[psutil] ; extra == 'dev' + - pytest>=4.3.0 ; extra == 'dev' + - cogapp ; extra == 'docs' + - furo ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-notfound-page ; extra == 'docs' + - sphinxcontrib-towncrier ; extra == 'docs' + - towncrier<24.7 ; extra == 'docs' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'tests' + - hypothesis ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests' + - pympler ; extra == 'tests' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests' + - pytest-xdist[psutil] ; extra == 'tests' + - pytest>=4.3.0 ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + requires_python: '>=3.7' +- kind: conda + name: backports + version: '1.0' + build: pyhd8ed1ab_4 + build_number: 4 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + sha256: 31b51537ce7d2ba8b5b3d0095f1813711884304ac1701bc55938ca75f6c82e19 + md5: 67bdebbc334513034826e9b63f769d4c + depends: + - python >=3 + license: BSD-3-Clause + license_family: BSD + size: 6989 + timestamp: 1722295637981 +- kind: conda + name: backports + version: '1.0' + build: pyhd8ed1ab_4 + build_number: 4 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + sha256: 31b51537ce7d2ba8b5b3d0095f1813711884304ac1701bc55938ca75f6c82e19 + md5: 67bdebbc334513034826e9b63f769d4c + depends: + - python >=3 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6989 + timestamp: 1722295637981 +- kind: conda + name: backports.tarfile + version: 1.0.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + sha256: 7ba30f32daad2e7ca251508525185ba170eedc14123572611c2acf261c7956b3 + md5: c747b1d79f136013c3b7ebcba876afa6 + depends: + - backports + - python >=3.8 + license: MIT + license_family: MIT + size: 31951 + timestamp: 1712700751335 +- kind: conda + name: backports.tarfile + version: 1.0.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + sha256: 7ba30f32daad2e7ca251508525185ba170eedc14123572611c2acf261c7956b3 + md5: c747b1d79f136013c3b7ebcba876afa6 + depends: + - backports + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/backports-tarfile?source=hash-mapping + size: 31951 + timestamp: 1712700751335 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h2466b09_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: bzip2-1.0.6 + license_family: BSD + size: 54927 + timestamp: 1720974860185 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h2466b09_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 54927 + timestamp: 1720974860185 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h68df207_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb + md5: 56398c28220513b9ea13d7b450acfb20 + depends: + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + size: 189884 + timestamp: 1720974504976 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h68df207_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb + md5: 56398c28220513b9ea13d7b450acfb20 + depends: + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 189884 + timestamp: 1720974504976 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + size: 122909 + timestamp: 1720974522888 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 122909 + timestamp: 1720974522888 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: h56e8100_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 + md5: 4c4fd67c18619be5aa65dc5b6c72e490 + license: ISC + size: 158773 + timestamp: 1725019107649 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: h56e8100_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 + md5: 4c4fd67c18619be5aa65dc5b6c72e490 + license: ISC + purls: [] + size: 158773 + timestamp: 1725019107649 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 + license: ISC + size: 159003 + timestamp: 1725018903918 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 + license: ISC + purls: [] + size: 159003 + timestamp: 1725018903918 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hcefe29a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + sha256: 2a2d827bee3775a85f0f1b2f2089291475c4416336d1b3a8cbce2964db547af8 + md5: 70e57e8f59d2c98f86b49c69e5074be5 + license: ISC + size: 159106 + timestamp: 1725020043153 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hcefe29a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + sha256: 2a2d827bee3775a85f0f1b2f2089291475c4416336d1b3a8cbce2964db547af8 + md5: 70e57e8f59d2c98f86b49c69e5074be5 + license: ISC + purls: [] + size: 159106 + timestamp: 1725020043153 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + size: 158482 + timestamp: 1725019034582 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + purls: [] + size: 158482 + timestamp: 1725019034582 +- kind: conda + name: certifi + version: 2024.8.30 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + size: 163752 + timestamp: 1725278204397 +- kind: conda + name: certifi + version: 2024.8.30 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping + size: 163752 + timestamp: 1725278204397 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h06ac9bb_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 + md5: a861504bbea4161a9170b85d4d2be840 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 294403 + timestamp: 1725560714366 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h06ac9bb_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 + md5: a861504bbea4161a9170b85d4d2be840 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 294403 + timestamp: 1725560714366 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 281206 + timestamp: 1725560813378 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 281206 + timestamp: 1725560813378 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h4389bb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + sha256: ac007bf5fd56d13e16d95eea036433012f2e079dc015505c8a79efebbad1fcbc + md5: 08310c1a22ef957d537e547f8d484f92 + depends: + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 288142 + timestamp: 1725560896359 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h4389bb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + sha256: ac007bf5fd56d13e16d95eea036433012f2e079dc015505c8a79efebbad1fcbc + md5: 08310c1a22ef957d537e547f8d484f92 + depends: + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 288142 + timestamp: 1725560896359 +- kind: conda + name: cffi + version: 1.17.1 + build: py312hac81daf_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + sha256: 1162e3ca039e7ca7c0e78f0a020ed1bde968096841b663e3f393c966eb82f0f0 + md5: 1a256e5581b1099e9295cb84d53db3ea + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 312892 + timestamp: 1725561779888 +- kind: conda + name: cffi + version: 1.17.1 + build: py312hac81daf_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + sha256: 1162e3ca039e7ca7c0e78f0a020ed1bde968096841b663e3f393c966eb82f0f0 + md5: 1a256e5581b1099e9295cb84d53db3ea + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 312892 + timestamp: 1725561779888 +- kind: conda + name: click + version: 8.1.7 + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 84437 + timestamp: 1692311973840 +- kind: conda + name: click + version: 8.1.7 + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 84437 + timestamp: 1692311973840 +- kind: conda + name: click + version: 8.1.7 + build: win_pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 + md5: 3549ecbceb6cd77b91a105511b7d0786 + depends: + - __win + - colorama + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 85051 + timestamp: 1692312207348 +- kind: conda + name: click + version: 8.1.7 + build: win_pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 + md5: 3549ecbceb6cd77b91a105511b7d0786 + depends: + - __win + - colorama + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 85051 + timestamp: 1692312207348 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + sha256: ba9e5aced2e7dc0bbc48f60bf38f514839424a01975fb2aed30e9246c2f82c7c + md5: 2abada8c216dd6e32514535a3fa245d4 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + size: 1488388 + timestamp: 1729286882127 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + sha256: ba9e5aced2e7dc0bbc48f60bf38f514839424a01975fb2aed30e9246c2f82c7c + md5: 2abada8c216dd6e32514535a3fa245d4 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1488388 + timestamp: 1729286882127 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312he723553_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + sha256: bd9cc8410bf31ac8b90d63dda92d5810af16c3841ca6dd09be9b7f9c5c7688ba + md5: bfacbf2e4560c7d6416d40f573961918 + depends: + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + size: 1480456 + timestamp: 1729287055014 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312he723553_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + sha256: bd9cc8410bf31ac8b90d63dda92d5810af16c3841ca6dd09be9b7f9c5c7688ba + md5: bfacbf2e4560c7d6416d40f573961918 + depends: + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1480456 + timestamp: 1729287055014 +- kind: conda + name: dbus + version: 1.13.6 + build: h12b9eeb_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + sha256: 5fe76bdf27a142cfb9da0fb3197c562e528d2622b573765bee5c9904cf5e6b6b + md5: f3d63805602166bac09386741e00935e + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + size: 672759 + timestamp: 1640113663539 +- kind: conda + name: dbus + version: 1.13.6 + build: h12b9eeb_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + sha256: 5fe76bdf27a142cfb9da0fb3197c562e528d2622b573765bee5c9904cf5e6b6b + md5: f3d63805602166bac09386741e00935e + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 672759 + timestamp: 1640113663539 +- kind: conda + name: dbus + version: 1.13.6 + build: h5008d03_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 + md5: ecfff944ba3960ecb334b9a2663d708d + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + size: 618596 + timestamp: 1640112124844 +- kind: conda + name: dbus + version: 1.13.6 + build: h5008d03_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 + md5: ecfff944ba3960ecb334b9a2663d708d + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 618596 + timestamp: 1640112124844 +- kind: conda + name: distlib + version: 0.3.9 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb + md5: fe521c1608280cc2803ebd26dc252212 + depends: + - python 2.7|>=3.6 + license: Apache-2.0 + license_family: APACHE + size: 276214 + timestamp: 1728557312342 +- kind: conda + name: distlib + version: 0.3.9 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb + md5: fe521c1608280cc2803ebd26dc252212 + depends: + - python 2.7|>=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/distlib?source=hash-mapping + size: 276214 + timestamp: 1728557312342 +- kind: conda + name: editables + version: '0.5' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + sha256: de160a7494e7bc72360eea6a29cbddf194d0a79f45ff417a4de20e6858cf79a9 + md5: 9873878e2a069bc358b69e9a29c1ecd5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 10988 + timestamp: 1705857085102 +- kind: conda + name: editables + version: '0.5' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + sha256: de160a7494e7bc72360eea6a29cbddf194d0a79f45ff417a4de20e6858cf79a9 + md5: 9873878e2a069bc358b69e9a29c1ecd5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/editables?source=hash-mapping + size: 10988 + timestamp: 1705857085102 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: expat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + sha256: c827521e080d0f3395655924f1c364d48a1eac1ff3e193a12d0441e9c3b51e91 + md5: 901a44b341632b0c233756ed5abcd78b + depends: + - libexpat 2.6.3 h5ad3122_0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 130283 + timestamp: 1725568848182 +- kind: conda + name: expat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + sha256: c827521e080d0f3395655924f1c364d48a1eac1ff3e193a12d0441e9c3b51e91 + md5: 901a44b341632b0c233756ed5abcd78b + depends: + - libexpat 2.6.3 h5ad3122_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 130283 + timestamp: 1725568848182 +- kind: conda + name: filelock + version: 3.16.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + size: 17357 + timestamp: 1726613593584 +- kind: conda + name: filelock + version: 3.16.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + purls: + - pkg:pypi/filelock?source=hash-mapping + size: 17357 + timestamp: 1726613593584 +- kind: conda + name: freetype + version: 2.12.1 + build: h267a509_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 + md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 634972 + timestamp: 1694615932610 +- kind: conda + name: freetype + version: 2.12.1 + build: hadb7bae_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + sha256: 791673127e037a2dc0eebe122dc4f904cb3f6e635bb888f42cbe1a76b48748d9 + md5: e6085e516a3e304ce41a8ee08b9b89ad + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 596430 + timestamp: 1694616332835 +- kind: conda + name: freetype + version: 2.12.1 + build: hdaf720e_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda + sha256: 2c53ee8879e05e149a9e525481d36adfd660a6abda26fd731376fa64ff03e728 + md5: 3761b23693f768dc75a8fd0a73ca053f + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: GPL-2.0-only OR FTL + purls: [] + size: 510306 + timestamp: 1694616398888 +- kind: conda + name: freetype + version: 2.12.1 + build: hf0a5ef3_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.12.1-hf0a5ef3_2.conda + sha256: 7af93030f4407f076dce181062360efac2cd54dce863b5d7765287a6f5382537 + md5: a5ab74c5bd158c3d5532b66d8d83d907 + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 642092 + timestamp: 1694617858496 +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + sha256: 7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + sha256: 4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + sha256: 1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: conda + name: h11 + version: 0.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h11 + version: 0.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/h11?source=hash-mapping + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + size: 46754 + timestamp: 1634280590080 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + size: 46754 + timestamp: 1634280590080 +- kind: conda + name: hatch + version: 1.13.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + sha256: 675b0304b129a4dbc39b8e6f337cea51adebef20508a656f43b6e6b43d9cf458 + md5: b8a6437f94d29aef00decdbe1174be27 + depends: + - click >=8.0.6 + - hatchling >=1.24.2 + - httpx >=0.22.0 + - hyperlink >=21.0.0 + - keyring >=23.5.0 + - packaging >=23.2 + - pexpect >=4.8,<5 + - platformdirs >=2.5.0 + - python >=3.8 + - rich >=11.2.0 + - shellingham >=1.4.0 + - tomli-w >=1.0 + - tomlkit >=0.11.1 + - userpath >=1.7,<2 + - uv >=0.1.35 + - virtualenv >=20.26.1 + - zstandard <1.0 + license: MIT + license_family: MIT + size: 177173 + timestamp: 1728879212263 +- kind: conda + name: hatch + version: 1.13.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + sha256: 675b0304b129a4dbc39b8e6f337cea51adebef20508a656f43b6e6b43d9cf458 + md5: b8a6437f94d29aef00decdbe1174be27 + depends: + - click >=8.0.6 + - hatchling >=1.24.2 + - httpx >=0.22.0 + - hyperlink >=21.0.0 + - keyring >=23.5.0 + - packaging >=23.2 + - pexpect >=4.8,<5 + - platformdirs >=2.5.0 + - python >=3.8 + - rich >=11.2.0 + - shellingham >=1.4.0 + - tomli-w >=1.0 + - tomlkit >=0.11.1 + - userpath >=1.7,<2 + - uv >=0.1.35 + - virtualenv >=20.26.1 + - zstandard <1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatch?source=hash-mapping + size: 177173 + timestamp: 1728879212263 +- kind: conda + name: hatchling + version: 1.25.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + sha256: fb8a16a913f909d8f7d2ae95c18a1aeb7be3eebfb1b7a4246500c06d54498f89 + md5: 7571d6e5561b04aef679a11904dfcebf + depends: + - editables >=0.3 + - importlib-metadata + - packaging >=21.3 + - pathspec >=0.10.1 + - pluggy >=1.0.0 + - python >=3.7 + - tomli >=1.2.2 + - trove-classifiers + license: MIT + license_family: MIT + size: 64580 + timestamp: 1719090878694 +- kind: conda + name: hatchling + version: 1.25.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + sha256: fb8a16a913f909d8f7d2ae95c18a1aeb7be3eebfb1b7a4246500c06d54498f89 + md5: 7571d6e5561b04aef679a11904dfcebf + depends: + - editables >=0.3 + - importlib-metadata + - packaging >=21.3 + - pathspec >=0.10.1 + - pluggy >=1.0.0 + - python >=3.7 + - tomli >=1.2.2 + - trove-classifiers + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatchling?source=hash-mapping + size: 64580 + timestamp: 1719090878694 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: httpcore + version: 1.0.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + sha256: 8952c3f1eb18bf4d7e813176c3b23e0af4e863e8b05087e73f74f371d73077ca + md5: b8e1901ef9a215fc41ecfb6bef7e0943 + depends: + - anyio >=3.0,<5.0 + - certifi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + size: 45711 + timestamp: 1727821031365 +- kind: conda + name: httpcore + version: 1.0.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + sha256: 8952c3f1eb18bf4d7e813176c3b23e0af4e863e8b05087e73f74f371d73077ca + md5: b8e1901ef9a215fc41ecfb6bef7e0943 + depends: + - anyio >=3.0,<5.0 + - certifi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + size: 45711 + timestamp: 1727821031365 +- kind: conda + name: httpx + version: 0.27.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: httpx + version: 0.27.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 14646 + timestamp: 1619110249723 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 14646 + timestamp: 1619110249723 +- kind: conda + name: hyperlink + version: 21.0.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + sha256: 026cb82ada41be9ee2836a2ace526e85c4603e77617887c41c6e62c9bde798b3 + md5: 1303beb57b40f8f4ff6fb1bb23bf0553 + depends: + - idna >=2.6 + - python + license: MIT + license_family: MIT + size: 72732 + timestamp: 1610092261086 +- kind: conda + name: hyperlink + version: 21.0.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + sha256: 026cb82ada41be9ee2836a2ace526e85c4603e77617887c41c6e62c9bde798b3 + md5: 1303beb57b40f8f4ff6fb1bb23bf0553 + depends: + - idna >=2.6 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperlink?source=hash-mapping + size: 72732 + timestamp: 1610092261086 +- kind: pypi + name: hypothesis + version: 6.115.5 + url: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + sha256: b7733459ae9a93020fac3b91b41473c9b85e975139a152a70d88f3a5caa3fa3f + requires_dist: + - attrs>=22.2.0 + - sortedcontainers<3.0.0,>=2.1.0 + - exceptiongroup>=1.0.0 ; python_full_version < '3.11' + - black>=19.10b0 ; extra == 'all' + - click>=7.0 ; extra == 'all' + - crosshair-tool>=0.0.74 ; extra == 'all' + - django>=4.2 ; extra == 'all' + - dpcontracts>=0.4 ; extra == 'all' + - hypothesis-crosshair>=0.0.16 ; extra == 'all' + - lark>=0.10.1 ; extra == 'all' + - libcst>=0.3.16 ; extra == 'all' + - numpy>=1.19.3 ; extra == 'all' + - pandas>=1.1 ; extra == 'all' + - pytest>=4.6 ; extra == 'all' + - python-dateutil>=1.4 ; extra == 'all' + - pytz>=2014.1 ; extra == 'all' + - redis>=3.0.0 ; extra == 'all' + - rich>=9.0.0 ; extra == 'all' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'all') or (sys_platform == 'win32' and extra == 'all') + - click>=7.0 ; extra == 'cli' + - black>=19.10b0 ; extra == 'cli' + - rich>=9.0.0 ; extra == 'cli' + - libcst>=0.3.16 ; extra == 'codemods' + - hypothesis-crosshair>=0.0.16 ; extra == 'crosshair' + - crosshair-tool>=0.0.74 ; extra == 'crosshair' + - python-dateutil>=1.4 ; extra == 'dateutil' + - django>=4.2 ; extra == 'django' + - dpcontracts>=0.4 ; extra == 'dpcontracts' + - black>=19.10b0 ; extra == 'ghostwriter' + - lark>=0.10.1 ; extra == 'lark' + - numpy>=1.19.3 ; extra == 'numpy' + - pandas>=1.1 ; extra == 'pandas' + - pytest>=4.6 ; extra == 'pytest' + - pytz>=2014.1 ; extra == 'pytz' + - redis>=3.0.0 ; extra == 'redis' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'zoneinfo') or (sys_platform == 'win32' and extra == 'zoneinfo') + requires_python: '>=3.9' +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 12129203 + timestamp: 1720853576813 +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12129203 + timestamp: 1720853576813 +- kind: conda + name: icu + version: '75.1' + build: hf9b3779_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 + md5: 268203e8b983fddb6412b36f2024e75c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 12282786 + timestamp: 1720853454991 +- kind: conda + name: icu + version: '75.1' + build: hf9b3779_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 + md5: 268203e8b983fddb6412b36f2024e75c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12282786 + timestamp: 1720853454991 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 11857802 + timestamp: 1720853997952 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 11857802 + timestamp: 1720853997952 +- kind: conda + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=hash-mapping + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: importlib_resources + version: 6.4.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + size: 32725 + timestamp: 1725921462405 +- kind: conda + name: importlib_resources + version: 6.4.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping + size: 32725 + timestamp: 1725921462405 +- kind: conda + name: iniconfig + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 + md5: f800d2da156d08e289b14e87e43c1ae5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=hash-mapping + size: 11101 + timestamp: 1673103208955 +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: a1b4e5511c2274025bffe80d081ef79ee41de580df80311007af1ec05e2774db + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 0f0dcce9df862831e705eebf0ffa95de554b17027f69d67b31b30dcb8d838019 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 88344f4c7e8a74dfdeb98e20232d1a9565eb7c381d8242534588ecc4e745ffb3 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + sha256: e5ffacab2c8609979c78c2d2e02ee7e6abd611261aac0613289d98e7c277cd83 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 21c7b5c451f73c8073eb3b5dd85f7c654399cdc25dd51669bfbbafa611aa4649 + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: b6af0e82dae0efa95ad87f36ccd55a955383b34a6bd8a036894fb96a3933615a + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 8ca83de9c269e6b20648f2391aa2bf96903b8ed645c3d8cd40d90b939dda439e + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + sha256: 6affe6986927fd176c176f5464d9ea9e737b85d8745f5c4129da910fd16235cb + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + sha256: ad59e6066dba25d6b0803023e95c7633a80e7b9c1a9ff89a41c97eae5a60e06f + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 6e8600df87c59233968013d162c5a353ca4c8f843c76117b52347aec20ff1620 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 86026c853f1fd0b13e282f952cff7455df0ac131cc608df8669ce335633eef0a + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: e8d90842d703877c4ce777efece3db478c8ed5e3a18488e277a480f05d61ebb0 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 393d711f9edb248aed402e7fc9613045536dbd6b45fc8db638a28d0a409fe974 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8c0eacb3aa100e4b369a673bb0e65c3c48c411bc4b716069bce4cee8c3f9e1cc + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: d969a2ab2775b2ace36edee274ffe4839b21c7ccd634844082028f9f373dfedb + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 11a34ac45b960aa883e1758ead15c5394814964573c93d736fc04f021c18cd22 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 3c10f157bddbdf86b596ec2742f17bcc35cd6ce7bd64bba712a2a0c0858c2dc7 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 914cae65049842affc820471e149b2cdd55d305ff1a740c34a47e1b1af567361 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + sha256: b8b746f6d5597687d0b50dd81d650da0293f2c3c90f31212baefdf46edb727d6 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 84bd859eeb17aed3de39f0b3357525a4bfac0db17263a8d36cd641e5f8c49b46 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + sha256: 31f24c218c763b2c15953453cc366c5ba09e7a5c7d47d432a24c0b6b12249206 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 5cd8ab0781e08a4022e36094bb60652d0ee2b7cd1912f325e8f32d8bd5501fcf + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 583b665d6b8578ac93691afb796faf69e30b8db8a205754cdc746707f9589fcd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: e2dcda0a07ccb6b9b518d3cc4413387a44c30a313c22e15bf818af06c7da8bfd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 15eab6a72bebeccfb8a0fb291b65c305e46776a18a8f3cb91f199fc8ecd137a1 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8a2d3f2872375a9c2694bb34a2e061a4d2666f8c13390f03d94219ba8370649e + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 3f41cff2136f69ae5c2ce6166191dff86e4722097411aaaba07a74884d36ff73 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: dde112dbb9b695c1908692a0086f60da8d5a123f7e959ebc5aaec2825aaf9793 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: ff2ca7cdf42c8c32b20e1ecf7ee0a0be68e885ce673c565e72a4876b28d2e2f3 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: b3c154e7a92be2ad48e6bf8bd5a8a17610f890bb420abb54dd2bde15b1c9c52c + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + sha256: 45374d3c38884ed02e0dfebf73f363e265184a50f7c46d55d8c9217e690a571f + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 8dd071dbb1ba1c8fcf26a4011fc3b7069d444e10bc56279d7b26fd3193ac58aa + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + sha256: 0b787ee92418a1f965c52eea1fd41a7aef4424eb6e07a290b0e1ddebf50a09e1 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + sha256: ee3defc13dc65f56127e468c145e9249265c275b63ea3c530c1b88f1df4a7033 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 72f82fab54c4ee4c6c579cfd5c963cba9a84ecc9909e61f3641caa9fef94b40c + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: eff3cd27756e96ebd31500ef258d0cc4a56e48c2c25c4533300469246623d7aa + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itkwasm + version: 1.0b179 + url: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + sha256: 43558ccd082f3dc3c9b3b2379cdb197635b33620d41dbc6c1fa9186d03c22a7e + requires_dist: + - importlib-metadata ; python_full_version < '3.10' + - numpy + - platformdirs ; sys_platform != 'emscripten' + - typing-extensions + - wasmtime>=13.0.2 ; sys_platform != 'emscripten' + requires_python: '>=3.8' +- kind: conda + name: jaraco.classes + version: 3.4.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + sha256: 538b1c6df537a36c63fd0ed83cb1c1c25b07d8d3b5e401991fdaff261a4b5b4d + md5: 7b756504d362cbad9b73a50a5455cafd + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + size: 12223 + timestamp: 1713939433204 +- kind: conda + name: jaraco.classes + version: 3.4.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + sha256: 538b1c6df537a36c63fd0ed83cb1c1c25b07d8d3b5e401991fdaff261a4b5b4d + md5: 7b756504d362cbad9b73a50a5455cafd + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-classes?source=hash-mapping + size: 12223 + timestamp: 1713939433204 +- kind: conda + name: jaraco.context + version: 5.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + sha256: 9e2aeacb1aed3ab4fc5883a357e8a874e12f687af300f8708ec12de2995e17d2 + md5: 72d7ad2dcd0f37eccb2ee35a1c8f6aaa + depends: + - backports.tarfile + - python >=3.8 + license: MIT + license_family: MIT + size: 12456 + timestamp: 1714372284922 +- kind: conda + name: jaraco.context + version: 5.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + sha256: 9e2aeacb1aed3ab4fc5883a357e8a874e12f687af300f8708ec12de2995e17d2 + md5: 72d7ad2dcd0f37eccb2ee35a1c8f6aaa + depends: + - backports.tarfile + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-context?source=hash-mapping + size: 12456 + timestamp: 1714372284922 +- kind: conda + name: jaraco.functools + version: 4.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + sha256: d2e866fd22a48eaa2f795b6a3b0bf16f066293322ce04dd65cca36267160ead6 + md5: 547670a612fd335eaa5ffbf0fa75cb64 + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + size: 15192 + timestamp: 1701695329516 +- kind: conda + name: jaraco.functools + version: 4.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + sha256: d2e866fd22a48eaa2f795b6a3b0bf16f066293322ce04dd65cca36267160ead6 + md5: 547670a612fd335eaa5ffbf0fa75cb64 + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-functools?source=hash-mapping + size: 15192 + timestamp: 1701695329516 +- kind: conda + name: jeepney + version: 0.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + sha256: 16639759b811866d63315fe1391f6fb45f5478b823972f4d3d9f0392b7dd80b8 + md5: 9800ad1699b42612478755a2d26c722d + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 36895 + timestamp: 1649085298891 +- kind: conda + name: jeepney + version: 0.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + sha256: 16639759b811866d63315fe1391f6fb45f5478b823972f4d3d9f0392b7dd80b8 + md5: 9800ad1699b42612478755a2d26c722d + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jeepney?source=hash-mapping + size: 36895 + timestamp: 1649085298891 +- kind: conda + name: jq + version: 1.7.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + sha256: 53437ca79e28003faac8058f6c025c83a819e122d3a0fb70624e6da0f77ab126 + md5: 397702b2c1e53f0f0312d2b170d2e699 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + size: 334346 + timestamp: 1702502754422 +- kind: conda + name: jq + version: 1.7.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + sha256: 53437ca79e28003faac8058f6c025c83a819e122d3a0fb70624e6da0f77ab126 + md5: 397702b2c1e53f0f0312d2b170d2e699 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 334346 + timestamp: 1702502754422 +- kind: conda + name: jq + version: 1.7.1 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + sha256: e530cf5800e937bce7847a023a998db504e333a928b469c45a1752535593e762 + md5: dbf665694fb28d86d77cca18e5dd530c + depends: + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + size: 317604 + timestamp: 1702501287237 +- kind: conda + name: jq + version: 1.7.1 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + sha256: e530cf5800e937bce7847a023a998db504e333a928b469c45a1752535593e762 + md5: dbf665694fb28d86d77cca18e5dd530c + depends: + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 317604 + timestamp: 1702501287237 +- kind: conda + name: jq + version: 1.7.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d + md5: 80814f94713e35df60aad6c4b235de87 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + size: 318956 + timestamp: 1702500793203 +- kind: conda + name: jq + version: 1.7.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d + md5: 80814f94713e35df60aad6c4b235de87 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 318956 + timestamp: 1702500793203 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh534df25_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + sha256: 8d8fc7d67e9bd387403720447abb1b5539a6f6ca8e3aba8406e0987213bfa0ce + md5: 2099f34ea2f3534f7adc5c21cc199e1b + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + license: MIT + license_family: MIT + size: 37045 + timestamp: 1726971145252 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh534df25_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + sha256: 8d8fc7d67e9bd387403720447abb1b5539a6f6ca8e3aba8406e0987213bfa0ce + md5: 2099f34ea2f3534f7adc5c21cc199e1b + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37045 + timestamp: 1726971145252 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + sha256: 69626899dfac975090032f7af782c143b569f7706e808a4eca67a9a5aa134a15 + md5: 1c74a03431815d5e091585bb04e86f12 + depends: + - __win + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + - pywin32-ctypes >=0.2.0 + license: MIT + license_family: MIT + size: 37407 + timestamp: 1726971355676 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + sha256: 69626899dfac975090032f7af782c143b569f7706e808a4eca67a9a5aa134a15 + md5: 1c74a03431815d5e091585bb04e86f12 + depends: + - __win + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + - pywin32-ctypes >=0.2.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37407 + timestamp: 1726971355676 +- kind: conda + name: keyring + version: 25.4.1 + build: pyha804496_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + sha256: 6deeb4fa0f01447a5e8bd7261044c45d139e27d36df769e5a3a16ce55607da14 + md5: ef6f2de3c8eef0ee9fd31f2267c27bf2 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.8 + - secretstorage >=3.2 + license: MIT + license_family: MIT + size: 36717 + timestamp: 1726971094601 +- kind: conda + name: keyring + version: 25.4.1 + build: pyha804496_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + sha256: 6deeb4fa0f01447a5e8bd7261044c45d139e27d36df769e5a3a16ce55607da14 + md5: ef6f2de3c8eef0ee9fd31f2267c27bf2 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.8 + - secretstorage >=3.2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 36717 + timestamp: 1726971094601 +- kind: conda + name: lcms2 + version: '2.16' + build: h67d730c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda + sha256: f9fd9e80e46358a57d9bb97b1e37a03da4022143b019aa3c4476d8a7795de290 + md5: d3592435917b62a8becff3a60db674f6 + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 507632 + timestamp: 1701648249706 +- kind: conda + name: lcms2 + version: '2.16' + build: h922389a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.16-h922389a_0.conda + sha256: be4847b1014d3cbbc524a53bdbf66182f86125775020563e11d914c8468dd97d + md5: ffdd8267a04c515e7ce69c727b051414 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 296219 + timestamp: 1701647961116 +- kind: conda + name: lcms2 + version: '2.16' + build: ha0e7c42_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + sha256: 151e0c84feb7e0747fabcc85006b8973b22f5abbc3af76a9add0b0ef0320ebe4 + md5: 66f6c134e76fe13cce8a9ea5814b5dd5 + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 211959 + timestamp: 1701647962657 +- kind: conda + name: lcms2 + version: '2.16' + build: hb7c19ff_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 + md5: 51bb7010fc86f70eee639b4bb7a894f5 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 245247 + timestamp: 1701647787198 +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe + md5: 048b02e3962f066da18efe3a21b77672 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + size: 669211 + timestamp: 1729655358674 +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe + md5: 048b02e3962f066da18efe3a21b77672 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 669211 + timestamp: 1729655358674 +- kind: conda + name: ld_impl_linux-aarch64 + version: '2.43' + build: h80caac9_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + sha256: 80ec7e8f006196808fac5bd4b3773a652847f97bbf08044cd87731424ac64f8b + md5: fcbde5ea19d55468953bf588770c0501 + constrains: + - binutils_impl_linux-aarch64 2.43 + license: GPL-3.0-only + license_family: GPL + size: 698245 + timestamp: 1729655345825 +- kind: conda + name: ld_impl_linux-aarch64 + version: '2.43' + build: h80caac9_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + sha256: 80ec7e8f006196808fac5bd4b3773a652847f97bbf08044cd87731424ac64f8b + md5: fcbde5ea19d55468953bf588770c0501 + constrains: + - binutils_impl_linux-aarch64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 698245 + timestamp: 1729655345825 +- kind: conda + name: lerc + version: 4.0.0 + build: h27087fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 + md5: 76bbff344f0134279f225174e9064c8f + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 281798 + timestamp: 1657977462600 +- kind: conda + name: lerc + version: 4.0.0 + build: h4de3ea5_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 + sha256: 2d09ef9b7796d83364957e420b41c32d94e628c3f0520b61c332518a7b5cd586 + md5: 1a0ffc65e03ce81559dbcb0695ad1476 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 262096 + timestamp: 1657978241894 +- kind: conda + name: lerc + version: 4.0.0 + build: h63175ca_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 + sha256: f4f39d7f6a2f9b407f8fb567a6c25755270421731d70f0ff331f5de4fa367488 + md5: 1900cb3cab5055833cfddb0ba233b074 + depends: + - vc >=14.2,<15 + - vs2015_runtime >=14.29.30037 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 194365 + timestamp: 1657977692274 +- kind: conda + name: lerc + version: 4.0.0 + build: h9a09cb3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + sha256: 6f068bb53dfb6147d3147d981bb851bb5477e769407ad4e6a68edf482fdcb958 + md5: de462d5aacda3b30721b512c5da4e742 + depends: + - libcxx >=13.0.1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 215721 + timestamp: 1657977558796 +- kind: conda + name: libcxx + version: 19.1.2 + build: ha82da77_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 + md5: ba89ad7c5477e6a9d020020fcdadd37d + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 521199 + timestamp: 1729038190391 +- kind: conda + name: libcxx + version: 19.1.2 + build: ha82da77_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 + md5: ba89ad7c5477e6a9d020020fcdadd37d + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 521199 + timestamp: 1729038190391 +- kind: conda + name: libdeflate + version: '1.22' + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.22-h2466b09_0.conda + sha256: 579c634b7de8869cb1d76eccd4c032dc275d5a017212128502ea4dc828a5b361 + md5: a3439ce12d4e3cd887270d9436f9a4c8 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 155506 + timestamp: 1728177485361 +- kind: conda + name: libdeflate + version: '1.22' + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.22-h86ecc28_0.conda + sha256: 986207f130703897300ddc3637c52e86a5b21c735fe384bf48554d9a6d91c56d + md5: ff6a44e8b1707d02be2fe9a36ea88d4a + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 69601 + timestamp: 1728177137503 +- kind: conda + name: libdeflate + version: '1.22' + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + sha256: 780f0530a3adfc1497ba49d626931c6afc978c540e1abfde6ccd57128ded6ad6 + md5: b422943d5d772b7cc858b36ad2a92db5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 72242 + timestamp: 1728177071251 +- kind: conda + name: libdeflate + version: '1.22' + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + sha256: 3552894ca62bebc33d05982937cda25a4fa19e56a82af2ff20944ff4c2532fda + md5: 2d3e3f3d8ab315748420ef58d5a3ae0f + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 54089 + timestamp: 1728177149927 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + sha256: 4bb47bb2cd09898737a5211e2992d63c555d63715a07ba56eae0aff31fb89c22 + md5: 59f4c43bb1b5ef1c71946ff2cbf59524 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 73616 + timestamp: 1725568742634 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + sha256: 4bb47bb2cd09898737a5211e2992d63c555d63715a07ba56eae0aff31fb89c22 + md5: 59f4c43bb1b5ef1c71946ff2cbf59524 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 73616 + timestamp: 1725568742634 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + sha256: 02341c9c35128055fd404dfe675832b80f2bf9dbb99539457652c11c06e52757 + md5: 1d2b842bb76e268625e8ee8d0a9fe8c3 + depends: + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 72342 + timestamp: 1725568840022 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + sha256: 02341c9c35128055fd404dfe675832b80f2bf9dbb99539457652c11c06e52757 + md5: 1d2b842bb76e268625e8ee8d0a9fe8c3 + depends: + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 72342 + timestamp: 1725568840022 +- kind: conda + name: libexpat + version: 2.6.3 + build: he0c23c2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + sha256: 9543965d155b8da96fc67dd81705fe5c2571c7c00becc8de5534c850393d4e3c + md5: 21415fbf4d0de6767a621160b43e5dea + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 138992 + timestamp: 1725569106114 +- kind: conda + name: libexpat + version: 2.6.3 + build: he0c23c2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + sha256: 9543965d155b8da96fc67dd81705fe5c2571c7c00becc8de5534c850393d4e3c + md5: 21415fbf4d0de6767a621160b43e5dea + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 138992 + timestamp: 1725569106114 +- kind: conda + name: libexpat + version: 2.6.3 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a + md5: 5f22f07c2ab2dea8c66fe9585a062c96 + depends: + - __osx >=11.0 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 63895 + timestamp: 1725568783033 +- kind: conda + name: libexpat + version: 2.6.3 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a + md5: 5f22f07c2ab2dea8c66fe9585a062c96 + depends: + - __osx >=11.0 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 63895 + timestamp: 1725568783033 +- kind: conda + name: libffi + version: 3.4.2 + build: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + size: 39020 + timestamp: 1636488587153 +- kind: conda + name: libffi + version: 3.4.2 + build: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + purls: [] + size: 39020 + timestamp: 1636488587153 +- kind: conda + name: libffi + version: 3.4.2 + build: h3557bc0_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + size: 59450 + timestamp: 1636488255090 +- kind: conda + name: libffi + version: 3.4.2 + build: h3557bc0_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 59450 + timestamp: 1636488255090 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libffi + version: 3.4.2 + build: h8ffe710_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 + md5: 2c96d1b6915b408893f9472569dee135 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: MIT + license_family: MIT + size: 42063 + timestamp: 1636489106777 +- kind: conda + name: libffi + version: 3.4.2 + build: h8ffe710_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 + md5: 2c96d1b6915b408893f9472569dee135 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: MIT + license_family: MIT + purls: [] + size: 42063 + timestamp: 1636489106777 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 + md5: 511b511c5445e324066c3377481bcab8 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==14.2.0=*_1 + - libgomp 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 535243 + timestamp: 1729089435134 +- kind: conda + name: libgcc + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 + md5: 511b511c5445e324066c3377481bcab8 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==14.2.0=*_1 + - libgomp 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 535243 + timestamp: 1729089435134 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: he9431aa_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 + md5: 0694c249c61469f2c0f7e2990782af21 + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54104 + timestamp: 1729089444587 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: he9431aa_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 + md5: 0694c249c61469f2c0f7e2990782af21 + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54104 + timestamp: 1729089444587 +- kind: conda + name: libglib + version: 2.82.2 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + size: 3931898 + timestamp: 1729191404130 +- kind: conda + name: libglib + version: 2.82.2 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 3931898 + timestamp: 1729191404130 +- kind: conda + name: libglib + version: 2.82.2 + build: hc486b8e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + sha256: 6797d24de7acd298f81a86078c64e4f3fea6d551a3e8892205c9e72a37a7cc3c + md5: 47f6d85fe47b865e56c539f2ba5f4dad + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + size: 4020802 + timestamp: 1729191545578 +- kind: conda + name: libglib + version: 2.82.2 + build: hc486b8e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + sha256: 6797d24de7acd298f81a86078c64e4f3fea6d551a3e8892205c9e72a37a7cc3c + md5: 47f6d85fe47b865e56c539f2ba5f4dad + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 4020802 + timestamp: 1729191545578 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libgomp + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf + md5: 376f0e73abbda6d23c0cb749adc195ef + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 463521 + timestamp: 1729089357313 +- kind: conda + name: libgomp + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf + md5: 376f0e73abbda6d23c0cb749adc195ef + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 463521 + timestamp: 1729089357313 +- kind: conda + name: libiconv + version: '1.17' + build: h31becfc_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + size: 705787 + timestamp: 1702684557134 +- kind: conda + name: libiconv + version: '1.17' + build: h31becfc_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705787 + timestamp: 1702684557134 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + size: 705775 + timestamp: 1702682170569 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705775 + timestamp: 1702682170569 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.0.0-h31becfc_1.conda + sha256: 675bc1f2a8581cd34a86c412663ec29c5f90c1d9f8d11866aa1ade5cdbdf8429 + md5: ed24e702928be089d9ba3f05618515c6 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 647126 + timestamp: 1694475003570 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hb547adb_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + sha256: a42054eaa38e84fc1e5ab443facac4bbc9d1b6b6f23f54b7bf4f1eb687e1d993 + md5: 3ff1e053dc3a2b8e36b9bfa4256a58d1 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 547541 + timestamp: 1694475104253 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hcfcfb64_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda + sha256: 4e7808e3098b4b4ed7e287f63bb24f9045cc4d95bfd39f0db870fc2837d74dff + md5: 3f1b948619c45b1ca714d60c7389092c + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 822966 + timestamp: 1694475223854 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f + md5: ea25936bb4080d843790b586850f82b8 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 618575 + timestamp: 1694474974816 +- kind: conda + name: libnsl + version: 2.0.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + size: 34501 + timestamp: 1697358973269 +- kind: conda + name: libnsl + version: 2.0.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 34501 + timestamp: 1697358973269 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libpng + version: 1.6.44 + build: h3ca93ac_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda + sha256: 0d3d6ff9225f6918ac225e3839c0d91e5af1da08a4ebf59cac1bfd86018db945 + md5: 639ac6b55a40aa5de7b8c1b4d78f9e81 + depends: + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: zlib-acknowledgement + purls: [] + size: 348933 + timestamp: 1726235196095 +- kind: conda + name: libpng + version: 1.6.44 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + sha256: e5b14f7a01c2db4362d8591f42f82f336ed48d5e4079e4d1f65d0c2a3637ea78 + md5: f4cc49d7aa68316213e4b12be35308d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 290661 + timestamp: 1726234747153 +- kind: conda + name: libpng + version: 1.6.44 + build: hc14010f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + sha256: 38f8759a3eb8060deabd4db41f0f023514d853e46ddcbd0ba21768fc4e563bb1 + md5: fb36e93f0ea6a6f5d2b99984f34b049e + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 263385 + timestamp: 1726234714421 +- kind: conda + name: libpng + version: 1.6.44 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.44-hc4a20ef_0.conda + sha256: 23b5ce15cf9c6017641a8396bab00ae807dd9f662718cfa7f61de114d0c97647 + md5: 5d25802b25fcc7419fa13e21affaeb3a + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 294907 + timestamp: 1726236639270 +- kind: conda + name: libsqlite + version: 3.47.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + sha256: 4f3cd0477c831eab48fb7fa3ed91d918aeb644fad9b4014726d445339750cdcc + md5: 964bef59135d876c596ae67b3315e812 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Unlicense + size: 884970 + timestamp: 1729592254351 +- kind: conda + name: libsqlite + version: 3.47.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + sha256: 4f3cd0477c831eab48fb7fa3ed91d918aeb644fad9b4014726d445339750cdcc + md5: 964bef59135d876c596ae67b3315e812 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Unlicense + purls: [] + size: 884970 + timestamp: 1729592254351 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + sha256: 76ffc7a5823b51735c11d535f3666b3c9c7d1519f9fbb6fa9cdff79db01960b9 + md5: 540296f0ce9d3352188c15a89b30b9ac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 874704 + timestamp: 1729591931557 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + sha256: 76ffc7a5823b51735c11d535f3666b3c9c7d1519f9fbb6fa9cdff79db01960b9 + md5: 540296f0ce9d3352188c15a89b30b9ac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 874704 + timestamp: 1729591931557 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hbaaea75_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + sha256: 76aa4bbbaa2334689b16048f04ac4c7406e9bfb1f225ac7107fd2a73f85329cf + md5: 5bbe4802d5460b80620411fe1da8fec3 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 837789 + timestamp: 1729592072314 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hbaaea75_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + sha256: 76aa4bbbaa2334689b16048f04ac4c7406e9bfb1f225ac7107fd2a73f85329cf + md5: 5bbe4802d5460b80620411fe1da8fec3 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 837789 + timestamp: 1729592072314 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + sha256: 469ed05e9a1622b0204a2b6cf620c9054bf6904e2ed818a1f91ee96a7bc64517 + md5: ccbe261fb8c1f1cd1a3122592247d3c4 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 1042108 + timestamp: 1729592001716 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + sha256: 469ed05e9a1622b0204a2b6cf620c9054bf6904e2ed818a1f91ee96a7bc64517 + md5: ccbe261fb8c1f1cd1a3122592247d3c4 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 1042108 + timestamp: 1729592001716 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: h3f4de04_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 + md5: 37f489acd39e22b623d2d1e5ac6d195c + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 3816794 + timestamp: 1729089463404 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: h3f4de04_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 + md5: 37f489acd39e22b623d2d1e5ac6d195c + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3816794 + timestamp: 1729089463404 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54105 + timestamp: 1729027780628 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54105 + timestamp: 1729027780628 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: hf1166c9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd + md5: 0e75771b8a03afae5a2c6ce71bc733f5 + depends: + - libstdcxx 14.2.0 h3f4de04_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54133 + timestamp: 1729089498541 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: hf1166c9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd + md5: 0e75771b8a03afae5a2c6ce71bc733f5 + depends: + - libstdcxx 14.2.0 h3f4de04_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54133 + timestamp: 1729089498541 +- kind: conda + name: libtiff + version: 4.7.0 + build: he137b08_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + sha256: 9890121db85f6ef463fe12eb04ef1471176e3ef3b5e2d62e8d6dac713df00df4 + md5: 63872517c98aa305da58a757c443698e + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 428156 + timestamp: 1728232228989 +- kind: conda + name: libtiff + version: 4.7.0 + build: hec21d91_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-hec21d91_1.conda + sha256: 14ecb9e129b1b5ffd6d4bee48de95cd2cd0973c712e1b965d3ef977cca23936d + md5: 1f80061f5ba6956fcdc381f34618cd8d + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 464938 + timestamp: 1728232266969 +- kind: conda + name: libtiff + version: 4.7.0 + build: hfc51747_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.0-hfc51747_1.conda + sha256: 902cb9f7f54d17dcfd54ce050b1ce2bc944b9bbd1748913342c2ea1e1140f8bb + md5: eac317ed1cc6b9c0af0c27297e364665 + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 978865 + timestamp: 1728232594877 +- kind: conda + name: libtiff + version: 4.7.0 + build: hfce79cd_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-hfce79cd_1.conda + sha256: 97ba24c74750b6e731b3fe0d2a751cda6148b4937d2cc3f72d43bf7b3885c39d + md5: b9abf45f7c64caf3303725f1aa0e9a4d + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=17 + - libdeflate >=1.22,<1.23.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 366323 + timestamp: 1728232400072 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libuuid + version: 2.38.1 + build: hb4cce97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + size: 35720 + timestamp: 1680113474501 +- kind: conda + name: libuuid + version: 2.38.1 + build: hb4cce97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 35720 + timestamp: 1680113474501 +- kind: conda + name: libuv + version: 1.49.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 + md5: 4bc348e3a1a74d20a3f9beb866d75e0a + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 410500 + timestamp: 1729322654121 +- kind: conda + name: libuv + version: 1.49.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 + md5: 4bc348e3a1a74d20a3f9beb866d75e0a + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 410500 + timestamp: 1729322654121 +- kind: conda + name: libuv + version: 1.49.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 + md5: 1899e1ec2be63386c41c4db31d3056af + depends: + - libgcc >=13 + license: MIT + license_family: MIT + size: 627484 + timestamp: 1729322575379 +- kind: conda + name: libuv + version: 1.49.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 + md5: 1899e1ec2be63386c41c4db31d3056af + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 627484 + timestamp: 1729322575379 +- kind: conda + name: libuv + version: 1.49.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 + md5: 070e3c9ddab77e38799d5c30b109c633 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 884647 + timestamp: 1729322566955 +- kind: conda + name: libuv + version: 1.49.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 + md5: 070e3c9ddab77e38799d5c30b109c633 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 884647 + timestamp: 1729322566955 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.4.0-h31becfc_0.conda + sha256: 10dded60f274e29c573cfacf6e96f5d0fc374ee431250374a44cbd773916ab9d + md5: 5fd7ab3e5f382c70607fbac6335e6e19 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 363577 + timestamp: 1713201785160 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda + sha256: 0d4bad713a512d79bfeb4d61821f447afab8b0792aca823f505ce6b195e9fde5 + md5: c0af0edfebe780b19940e94871f1a765 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 287750 + timestamp: 1713200194013 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hcfcfb64_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda + sha256: d0ca51cb1de9192be9a3238e71fbcca5a535619c499c4f4c9b2ed41c14d36770 + md5: abd61d0ab127ec5cd68f62c2969e6f34 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 274359 + timestamp: 1713200524021 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f + md5: b26e8aa824079e1be0294e7152ca4559 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 438953 + timestamp: 1713199854503 +- kind: conda + name: libxcb + version: '1.16' + build: h013a479_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda + sha256: abae56e12a4c62730b899fdfb82628a9ac171c4ce144fc9f34ae024957a82a0e + md5: f0b599acdc82d5bc7e3b105833e7c5c8 + depends: + - m2w64-gcc-libs + - m2w64-gcc-libs-core + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 989459 + timestamp: 1724419883091 +- kind: conda + name: libxcb + version: 1.17.0 + build: h262b8f6_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + sha256: 461cab3d5650ac6db73a367de5c8eca50363966e862dcf60181d693236b1ae7b + md5: cd14ee5cca2464a425b1dbfc24d90db2 + depends: + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 397493 + timestamp: 1727280745441 +- kind: conda + name: libxcb + version: 1.17.0 + build: h8a09558_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 395888 + timestamp: 1727278577118 +- kind: conda + name: libxcb + version: 1.17.0 + build: hdb1d25a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + sha256: bd3816218924b1e43b275863e21a3e13a5db4a6da74cca8e60bc3c213eb62f71 + md5: af523aae2eca6dfa1c8eec693f5b9a79 + depends: + - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 323658 + timestamp: 1727278733917 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + size: 114269 + timestamp: 1702724369203 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 114269 + timestamp: 1702724369203 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libzlib + version: 1.3.1 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + md5: 41fbfac52c601159df6c01f875de31b9 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 55476 + timestamp: 1727963768015 +- kind: conda + name: libzlib + version: 1.3.1 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + md5: 41fbfac52c601159df6c01f875de31b9 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 55476 + timestamp: 1727963768015 +- kind: conda + name: libzlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: libzlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: libzlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 66657 + timestamp: 1727963199518 +- kind: conda + name: libzlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 66657 + timestamp: 1727963199518 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 60963 + timestamp: 1727963148474 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 +- kind: conda + name: m2w64-gcc-libgfortran + version: 5.3.0 + build: '6' + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 + md5: 066552ac6b907ec6d72c0ddab29050dc + depends: + - m2w64-gcc-libs-core + - msys2-conda-epoch ==20160418 + license: GPL, LGPL, FDL, custom + size: 350687 + timestamp: 1608163451316 +- kind: conda + name: m2w64-gcc-libgfortran + version: 5.3.0 + build: '6' + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 + md5: 066552ac6b907ec6d72c0ddab29050dc + depends: + - m2w64-gcc-libs-core + - msys2-conda-epoch ==20160418 + license: GPL, LGPL, FDL, custom + purls: [] + size: 350687 + timestamp: 1608163451316 +- kind: conda + name: m2w64-gcc-libs + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa + md5: fe759119b8b3bfa720b8762c6fdc35de + depends: + - m2w64-gcc-libgfortran + - m2w64-gcc-libs-core + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + size: 532390 + timestamp: 1608163512830 +- kind: conda + name: m2w64-gcc-libs + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa + md5: fe759119b8b3bfa720b8762c6fdc35de + depends: + - m2w64-gcc-libgfortran + - m2w64-gcc-libs-core + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 532390 + timestamp: 1608163512830 +- kind: conda + name: m2w64-gcc-libs-core + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 + md5: 4289d80fb4d272f1f3b56cfe87ac90bd + depends: + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + size: 219240 + timestamp: 1608163481341 +- kind: conda + name: m2w64-gcc-libs-core + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 + md5: 4289d80fb4d272f1f3b56cfe87ac90bd + depends: + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 219240 + timestamp: 1608163481341 +- kind: conda + name: m2w64-gmp + version: 6.1.0 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 + md5: 53a1c73e1e3d185516d7e3af177596d9 + depends: + - msys2-conda-epoch ==20160418 + license: LGPL3 + size: 743501 + timestamp: 1608163782057 +- kind: conda + name: m2w64-gmp + version: 6.1.0 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 + md5: 53a1c73e1e3d185516d7e3af177596d9 + depends: + - msys2-conda-epoch ==20160418 + license: LGPL3 + purls: [] + size: 743501 + timestamp: 1608163782057 +- kind: conda + name: m2w64-jq + version: '1.6' + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + sha256: d722a8c06f44dfb5f357608e6e1d40d1f1c926316bbee5d1e71d93823554646b + md5: 209cbf1b222dc774cb29ce57796500b3 + depends: + - m2w64-gcc-libs + - m2w64-oniguruma + license: MIT + license_family: MIT + size: 424702 + timestamp: 1591860215369 +- kind: conda + name: m2w64-jq + version: '1.6' + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + sha256: d722a8c06f44dfb5f357608e6e1d40d1f1c926316bbee5d1e71d93823554646b + md5: 209cbf1b222dc774cb29ce57796500b3 + depends: + - m2w64-gcc-libs + - m2w64-oniguruma + license: MIT + license_family: MIT + purls: [] + size: 424702 + timestamp: 1591860215369 +- kind: conda + name: m2w64-libwinpthread-git + version: 5.0.0.4634.697f757 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 + md5: 774130a326dee16f1ceb05cc687ee4f0 + depends: + - msys2-conda-epoch ==20160418 + license: MIT, BSD + size: 31928 + timestamp: 1608166099896 +- kind: conda + name: m2w64-libwinpthread-git + version: 5.0.0.4634.697f757 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 + md5: 774130a326dee16f1ceb05cc687ee4f0 + depends: + - msys2-conda-epoch ==20160418 + license: MIT, BSD + purls: [] + size: 31928 + timestamp: 1608166099896 +- kind: conda + name: m2w64-oniguruma + version: 6.9.5 + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + sha256: 523edeac9788aa61243bd2ceb7b8bdb1a86b68c9f7f1aeb933085893d2886cc3 + md5: 61c9b808f92724106a63dd7b50979d6b + depends: + - m2w64-gcc-libs + license: BSD-2-Clause + license_family: BSD + size: 426599 + timestamp: 1591828659130 +- kind: conda + name: m2w64-oniguruma + version: 6.9.5 + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + sha256: 523edeac9788aa61243bd2ceb7b8bdb1a86b68c9f7f1aeb933085893d2886cc3 + md5: 61c9b808f92724106a63dd7b50979d6b + depends: + - m2w64-gcc-libs + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 426599 + timestamp: 1591828659130 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + size: 64356 + timestamp: 1686175179621 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + size: 64356 + timestamp: 1686175179621 +- kind: conda + name: mdurl + version: 0.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 14680 + timestamp: 1704317789138 +- kind: conda + name: mdurl + version: 0.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping + size: 14680 + timestamp: 1704317789138 +- kind: conda + name: more-itertools + version: 10.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + sha256: 2315b7dba237e16b0e1b601725a8e03e062421e0be28d8a25dc35dd9bd93a342 + md5: 3364591bebd600979606791e1dff7cb6 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 57345 + timestamp: 1725630183289 +- kind: conda + name: more-itertools + version: 10.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + sha256: 2315b7dba237e16b0e1b601725a8e03e062421e0be28d8a25dc35dd9bd93a342 + md5: 3364591bebd600979606791e1dff7cb6 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/more-itertools?source=hash-mapping + size: 57345 + timestamp: 1725630183289 +- kind: conda + name: msys2-conda-epoch + version: '20160418' + build: '1' + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 + md5: b0309b72560df66f71a9d5e34a5efdfa + size: 3227 + timestamp: 1608166968312 +- kind: conda + name: msys2-conda-epoch + version: '20160418' + build: '1' + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 + md5: b0309b72560df66f71a9d5e34a5efdfa + purls: [] + size: 3227 + timestamp: 1608166968312 +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + size: 802321 + timestamp: 1724658775723 +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 802321 + timestamp: 1724658775723 +- kind: conda + name: ncurses + version: '6.5' + build: hcccb83c_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 + md5: 91d49c85cacd92caa40cf375ef72a25d + depends: + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + size: 924472 + timestamp: 1724658573518 +- kind: conda + name: ncurses + version: '6.5' + build: hcccb83c_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 + md5: 91d49c85cacd92caa40cf375ef72a25d + depends: + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 924472 + timestamp: 1724658573518 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: nodejs + version: 22.9.0 + build: h08fde81_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + sha256: 736a4738aba32a03401aa25c8f740e4afe4aea02bc06651b59b06f0fdc024fdf + md5: 3771a3a6abe5a8db8910d5ebf144811b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=17 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 14859715 + timestamp: 1726671037225 +- kind: conda + name: nodejs + version: 22.9.0 + build: h08fde81_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + sha256: 736a4738aba32a03401aa25c8f740e4afe4aea02bc06651b59b06f0fdc024fdf + md5: 3771a3a6abe5a8db8910d5ebf144811b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=17 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 14859715 + timestamp: 1726671037225 +- kind: conda + name: nodejs + version: 22.9.0 + build: h57928b3_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + sha256: 6d74f0dbb91eb2049199ba801a3db67965f990aef44084f9ae51a1f70c2996f6 + md5: 6aa54ed90a643a11a005491ff316b1c4 + license: MIT + license_family: MIT + size: 25378221 + timestamp: 1726657153171 +- kind: conda + name: nodejs + version: 22.9.0 + build: h57928b3_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + sha256: 6d74f0dbb91eb2049199ba801a3db67965f990aef44084f9ae51a1f70c2996f6 + md5: 6aa54ed90a643a11a005491ff316b1c4 + license: MIT + license_family: MIT + purls: [] + size: 25378221 + timestamp: 1726657153171 +- kind: conda + name: nodejs + version: 22.9.0 + build: h8374285_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + sha256: ff2186a51d389c18423109af3abf6377d4ef5b1370a81ee5f8fb2e036d79cf4f + md5: 6a9739c1ce3f9714b705a655872b5a4d + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 21653106 + timestamp: 1726665120657 +- kind: conda + name: nodejs + version: 22.9.0 + build: h8374285_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + sha256: ff2186a51d389c18423109af3abf6377d4ef5b1370a81ee5f8fb2e036d79cf4f + md5: 6a9739c1ce3f9714b705a655872b5a4d + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21653106 + timestamp: 1726665120657 +- kind: conda + name: nodejs + version: 22.9.0 + build: hf235a45_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 + md5: 40255c9ffb722d614b02ca7aaee6abcb + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 21198038 + timestamp: 1726661026112 +- kind: conda + name: nodejs + version: 22.9.0 + build: hf235a45_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 + md5: 40255c9ffb722d614b02ca7aaee6abcb + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21198038 + timestamp: 1726661026112 +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + sha256: 456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0 + requires_python: '>=3.10' +- kind: conda + name: oniguruma + version: 6.9.9 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + sha256: e21b1822736959ba434ebce452ee86844a11d918c8b1c48c71f15e9a932fd571 + md5: 475018b8e0b8720c985a185427f5bf13 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 250005 + timestamp: 1697487236819 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + sha256: e21b1822736959ba434ebce452ee86844a11d918c8b1c48c71f15e9a932fd571 + md5: 475018b8e0b8720c985a185427f5bf13 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 250005 + timestamp: 1697487236819 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + sha256: 66632aeef5b74e15746161db8fa8b5150a191ab05823d7d2f1587bdf96674c7b + md5: 770c654e0d5bfa3aa1e6ac5440815cda + license: BSD-2-Clause + license_family: BSD + size: 223231 + timestamp: 1697485732214 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + sha256: 66632aeef5b74e15746161db8fa8b5150a191ab05823d7d2f1587bdf96674c7b + md5: 770c654e0d5bfa3aa1e6ac5440815cda + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 223231 + timestamp: 1697485732214 +- kind: conda + name: oniguruma + version: 6.9.9 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed + md5: 77dab674d16c1525ebe65e67de30de0d + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 246869 + timestamp: 1697485543293 +- kind: conda + name: oniguruma + version: 6.9.9 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed + md5: 77dab674d16c1525ebe65e67de30de0d + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 246869 + timestamp: 1697485543293 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h0d9d63b_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.2-h0d9d63b_0.conda + sha256: d83375856601bc67c11295b537548a937a6896ede9d0a51d78bf5e921ab07c6f + md5: fd2898519e839d5ceb778343f39a3176 + depends: + - libgcc-ng >=12 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 374964 + timestamp: 1709159226478 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h3d672ee_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda + sha256: dda71cbe094234ab208f3552dec1f4ca6f2e614175d010808d6cb66ecf0bc753 + md5: 7e7099ad94ac3b599808950cec30ad4e + depends: + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 237974 + timestamp: 1709159764160 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h488ebb8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + sha256: 5600a0b82df042bd27d01e4e687187411561dfc11cc05143a08ce29b64bf2af2 + md5: 7f2e286780f072ed750df46dc2631138 + depends: + - libgcc-ng >=12 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 341592 + timestamp: 1709159244431 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h9f1df11_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.2-h9f1df11_0.conda + sha256: 472d6eaffc1996e6af35ec8e91c967f472a536a470079bfa56383cc0dbf4d463 + md5: 5029846003f0bc14414b9128a1f7c84b + depends: + - libcxx >=16 + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 316603 + timestamp: 1709159627299 +- kind: conda + name: openssl + version: 3.3.2 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + sha256: a45c42f3577294e22ac39ddb6ef5a64fd5322e8a6725afefbf4f2b4109340bf9 + md5: 1dc86753693df5e3326bb8a85b74c589 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 8396053 + timestamp: 1725412961673 +- kind: conda + name: openssl + version: 3.3.2 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + sha256: a45c42f3577294e22ac39ddb6ef5a64fd5322e8a6725afefbf4f2b4109340bf9 + md5: 1dc86753693df5e3326bb8a85b74c589 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 8396053 + timestamp: 1725412961673 +- kind: conda + name: openssl + version: 3.3.2 + build: h8359307_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 + md5: 1773ebccdc13ec603356e8ff1db9e958 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + size: 2882450 + timestamp: 1725410638874 +- kind: conda + name: openssl + version: 3.3.2 + build: h8359307_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 + md5: 1773ebccdc13ec603356e8ff1db9e958 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2882450 + timestamp: 1725410638874 +- kind: conda + name: openssl + version: 3.3.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + sha256: 4669d26dbf81e4d72093d8260f55d19d57204d82b1d9440be83d11d313b5990c + md5: 9e1e477b3f8ee3789297883faffa708b + depends: + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + size: 3428083 + timestamp: 1725412266679 +- kind: conda + name: openssl + version: 3.3.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + sha256: 4669d26dbf81e4d72093d8260f55d19d57204d82b1d9440be83d11d313b5990c + md5: 9e1e477b3f8ee3789297883faffa708b + depends: + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3428083 + timestamp: 1725412266679 +- kind: conda + name: openssl + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + sha256: cee91036686419f6dd6086902acf7142b4916e1c4ba042e9ca23e151da012b6d + md5: 4d638782050ab6faa27275bed57e9b4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + size: 2891789 + timestamp: 1725410790053 +- kind: conda + name: openssl + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + sha256: cee91036686419f6dd6086902acf7142b4916e1c4ba042e9ca23e151da012b6d + md5: 4d638782050ab6faa27275bed57e9b4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2891789 + timestamp: 1725410790053 +- kind: pypi + name: outcome + version: 1.3.0.post0 + url: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + sha256: e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b + requires_dist: + - attrs>=19.2.0 + requires_python: '>=3.7' +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + size: 50290 + timestamp: 1718189540074 +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 50290 + timestamp: 1718189540074 +- kind: conda + name: pathspec + version: 0.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d + md5: 17064acba08d3686f1135b5ec1b32b12 + depends: + - python >=3.7 + license: MPL-2.0 + license_family: MOZILLA + size: 41173 + timestamp: 1702250135032 +- kind: conda + name: pathspec + version: 0.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d + md5: 17064acba08d3686f1135b5ec1b32b12 + depends: + - python >=3.7 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/pathspec?source=hash-mapping + size: 41173 + timestamp: 1702250135032 +- kind: conda + name: pcre2 + version: '10.44' + build: h070dd5b_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + sha256: e9f4b912e48514771d477f2ee955f59d4ff4ef799c3d4d16e4d0f335ce91df67 + md5: 94022de9682cb1a0bb18a99cbc3541b3 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 884590 + timestamp: 1723488793100 +- kind: conda + name: pcre2 + version: '10.44' + build: h070dd5b_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + sha256: e9f4b912e48514771d477f2ee955f59d4ff4ef799c3d4d16e4d0f335ce91df67 + md5: 94022de9682cb1a0bb18a99cbc3541b3 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 884590 + timestamp: 1723488793100 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 952308 + timestamp: 1723488734144 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 952308 + timestamp: 1723488734144 +- kind: conda + name: pexpect + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pexpect + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pillow + version: 10.4.0 + build: py312h381445a_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py312h381445a_1.conda + sha256: 0b52e708ac4b72e6e1608de517cd4c8e6517dd525e23163a69bf73c7261399fc + md5: c57e54ae4acca720fb3a44bee93cb5b9 + depends: + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.16,<2.0.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 42468305 + timestamp: 1726075694989 +- kind: conda + name: pillow + version: 11.0.0 + build: py312h5ab5af3_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.0.0-py312h5ab5af3_0.conda + sha256: 3cf43a5eb1f67f3a5f3ef1ec3a685f8767019cce24dbe46c4b76fee8a54fbacf + md5: 1c4bdfe659cfdedd372685ce2494e97b + depends: + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41756471 + timestamp: 1729068045876 +- kind: conda + name: pillow + version: 11.0.0 + build: py312h7b63e92_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + sha256: 13a464bea02c0df0199c20ef6bad24a6bc336aaf55bf8d6a133d0fe664463224 + md5: 385f46a4df6f97892503a841121a9acf + depends: + - __glibc >=2.17,<3.0.a0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41948418 + timestamp: 1729065846594 +- kind: conda + name: pillow + version: 11.0.0 + build: py312haf37ca6_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.0.0-py312haf37ca6_0.conda + sha256: 727b4c3faecdb6f6809cf20c5f32d2df4af34e0d5b9146b7588383bcba7990e8 + md5: dc9b51fbd2b6f7fea9b5123458864dbb + depends: + - __osx >=11.0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41737424 + timestamp: 1729065920347 +- kind: conda + name: pip + version: '24.2' + build: pyh8b19718_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + sha256: d820e5358bcb117fa6286e55d4550c60b0332443df62121df839eab2d11c890b + md5: 6c78fbb8ddfd64bcb55b5cbafd2d2c43 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + size: 1237976 + timestamp: 1724954490262 +- kind: conda + name: pip + version: '24.2' + build: pyh8b19718_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + sha256: d820e5358bcb117fa6286e55d4550c60b0332443df62121df839eab2d11c890b + md5: 6c78fbb8ddfd64bcb55b5cbafd2d2c43 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=hash-mapping + size: 1237976 + timestamp: 1724954490262 +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 20625 + timestamp: 1726613611845 +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 20625 + timestamp: 1726613611845 +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 8ff8303409ebed76bed4c3d655340320b768817d900ba208b394fdd7d7939a5c + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + sha256: e0e87b0c4dc8fce83c725dd851aec37bc4e882bb225ec8a96bd83cf32d4f1623 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + sha256: 7da2eb51a19c7f3b523e9faa9d98e7af92e52eb983a099979ea79c9668e3cbf7 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + sha256: 8dabb80e62f667fe2640a8b694e26a7b884c0b4803f7514a3954fc849126227b + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 23815 + timestamp: 1713667175451 +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 23815 + timestamp: 1713667175451 +- kind: conda + name: pnpm + version: 9.12.2 + build: h6417eb3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + sha256: 0caf7ddacb1d8adb16144a93cfaf7a70bff2f83e22cbaae4d3d91b71f28f9caf + md5: 711bc7fb6b870f4b5b180c181786d710 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + size: 3466596 + timestamp: 1729713864150 +- kind: conda + name: pnpm + version: 9.12.2 + build: h6417eb3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + sha256: 0caf7ddacb1d8adb16144a93cfaf7a70bff2f83e22cbaae4d3d91b71f28f9caf + md5: 711bc7fb6b870f4b5b180c181786d710 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3466596 + timestamp: 1729713864150 +- kind: conda + name: pnpm + version: 9.12.2 + build: haa868a1_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + sha256: ce0c2e4268cd81308b8c069564b9f7885d9c21ddd8b83120f0fabc66d9ab58d3 + md5: c70ffc202c1f5d9223a13a12310c874d + depends: + - nodejs >=22.9.0,<23.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 3319869 + timestamp: 1729714702980 +- kind: conda + name: pnpm + version: 9.12.2 + build: haa868a1_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + sha256: ce0c2e4268cd81308b8c069564b9f7885d9c21ddd8b83120f0fabc66d9ab58d3 + md5: c70ffc202c1f5d9223a13a12310c874d + depends: + - nodejs >=22.9.0,<23.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 3319869 + timestamp: 1729714702980 +- kind: conda + name: pnpm + version: 9.12.2 + build: hbf5023e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + sha256: aa25e9d0085be78115c5104ff905f9930d8585901a7a8d7278083f87ff4f6d25 + md5: 15d1e168a06119b34c9bd39187ce2af3 + depends: + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + size: 3516854 + timestamp: 1729713906302 +- kind: conda + name: pnpm + version: 9.12.2 + build: hbf5023e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + sha256: aa25e9d0085be78115c5104ff905f9930d8585901a7a8d7278083f87ff4f6d25 + md5: 15d1e168a06119b34c9bd39187ce2af3 + depends: + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3516854 + timestamp: 1729713906302 +- kind: conda + name: pnpm + version: 9.12.2 + build: hef028c3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + sha256: 6fd70df2e5e5a25aede2dfadd17530b2e7ecc0c41da43af89efd09dbbda8ca38 + md5: 8a157c984a8e384507438d62275868d5 + depends: + - __osx >=11.0 + - libcxx >=17 + - nodejs >=22.9.0,<23.0a0 + license: MIT + license_family: MIT + size: 3473615 + timestamp: 1729714099186 +- kind: conda + name: pnpm + version: 9.12.2 + build: hef028c3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + sha256: 6fd70df2e5e5a25aede2dfadd17530b2e7ecc0c41da43af89efd09dbbda8ca38 + md5: 8a157c984a8e384507438d62275868d5 + depends: + - __osx >=11.0 + - libcxx >=17 + - nodejs >=22.9.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3473615 + timestamp: 1729714099186 +- kind: conda + name: pthread-stubs + version: '0.4' + build: h86ecc28_1002 + build_number: 1002 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + sha256: 977dfb0cb3935d748521dd80262fe7169ab82920afd38ed14b7fee2ea5ec01ba + md5: bb5a90c93e3bac3d5690acf76b4a6386 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8342 + timestamp: 1726803319942 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hb9d3cd8_1002 + build_number: 1002 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8252 + timestamp: 1726802366959 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hcd874cb_1001 + build_number: 1001 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 + sha256: bb5a6ddf1a609a63addd6d7b488b0f58d05092ea84e9203283409bff539e202a + md5: a1f820480193ea83582b13249a7e7bd9 + depends: + - m2w64-gcc-libs + license: MIT + license_family: MIT + purls: [] + size: 6417 + timestamp: 1606147814351 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hd74edd7_1002 + build_number: 1002 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 + md5: 415816daf82e0b23a736a069a75e9da7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 8381 + timestamp: 1726802424786 +- kind: conda + name: ptyprocess + version: 0.7.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + size: 16546 + timestamp: 1609419417991 +- kind: conda + name: ptyprocess + version: 0.7.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 16546 + timestamp: 1609419417991 +- kind: conda + name: pycparser + version: '2.22' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 105098 + timestamp: 1711811634025 +- kind: conda + name: pycparser + version: '2.22' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=hash-mapping + size: 105098 + timestamp: 1711811634025 +- kind: pypi + name: pyee + version: 12.0.0 + url: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + sha256: 7b14b74320600049ccc7d0e0b1becd3b4bd0a03c745758225e31a59f4095c990 + requires_dist: + - typing-extensions + - build ; extra == 'dev' + - flake8 ; extra == 'dev' + - flake8-black ; extra == 'dev' + - pytest ; extra == 'dev' + - black ; extra == 'dev' + - isort ; extra == 'dev' + - jupyter-console ; extra == 'dev' + - mkdocs ; extra == 'dev' + - mkdocs-include-markdown-plugin ; extra == 'dev' + - mkdocstrings[python] ; extra == 'dev' + - sphinx ; extra == 'dev' + - toml ; extra == 'dev' + - tox ; extra == 'dev' + - trio ; extra == 'dev' + - twine ; extra == 'dev' + - twisted ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - trio ; python_full_version >= '3.7' and extra == 'dev' + - trio-typing ; python_full_version >= '3.7' and extra == 'dev' + - pytest-asyncio ; python_full_version >= '3.4' and extra == 'dev' + - pytest-trio ; python_full_version >= '3.7' and extra == 'dev' + requires_python: '>=3.8' +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + size: 879295 + timestamp: 1714846885370 +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 879295 + timestamp: 1714846885370 +- kind: pypi + name: pyodide-py + version: 0.26.3 + url: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + sha256: b63b6847c8906aa8f3c17df362135d0407aabf1d4b023557aed721d822e347a8 + requires_python: '>=3.12' +- kind: pypi + name: pysocks + version: 1.7.1 + url: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + sha256: 2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: conda + name: pytest + version: 8.3.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + sha256: e99376d0068455712109d233f5790458ff861aeceb458bfda74e353338e4d815 + md5: c03d61f31f38fdb9facf70c29958bf7a + depends: + - colorama + - exceptiongroup >=1.0.0rc8 + - iniconfig + - packaging + - pluggy <2,>=1.5 + - python >=3.8 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 258293 + timestamp: 1725977334143 +- kind: pypi + name: pytest-asyncio + version: 0.24.0 + url: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + sha256: a811296ed596b69bf0b6f3dc40f83bcaf341b155a269052d82efa2b25ac7037b + requires_dist: + - pytest<9,>=8.2 + - sphinx>=5.3 ; extra == 'docs' + - sphinx-rtd-theme>=1.0 ; extra == 'docs' + - coverage>=6.2 ; extra == 'testing' + - hypothesis>=5.7.1 ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: pytest-pyodide + version: 0.58.3 + url: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + sha256: 6425d8ac868090da70337bdef33bd8a082a353a4ecdb89f5371bcf58ac7390e7 + requires_dist: + - hypothesis + - pexpect + - playwright + - pytest + - pytest-asyncio + - selenium + - tblib>=3 + - build ; extra == 'test' + - pytest-cov ; extra == 'test' + - requests ; extra == 'test' + requires_python: '>=3.10' +- kind: conda + name: python + version: 3.12.7 + build: h5d932e8_0_cpython + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + sha256: 25570873d92d4d9490c6db780cc85e6c28bd3ff61dc1ece79f602cf82bc73bc1 + md5: e6cab21bb5787270388939cf41cc5f43 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 13762126 + timestamp: 1728057461028 +- kind: conda + name: python + version: 3.12.7 + build: h5d932e8_0_cpython + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + sha256: 25570873d92d4d9490c6db780cc85e6c28bd3ff61dc1ece79f602cf82bc73bc1 + md5: e6cab21bb5787270388939cf41cc5f43 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 13762126 + timestamp: 1728057461028 +- kind: conda + name: python + version: 3.12.7 + build: h739c21a_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef + md5: e0d82e57ebb456077565e6d82cd4a323 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 12975439 + timestamp: 1728057819519 +- kind: conda + name: python + version: 3.12.7 + build: h739c21a_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef + md5: e0d82e57ebb456077565e6d82cd4a323 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 12975439 + timestamp: 1728057819519 +- kind: conda + name: python + version: 3.12.7 + build: hc5c86c4_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d + md5: 0515111a9cdf69f83278f7c197db9807 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 31574780 + timestamp: 1728059777603 +- kind: conda + name: python + version: 3.12.7 + build: hc5c86c4_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d + md5: 0515111a9cdf69f83278f7c197db9807 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31574780 + timestamp: 1728059777603 +- kind: conda + name: python + version: 3.12.7 + build: hce54a09_0_cpython + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 + md5: 21f1f7c6ccf6b747c5086d2422c230e1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 15987537 + timestamp: 1728057382072 +- kind: conda + name: python + version: 3.12.7 + build: hce54a09_0_cpython + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 + md5: 21f1f7c6ccf6b747c5086d2422c230e1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 15987537 + timestamp: 1728057382072 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + sha256: 5ccdad9981753cc4a2d126e356673a21c0cd5b34e209cb8d476a3947d4ad9b39 + md5: 62b20f305498284a07dc6c45fd0e5c87 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6329 + timestamp: 1723823366253 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + sha256: 5ccdad9981753cc4a2d126e356673a21c0cd5b34e209cb8d476a3947d4ad9b39 + md5: 62b20f305498284a07dc6c45fd0e5c87 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6329 + timestamp: 1723823366253 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6278 + timestamp: 1723823099686 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6278 + timestamp: 1723823099686 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + sha256: 9486662af81a219e96d343449eff242f38d7c5128ced5ce5acf85857265058d6 + md5: e8681f534453af7afab4cd2bc1423eec + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6730 + timestamp: 1723823139725 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + sha256: 9486662af81a219e96d343449eff242f38d7c5128ced5ce5acf85857265058d6 + md5: e8681f534453af7afab4cd2bc1423eec + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6730 + timestamp: 1723823139725 +- kind: conda + name: pywin32-ctypes + version: 0.2.3 + build: py312h2e8e312_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + sha256: 3e3b97740b4ec2f54debf7bfdbaa9a81a7aabd4549051b926de91d05304c4948 + md5: c5f1cb65c56ec74687801960f8a31eb5 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 57449 + timestamp: 1727282288065 +- kind: conda + name: pywin32-ctypes + version: 0.2.3 + build: py312h2e8e312_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + sha256: 3e3b97740b4ec2f54debf7bfdbaa9a81a7aabd4549051b926de91d05304c4948 + md5: c5f1cb65c56ec74687801960f8a31eb5 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pywin32-ctypes?source=hash-mapping + size: 57449 + timestamp: 1727282288065 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: readline + version: '8.2' + build: h8fc344f_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 294092 + timestamp: 1679532238805 +- kind: conda + name: readline + version: '8.2' + build: h8fc344f_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 294092 + timestamp: 1679532238805 +- kind: conda + name: readline + version: '8.2' + build: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 250351 + timestamp: 1679532511311 +- kind: conda + name: readline + version: '8.2' + build: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 250351 + timestamp: 1679532511311 +- kind: conda + name: rich + version: 13.9.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + sha256: ec2a69babe41085a5bcec4ef80b2d5bade2ca399d971f57894dfb96cf59a18d1 + md5: 50dd5529812447e2b4e2a5dd6a6f1655 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + size: 185320 + timestamp: 1729623039134 +- kind: conda + name: rich + version: 13.9.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + sha256: ec2a69babe41085a5bcec4ef80b2d5bade2ca399d971f57894dfb96cf59a18d1 + md5: 50dd5529812447e2b4e2a5dd6a6f1655 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rich?source=hash-mapping + size: 185320 + timestamp: 1729623039134 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h7900ff3_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + sha256: c6d5d0bc7fb6cbfa3b8be8f2399a3c1308b3392a4e20bd1a0f29a828fda5ab20 + md5: 4840da9db2808db946a0d979603c6de4 + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 31601 + timestamp: 1725915741329 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h7900ff3_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + sha256: c6d5d0bc7fb6cbfa3b8be8f2399a3c1308b3392a4e20bd1a0f29a828fda5ab20 + md5: 4840da9db2808db946a0d979603c6de4 + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31601 + timestamp: 1725915741329 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h8025657_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + sha256: fd6bc45ba0c6bb097ad98037ad8d2ddf2449f28c2eedf57dfff54eeceefe90c6 + md5: 4ae02e3717828f5e92dfae068845afdd + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 31394 + timestamp: 1725917363210 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h8025657_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + sha256: fd6bc45ba0c6bb097ad98037ad8d2ddf2449f28c2eedf57dfff54eeceefe90c6 + md5: 4ae02e3717828f5e92dfae068845afdd + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31394 + timestamp: 1725917363210 +- kind: pypi + name: selenium + version: 4.25.0 + url: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + sha256: 3798d2d12b4a570bc5790163ba57fef10b2afee958bf1d80f2a3cf07c4141f33 + requires_dist: + - urllib3[socks]>=1.26,<3 + - trio~=0.17 + - trio-websocket~=0.9 + - certifi>=2021.10.8 + - typing-extensions~=4.9 + - websocket-client~=1.8 + requires_python: '>=3.8' +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 777462 + timestamp: 1727249510532 +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 777462 + timestamp: 1727249510532 +- kind: conda + name: shellingham + version: 1.5.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 14568 + timestamp: 1698144516278 +- kind: conda + name: shellingham + version: 1.5.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/shellingham?source=hash-mapping + size: 14568 + timestamp: 1698144516278 +- kind: conda + name: sniffio + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + size: 15064 + timestamp: 1708953086199 +- kind: conda + name: sniffio + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping + size: 15064 + timestamp: 1708953086199 +- kind: pypi + name: sortedcontainers + version: 2.4.0 + url: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- kind: pypi + name: tblib + version: 3.0.0 + url: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + sha256: 80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129 + requires_python: '>=3.8' +- kind: conda + name: tk + version: 8.6.13 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3351802 + timestamp: 1695506242997 +- kind: conda + name: tk + version: 8.6.13 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3351802 + timestamp: 1695506242997 +- kind: conda + name: tk + version: 8.6.13 + build: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3145523 + timestamp: 1699202432999 +- kind: conda + name: tk + version: 8.6.13 + build: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3145523 + timestamp: 1699202432999 +- kind: conda + name: tk + version: 8.6.13 + build: h5226925_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: fc048363eb8f03cd1737600a5d08aafe + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: TCL + license_family: BSD + size: 3503410 + timestamp: 1699202577803 +- kind: conda + name: tk + version: 8.6.13 + build: h5226925_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: fc048363eb8f03cd1737600a5d08aafe + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: TCL + license_family: BSD + purls: [] + size: 3503410 + timestamp: 1699202577803 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tomli + version: 2.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 18203 + timestamp: 1727974767524 +- kind: conda + name: tomli + version: 2.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 18203 + timestamp: 1727974767524 +- kind: conda + name: tomli-w + version: 1.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + sha256: 25b88bb2c4e79be642d8e5b5738781404055cd596403a20511e6fa30f0c71585 + md5: 2c5eb5b3a0fd2c4787d8162f57da2a20 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 12323 + timestamp: 1728405537678 +- kind: conda + name: tomli-w + version: 1.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + sha256: 25b88bb2c4e79be642d8e5b5738781404055cd596403a20511e6fa30f0c71585 + md5: 2c5eb5b3a0fd2c4787d8162f57da2a20 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli-w?source=hash-mapping + size: 12323 + timestamp: 1728405537678 +- kind: conda + name: tomlkit + version: 0.13.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + sha256: 2ccfe8dafdc1f1af944bca6bdf28fa97b5fa6125d84b8895a4e918a020853c12 + md5: 0062a5f3347733f67b0f33ca48cc21dd + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 37279 + timestamp: 1723631592742 +- kind: conda + name: tomlkit + version: 0.13.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + sha256: 2ccfe8dafdc1f1af944bca6bdf28fa97b5fa6125d84b8895a4e918a020853c12 + md5: 0062a5f3347733f67b0f33ca48cc21dd + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomlkit?source=hash-mapping + size: 37279 + timestamp: 1723631592742 +- kind: pypi + name: trio + version: 0.27.0 + url: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + sha256: 68eabbcf8f457d925df62da780eff15ff5dc68fd6b367e2dde59f7aaf2a0b884 + requires_dist: + - attrs>=23.2.0 + - sortedcontainers + - idna + - outcome + - sniffio>=1.3.0 + - cffi>=1.14 ; implementation_name != 'pypy' and os_name == 'nt' + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.8' +- kind: pypi + name: trio-websocket + version: 0.11.1 + url: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + sha256: 520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638 + requires_dist: + - trio>=0.11 + - wsproto>=0.14 + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.7' +- kind: conda + name: trove-classifiers + version: 2024.10.21.16 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + sha256: 591e4ffdc95660b9e596c15b65cad35a70b36235f02dbd089ccc198dd5af0e71 + md5: 501f6d3288160a31d99a2f1321e77393 + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + size: 18429 + timestamp: 1729552033760 +- kind: conda + name: trove-classifiers + version: 2024.10.21.16 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + sha256: 591e4ffdc95660b9e596c15b65cad35a70b36235f02dbd089ccc198dd5af0e71 + md5: 501f6d3288160a31d99a2f1321e77393 + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/trove-classifiers?source=hash-mapping + size: 18429 + timestamp: 1729552033760 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + purls: [] + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: ucrt + version: 10.0.22621.0 + build: h57928b3_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 + constrains: + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + size: 559710 + timestamp: 1728377334097 +- kind: conda + name: ucrt + version: 10.0.22621.0 + build: h57928b3_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 + constrains: + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + purls: [] + size: 559710 + timestamp: 1728377334097 +- kind: pypi + name: urllib3 + version: 2.2.3 + url: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + sha256: ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2<5,>=4 ; extra == 'h2' + - pysocks!=1.5.7,<2.0,>=1.5.6 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- kind: conda + name: userpath + version: 1.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + sha256: c8cbddd625340e1b00b53bafabc764526ee85f7ddb91018424bab0eea057796d + md5: 5bf074c9253a3bf914becfc50757406f + depends: + - click + - python >=3.6 + license: MIT + license_family: MIT + size: 17423 + timestamp: 1632758637093 +- kind: conda + name: userpath + version: 1.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + sha256: c8cbddd625340e1b00b53bafabc764526ee85f7ddb91018424bab0eea057796d + md5: 5bf074c9253a3bf914becfc50757406f + depends: + - click + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/userpath?source=hash-mapping + size: 17423 + timestamp: 1632758637093 +- kind: conda + name: uv + version: 0.4.26 + build: h0f3a69f_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + sha256: 4f05a61c3c3127ce7e487001215d20f49da0563fa4335462b2f6cc0028bb265b + md5: c4316a4c2b47ae154259fa5caffd53f1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + size: 9446110 + timestamp: 1729774270770 +- kind: conda + name: uv + version: 0.4.26 + build: h0f3a69f_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + sha256: 4f05a61c3c3127ce7e487001215d20f49da0563fa4335462b2f6cc0028bb265b + md5: c4316a4c2b47ae154259fa5caffd53f1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 9446110 + timestamp: 1729774270770 +- kind: conda + name: uv + version: 0.4.26 + build: h2016286_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + sha256: f63f7ab9e410899daf66e7ff343020b4bb8cf5f52413acca0dcb95ae9b04f854 + md5: f3f6ad5ca3aca4e0e5fd0f7f5f156093 + depends: + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + size: 8929757 + timestamp: 1729774724816 +- kind: conda + name: uv + version: 0.4.26 + build: h2016286_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + sha256: f63f7ab9e410899daf66e7ff343020b4bb8cf5f52413acca0dcb95ae9b04f854 + md5: f3f6ad5ca3aca4e0e5fd0f7f5f156093 + depends: + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 8929757 + timestamp: 1729774724816 +- kind: conda + name: uv + version: 0.4.26 + build: h41fe3af_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + sha256: f9530088e0a7319946c0dbc51c2e82bfa964fa3cb548e986053c7d8b6698056d + md5: 8beaeac747a7887e458e7de7e3d9fd6d + depends: + - __osx >=11.0 + - libcxx >=17 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR MIT + size: 8421278 + timestamp: 1729775629422 +- kind: conda + name: uv + version: 0.4.26 + build: h41fe3af_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + sha256: f9530088e0a7319946c0dbc51c2e82bfa964fa3cb548e986053c7d8b6698056d + md5: 8beaeac747a7887e458e7de7e3d9fd6d + depends: + - __osx >=11.0 + - libcxx >=17 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR MIT + purls: [] + size: 8421278 + timestamp: 1729775629422 +- kind: conda + name: uv + version: 0.4.26 + build: ha08ef0e_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + sha256: 57691a29d941ffbbae312c6dedccc303b6303e58487803e84db20a3304c0d269 + md5: a09f8193bdf8d1512340e8ec2432e82d + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 OR MIT + size: 10344775 + timestamp: 1729775595022 +- kind: conda + name: uv + version: 0.4.26 + build: ha08ef0e_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + sha256: 57691a29d941ffbbae312c6dedccc303b6303e58487803e84db20a3304c0d269 + md5: a09f8193bdf8d1512340e8ec2432e82d + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 OR MIT + purls: [] + size: 10344775 + timestamp: 1729775595022 +- kind: conda + name: vc + version: '14.3' + build: ha32ba9b_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 + depends: + - vc14_runtime >=14.38.33135 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + size: 17447 + timestamp: 1728400826998 +- kind: conda + name: vc + version: '14.3' + build: ha32ba9b_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 + depends: + - vc14_runtime >=14.38.33135 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17447 + timestamp: 1728400826998 +- kind: conda + name: vc14_runtime + version: 14.40.33810 + build: hcc2c482_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + size: 750719 + timestamp: 1728401055788 +- kind: conda + name: vc14_runtime + version: 14.40.33810 + build: hcc2c482_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + purls: [] + size: 750719 + timestamp: 1728401055788 +- kind: conda + name: virtualenv + version: 20.27.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + sha256: 18bae5ff9f02793ca56d295f0a5f1d4443623ee3be09a6805eb7d4b18245968c + md5: a6ed1227ba6ec37cfc2b25e6512f729f + depends: + - distlib <1,>=0.3.7 + - filelock <4,>=3.12.2 + - platformdirs <5,>=3.9.1 + - python >=3.8 + license: MIT + license_family: MIT + size: 2952166 + timestamp: 1729243861344 +- kind: conda + name: virtualenv + version: 20.27.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + sha256: 18bae5ff9f02793ca56d295f0a5f1d4443623ee3be09a6805eb7d4b18245968c + md5: a6ed1227ba6ec37cfc2b25e6512f729f + depends: + - distlib <1,>=0.3.7 + - filelock <4,>=3.12.2 + - platformdirs <5,>=3.9.1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/virtualenv?source=hash-mapping + size: 2952166 + timestamp: 1729243861344 +- kind: conda + name: vs2015_runtime + version: 14.40.33810 + build: h3bf8584_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 + depends: + - vc14_runtime >=14.40.33810 + license: BSD-3-Clause + license_family: BSD + size: 17453 + timestamp: 1728400827536 +- kind: conda + name: vs2015_runtime + version: 14.40.33810 + build: h3bf8584_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 + depends: + - vc14_runtime >=14.40.33810 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17453 + timestamp: 1728400827536 +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + sha256: f8a2a213b9179965db2d2eedececd69a37e287e902330509afae51c71a3a6842 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + sha256: b4364e14d44e3b7afe6a40bf608e9d0d2c40b09dece441d20f4f6e31906b729c + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + sha256: a07445073cf36a6e5d1dc28246a897dcbdaa537ba8be8805be65422ecca297eb + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + sha256: 5bdf1214ee3ee78a4a8a92da339f4c4c8c109e65af881b37f4adfc05d02af426 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: websocket-client + version: 1.8.0 + url: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + sha256: 17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526 + requires_dist: + - sphinx>=6.0 ; extra == 'docs' + - sphinx-rtd-theme>=1.1.0 ; extra == 'docs' + - myst-parser>=2.0.0 ; extra == 'docs' + - python-socks ; extra == 'optional' + - wsaccel ; extra == 'optional' + - websockets ; extra == 'test' + requires_python: '>=3.8' +- kind: conda + name: wheel + version: 0.44.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 58585 + timestamp: 1722797131787 +- kind: conda + name: wheel + version: 0.44.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping + size: 58585 + timestamp: 1722797131787 +- kind: pypi + name: wsproto + version: 1.2.0 + url: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + sha256: b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736 + requires_dist: + - h11<1,>=0.9.0 + requires_python: '>=3.7.0' +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: h86ecc28_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.11-h86ecc28_1.conda + sha256: a00c4c6054209c84fb460c5e4ae7193c335a9ee1851645c9ad59312438e853f7 + md5: c5f72a733c461aa7785518d29b997cc8 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 15690 + timestamp: 1727036097294 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + sha256: 532a046fee0b3a402db867b6ec55c84ba4cdedb91d817147c8feeae9766be3d6 + md5: 77cbc488235ebbaab2b6e912d3934bae + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 14679 + timestamp: 1727034741045 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hcd874cb_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda + sha256: 8c5b976e3b36001bdefdb41fb70415f9c07eff631f1f0155f3225a7649320e77 + md5: c46ba8712093cb0114404ae8a7582e1a + depends: + - m2w64-gcc-libs + - m2w64-gcc-libs-core + license: MIT + license_family: MIT + purls: [] + size: 51297 + timestamp: 1684638355740 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hd74edd7_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + sha256: 7113618021cf6c80831a429b2ebb9d639f3c43cf7fe2257d235dc6ae0ab43289 + md5: 7e0125f8fb619620a0011dc9297e2493 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 13515 + timestamp: 1727034783560 +- kind: conda + name: xorg-libxdmcp + version: 1.1.3 + build: hcd874cb_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 + sha256: f51205d33c07d744ec177243e5d9b874002910c731954f2c8da82459be462b93 + md5: 46878ebb6b9cbd8afcf8088d7ef00ece + depends: + - m2w64-gcc-libs + license: MIT + license_family: MIT + purls: [] + size: 67908 + timestamp: 1610072296570 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: h57736b2_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda + sha256: efcc150da5926cf244f757b8376d96a4db78bc15b8d90ca9f56ac6e75755971f + md5: 25a5a7b797fe6e084e04ffe2db02fc62 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 20615 + timestamp: 1727796660574 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee + md5: 8035c64cb77ed555e3f150b7b3972480 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 19901 + timestamp: 1727794976192 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + sha256: 9939a166d780700d81023546759102b33fdc2c5f11ef09f5f66c77210fd334c8 + md5: 77c447f48cab5d3a15ac224edb86a968 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 18487 + timestamp: 1727795205022 +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: xz + version: 5.2.6 + build: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + size: 235693 + timestamp: 1660346961024 +- kind: conda + name: xz + version: 5.2.6 + build: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 235693 + timestamp: 1660346961024 +- kind: conda + name: xz + version: 5.2.6 + build: h8d14728_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 + md5: 515d77642eaa3639413c6b1bc3f94219 + depends: + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + license: LGPL-2.1 and GPL-2.0 + size: 217804 + timestamp: 1660346976440 +- kind: conda + name: xz + version: 5.2.6 + build: h8d14728_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 + md5: 515d77642eaa3639413c6b1bc3f94219 + depends: + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 217804 + timestamp: 1660346976440 +- kind: conda + name: xz + version: 5.2.6 + build: h9cdd2b7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 + md5: 83baad393a31d59c20b63ba4da6592df + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + size: 440555 + timestamp: 1660348056328 +- kind: conda + name: xz + version: 5.2.6 + build: h9cdd2b7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 + md5: 83baad393a31d59c20b63ba4da6592df + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 440555 + timestamp: 1660348056328 +- kind: conda + name: zipp + version: 3.20.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 21409 + timestamp: 1726248679175 +- kind: conda + name: zipp + version: 3.20.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 21409 + timestamp: 1726248679175 +- kind: conda + name: zlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + size: 77606 + timestamp: 1727963209370 +- kind: conda + name: zlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + purls: [] + size: 77606 + timestamp: 1727963209370 +- kind: conda + name: zlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + sha256: b4f649aa3ecdae384d5dad7074e198bff120edd3dfb816588e31738fc6d627b1 + md5: bc230abb5d21b63ff4799b0e75204783 + depends: + - libgcc >=13 + - libzlib 1.3.1 h86ecc28_2 + license: Zlib + license_family: Other + size: 95582 + timestamp: 1727963203597 +- kind: conda + name: zlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + sha256: b4f649aa3ecdae384d5dad7074e198bff120edd3dfb816588e31738fc6d627b1 + md5: bc230abb5d21b63ff4799b0e75204783 + depends: + - libgcc >=13 + - libzlib 1.3.1 h86ecc28_2 + license: Zlib + license_family: Other + purls: [] + size: 95582 + timestamp: 1727963203597 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + size: 92286 + timestamp: 1727963153079 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + purls: [] + size: 92286 + timestamp: 1727963153079 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 330788 + timestamp: 1725305806565 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 330788 + timestamp: 1725305806565 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h7606c53_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + sha256: 3e0c718aa18dcac7f080844dbe0aea41a9cea75083019ce02e8a784926239826 + md5: a92cc3435b2fd6f51463f5a4db5c50b1 + depends: + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 320624 + timestamp: 1725305934189 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h7606c53_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + sha256: 3e0c718aa18dcac7f080844dbe0aea41a9cea75083019ce02e8a784926239826 + md5: a92cc3435b2fd6f51463f5a4db5c50b1 + depends: + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 320624 + timestamp: 1725305934189 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hb698573_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + sha256: 2681c2a249752bdc7978e59ee2f34fcdfcbfda80029b84b8e5fec8dbc9e3af25 + md5: ffcb8e97e62af42075e0e5f46bb9856e + depends: + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 392496 + timestamp: 1725305808244 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hb698573_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + sha256: 2681c2a249752bdc7978e59ee2f34fcdfcbfda80029b84b8e5fec8dbc9e3af25 + md5: ffcb8e97e62af42075e0e5f46bb9856e + depends: + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 392496 + timestamp: 1725305808244 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hef9b889_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b + md5: 8b7069e9792ee4e5b4919a7a306d2e67 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 419552 + timestamp: 1725305670210 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hef9b889_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b + md5: 8b7069e9792ee4e5b4919a7a306d2e67 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 419552 + timestamp: 1725305670210 +- kind: conda + name: zstd + version: 1.5.6 + build: h02f22dd_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + sha256: 484f9d0722c77685ae379fbff3ccd662af9ead7e59eb39cd6d0c677cdf25ff6c + md5: be8d5f8cf21aed237b8b182ea86b3dd6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 539937 + timestamp: 1714723130243 +- kind: conda + name: zstd + version: 1.5.6 + build: h02f22dd_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + sha256: 484f9d0722c77685ae379fbff3ccd662af9ead7e59eb39cd6d0c677cdf25ff6c + md5: be8d5f8cf21aed237b8b182ea86b3dd6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 539937 + timestamp: 1714723130243 +- kind: conda + name: zstd + version: 1.5.6 + build: h0ea2cb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + md5: 9a17230f95733c04dc40a2b1e5491d74 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + size: 349143 + timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: h0ea2cb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + md5: 9a17230f95733c04dc40a2b1e5491d74 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 349143 + timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 554846 + timestamp: 1714722996770 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 554846 + timestamp: 1714722996770 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 405089 + timestamp: 1714723101397 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 405089 + timestamp: 1714723101397 diff --git a/packages/mesh-io/pixi.toml b/packages/mesh-io/pixi.toml new file mode 100644 index 000000000..f10a3f091 --- /dev/null +++ b/packages/mesh-io/pixi.toml @@ -0,0 +1,139 @@ +[project] +authors = ["Matt McCormick "] +channels = ["conda-forge"] +description = "Input and output for scientific and medical mesh file formats." +name = "mesh-io" +platforms = ["win-64", "linux-64", "linux-aarch64", "osx-arm64"] +version = "0.1.0" + +[tasks] + +[dependencies] +python = "3.12.*" +pnpm = ">=9.12.1,<10" +hatch = ">=1.13.0,<2" +pip = ">=24.2,<25" + +[target.win-64.dependencies] +m2w64-jq = ">=1.6.0,<2" + +[target.unix.dependencies] +jq = ">=1.7.1,<2" + +[tasks.version-sync-typescript] +cmd = '''version=$(cat package.json | jq .version) && + jq ".version = $version" typescript/package.json > typescript/package.json.tmp && + mv typescript/package.json.tmp typescript/package.json''' + +[tasks.version-sync-python-wasi] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + echo "version is $version" && + hatch version $version''' +cwd = "python/itkwasm-mesh-io-wasi" + +[tasks.version-sync-python-emscripten] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-mesh-io-emscripten" + +[tasks.version-sync-python-dispatch] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-mesh-io" + +[tasks.version-sync] +depends-on = ["version-sync-typescript", "version-sync-python-wasi", "version-sync-python-emscripten", "version-sync-python-dispatch"] +description = "Synchronize package versions" + +[tasks.publish-typescript] +cmd = "pnpm publish --filter \"{typescript}\"" + +[tasks.publish-python-user-check] +cmd = "if [ -n \"$HATCH_INDEX_USER\"]; then echo \"HATCH_INDEX_USER is set\"; else echo \"HATCH_INDEX_USER is not set\"; exit 1; fi" + +[tasks.publish-python-wasi] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-mesh-io-wasi" + +[tasks.publish-python-emscripten] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-mesh-io-emscripten" + +[tasks.publish-python-dispatch] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-mesh-io" + +[tasks.publish] +depends-on = ["publish-typescript", "publish-python-wasi", "publish-python-emscripten", "publish-python-dispatch"] +description = "Synchronize package versions" + +[feature.python.dependencies] +pytest = ">=8.3.3,<9" +pillow = ">=10.4.0,<12" + +[feature.python.pypi-dependencies] +pyodide-py = ">=0.26.3, <0.27" +pytest-pyodide = ">=0.58.3, <0.59" +itk-webassemblyinterface = ">=1.0b175, <2" +itkwasm = ">=1.0b179, <2" + +[feature.python.tasks.test-wasi] +cmd = "pytest" +cwd = "python/itkwasm-mesh-io-wasi" +description = "Run tests for itkwasm-mesh-io-wasi" + +[feature.python.tasks.download-pyodide] +cmd = '''curl -L https://github.com/pyodide/pyodide/releases/download/0.26.3/pyodide-0.26.3.tar.bz2 -o pyodide.tar.bz2 && + tar xjf pyodide.tar.bz2 && + rm pyodide.tar.bz2''' +outputs = ["pyodide"] +description = "Download Pyodide" + +[feature.python.tasks.test-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-mesh-io-emscripten" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-mesh-io-emscripten" + +[feature.python.tasks.serve-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-mesh-io-emscripten" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-mesh-io-emscripten for development" + +[feature.python.tasks.test-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + cp ../itkwasm-mesh-io-emscripten/dist/pyodide/itkwasm_mesh_io_emscripten*.whl ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-mesh-io" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-mesh-io" + +[feature.python.tasks.serve-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-mesh-io" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-mesh-io for development" + +[feature.python.tasks.test-python] +depends-on = ["test-wasi", "test-emscripten", "test-dispatch"] +description = "Run tests for all Python packages" + +[environments] +python = ["python"] diff --git a/packages/mesh-io/python/itkwasm-mesh-io/tests/fixtures.py b/packages/mesh-io/python/itkwasm-mesh-io/tests/fixtures.py index dd305b6fc..c1046db6a 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io/tests/fixtures.py +++ b/packages/mesh-io/python/itkwasm-mesh-io/tests/fixtures.py @@ -12,6 +12,10 @@ def package_wheel(): return f"itkwasm_mesh_io-{test_package_version}-py3-none-any.whl" +@pytest.fixture +def emscripten_package_wheel(): + return f"itkwasm_mesh_io_emscripten-{test_package_version}-py3-none-any.whl" + @pytest.fixture def input_data(): from pathlib import Path diff --git a/packages/mesh-io/python/itkwasm-mesh-io/tests/test_read_write_mesh_async.py b/packages/mesh-io/python/itkwasm-mesh-io/tests/test_read_write_mesh_async.py index cc6bba776..6be8c0f1a 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io/tests/test_read_write_mesh_async.py +++ b/packages/mesh-io/python/itkwasm-mesh-io/tests/test_read_write_mesh_async.py @@ -5,12 +5,13 @@ import pytest from pytest_pyodide import run_in_pyodide -from .fixtures import package_wheel, input_data +from .fixtures import emscripten_package_wheel, package_wheel, input_data @pytest.mark.driver_timeout(30) @run_in_pyodide(packages=['micropip', 'numpy']) -async def test_read_write_mesh_async(selenium, package_wheel, input_data): +async def test_read_write_mesh_async(selenium, emscripten_package_wheel, package_wheel, input_data): import micropip + await micropip.install(emscripten_package_wheel) await micropip.install(package_wheel) def write_input_data_to_fs(input_data, filename): with open(filename, 'wb') as fp: diff --git a/packages/mesh-io/python/itkwasm-mesh-io/tests/test_read_write_point_set_async.py b/packages/mesh-io/python/itkwasm-mesh-io/tests/test_read_write_point_set_async.py index 8460c559d..cb7a30c52 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io/tests/test_read_write_point_set_async.py +++ b/packages/mesh-io/python/itkwasm-mesh-io/tests/test_read_write_point_set_async.py @@ -5,12 +5,13 @@ import pytest from pytest_pyodide import run_in_pyodide -from .fixtures import package_wheel, input_data +from .fixtures import emscripten_package_wheel, package_wheel, input_data @pytest.mark.driver_timeout(30) @run_in_pyodide(packages=['micropip', 'numpy']) -async def test_read_write_point_set_async(selenium, package_wheel, input_data): +async def test_read_write_point_set_async(selenium, emscripten_package_wheel, package_wheel, input_data): import micropip + await micropip.install(emscripten_package_wheel) await micropip.install(package_wheel) def write_input_data_to_fs(input_data, filename): with open(filename, 'wb') as fp: diff --git a/packages/mesh-io/python/itkwasm-mesh-io/tests/test_vtk_poly_data_async.py b/packages/mesh-io/python/itkwasm-mesh-io/tests/test_vtk_poly_data_async.py index f9517809e..b07120440 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io/tests/test_vtk_poly_data_async.py +++ b/packages/mesh-io/python/itkwasm-mesh-io/tests/test_vtk_poly_data_async.py @@ -4,11 +4,12 @@ pytest.skip("Skipping pyodide tests on older Python", allow_module_level=True) from pytest_pyodide import run_in_pyodide -from .fixtures import package_wheel, input_data +from .fixtures import emscripten_package_wheel, package_wheel, input_data @run_in_pyodide(packages=['micropip', 'numpy']) -async def test_vtk_poly_data_async(selenium, package_wheel, input_data): +async def test_vtk_poly_data_async(selenium, emscripten_package_wheel, package_wheel, input_data): import micropip + await micropip.install(emscripten_package_wheel) await micropip.install(package_wheel) def write_input_data_to_fs(input_data, filename): with open(filename, 'wb') as fp: diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 66013e671..d349d33f1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -692,9 +692,6 @@ importers: '@itk-wasm/dam': specifier: ^1.1.0 version: 1.1.1 - '@thewtex/setup-micromamba': - specifier: ^1.9.7 - version: 1.9.7 itk-wasm: specifier: workspace:^ version: link:../core/typescript/itk-wasm From 580ec0bdccb9549424e339e1d9612d8c4eedb7c3 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Thu, 24 Oct 2024 16:02:45 -0400 Subject: [PATCH 30/39] chore(mesh-io): bump version to 1.4.2 --- .../itkwasm_mesh_io_emscripten/_version.py | 2 +- .../itkwasm_mesh_io_emscripten/js_package.py | 2 +- .../itkwasm-mesh-io-wasi/itkwasm_mesh_io_wasi/_version.py | 2 +- .../mesh-io/python/itkwasm-mesh-io/itkwasm_mesh_io/_version.py | 2 +- packages/mesh-io/typescript/package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/_version.py b/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/_version.py index bf2561596..daa50c7cf 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/_version.py +++ b/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/_version.py @@ -1 +1 @@ -__version__ = "1.4.1" +__version__ = "1.4.2" diff --git a/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/js_package.py b/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/js_package.py index 88ace5108..c8e581b9f 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/js_package.py +++ b/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIFh0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgJHQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlYdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEFyPW5ldyBNYXAoW1sidnRrIiwidnRrIl0sWyJieXUiLCJieXUiXSxbImZzYSIsImZyZWUtc3VyZmVyLWFzY2lpIl0sWyJmc2IiLCJmcmVlLXN1cmZlci1iaW5hcnkiXSxbIm9iaiIsIm9iaiJdLFsib2ZmIiwib2ZmIl0sWyJzdGwiLCJzdGwiXSxbInN3YyIsInN3YyJdLFsiaXdtIiwid2FzbSJdLFsiaXdtLmNib3IiLCJ3YXNtIl0sWyJpd20uY2Jvci56c3QiLCJ3YXNtLXpzdGQiXV0pLEo9QXI7dmFyIGVyPW5ldyBNYXAoW1sidnRrIiwidnRrIl0sWyJvYmoiLCJvYmoiXSxbIm9mZiIsIm9mZiJdLFsiaXdtIiwid2FzbSJdLFsiaXdtLmNib3IiLCJ3YXNtIl0sWyJpd20uY2Jvci56c3QiLCJ3YXNtLXpzdGQiXV0pLEg9ZXI7dmFyIHRyPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sRj10cjt2YXIgcnI9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LEs9cnI7ZnVuY3Rpb24gaXIoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIEYuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBGLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIEYuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIEYuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBGLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBGLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgRi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBGLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIEsuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgSy5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIE49aXI7ZnVuY3Rpb24gb3IoQSl7bGV0IGU9QS5zbGljZSgoQS5sYXN0SW5kZXhPZigiLiIpLTE+Pj4wKSsyKTtpZihlLnRvTG93ZXJDYXNlKCk9PT0iZ3oiKXtsZXQgdD1BLnNsaWNlKDAsLTMpLmxhc3RJbmRleE9mKCIuIik7ZT1BLnNsaWNlKCh0LTE+Pj4wKSsyKX1lbHNlIGlmKGUudG9Mb3dlckNhc2UoKT09PSJjYm9yIil7bGV0IHQ9QS5zbGljZSgwLC01KS5sYXN0SW5kZXhPZigiLiIpO2U9QS5zbGljZSgodC0xPj4+MCkrMil9ZWxzZSBpZihlLnRvTG93ZXJDYXNlKCk9PT0ienN0Iil7bGV0IHQ9QS5zbGljZSgwLC0xMCkubGFzdEluZGV4T2YoIi4iKTtlPUEuc2xpY2UoKHQtMT4+PjApKzIpfWVsc2UgaWYoZS50b0xvd2VyQ2FzZSgpPT09InppcCIpe2xldCB0PUEuc2xpY2UoMCwtNCkubGFzdEluZGV4T2YoIi4iKTtlPUEuc2xpY2UoKHQtMT4+PjApKzIpfXJldHVybiBlfXZhciBNPW9yO3ZhciBucj17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LHU9bnI7dmFyIEhlPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGFyPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLFRBPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxNQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksQkE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLFllPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLHNyPXtjYW5IYW5kbGU6QT0+WWUoQSkmJkFbSGVdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6ZSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIEtlKEEsZSksW3QsW3RdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxHQShBKX19LElyPXtjYW5IYW5kbGU6QT0+WWUoQSkmJkJBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IGU7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9lPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ZT17aXNFcnJvcjohMSx2YWx1ZTpBfSxbZSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxxZT1uZXcgTWFwKFtbInByb3h5Iixzcl0sWyJ0aHJvdyIsSXJdXSk7ZnVuY3Rpb24gbHIoQSxlKXtmb3IobGV0IHQgb2YgQSlpZihlPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEtlKEEsZT1nbG9iYWxUaGlzLHQ9WyIqIl0pe2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaShvKXtpZighb3x8IW8uZGF0YSlyZXR1cm47aWYoIWxyKHQsby5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke28ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOnIsdHlwZTphLHBhdGg6Z309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sby5kYXRhKSxjPShvLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKFkpLHA7dHJ5e2xldCBuPWcuc2xpY2UoMCwtMSkucmVkdWNlKChCLEkpPT5CW0ldLEEpLHM9Zy5yZWR1Y2UoKEIsSSk9PkJbSV0sQSk7c3dpdGNoKGEpe2Nhc2UiR0VUIjpwPXM7YnJlYWs7Y2FzZSJTRVQiOm5bZy5zbGljZSgtMSlbMF1dPVkoby5kYXRhLnZhbHVlKSxwPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOnA9cy5hcHBseShuLGMpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IEI9bmV3IHMoLi4uYyk7cD1CcihCKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOkIscG9ydDI6SX09bmV3IE1lc3NhZ2VDaGFubmVsO0tlKEEsSSkscD1MQShCLFtCXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpwPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2gobil7cD17dmFsdWU6bixbQkFdOjB9fVByb21pc2UucmVzb2x2ZShwKS5jYXRjaChuPT4oe3ZhbHVlOm4sW0JBXTowfSkpLnRoZW4obj0+e2xldFtzLEJdPW1BKG4pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDpyfSksQiksYT09PSJSRUxFQVNFIiYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsaSksamUoZSksTUEgaW4gQSYmdHlwZW9mIEFbTUFdPT0iZnVuY3Rpb24iJiZBW01BXSgpKX0pLmNhdGNoKG49PntsZXRbcyxCXT1tQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW0JBXTowfSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOnJ9KSxCKX0pfSksZS5zdGFydCYmZS5zdGFydCgpfWZ1bmN0aW9uIGdyKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIGplKEEpe2dyKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gR0EoQSxlKXtyZXR1cm4geEEoQSxbXSxlKX1mdW5jdGlvbiBmQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gdmUoQSl7cmV0dXJuIGooQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57amUoQSl9KX12YXIgY0E9bmV3IFdlYWtNYXAsQ0E9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IGU9KGNBLmdldChBKXx8MCktMTtjQS5zZXQoQSxlKSxlPT09MCYmdmUoQSl9KTtmdW5jdGlvbiBwcihBLGUpe2xldCB0PShjQS5nZXQoZSl8fDApKzE7Y0Euc2V0KGUsdCksQ0EmJkNBLnJlZ2lzdGVyKEEsZSxBKX1mdW5jdGlvbiB1cihBKXtDQSYmQ0EudW5yZWdpc3RlcihBKX1mdW5jdGlvbiB4QShBLGU9W10sdD1mdW5jdGlvbigpe30pe2xldCBpPSExLG89bmV3IFByb3h5KHQse2dldChyLGEpe2lmKGZBKGkpLGE9PT1UQSlyZXR1cm4oKT0+e3VyKG8pLHZlKEEpLGk9ITB9O2lmKGE9PT0idGhlbiIpe2lmKGUubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+b307bGV0IGc9aihBLHt0eXBlOiJHRVQiLHBhdGg6ZS5tYXAoYz0+Yy50b1N0cmluZygpKX0pLnRoZW4oWSk7cmV0dXJuIGcudGhlbi5iaW5kKGcpfXJldHVybiB4QShBLFsuLi5lLGFdKX0sc2V0KHIsYSxnKXtmQShpKTtsZXRbYyxwXT1tQShnKTtyZXR1cm4gaihBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLmUsYV0ubWFwKG49Pm4udG9TdHJpbmcoKSksdmFsdWU6Y30scCkudGhlbihZKX0sYXBwbHkocixhLGcpe2ZBKGkpO2xldCBjPWVbZS5sZW5ndGgtMV07aWYoYz09PWFyKXJldHVybiBqKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oWSk7aWYoYz09PSJiaW5kIilyZXR1cm4geEEoQSxlLnNsaWNlKDAsLTEpKTtsZXRbcCxuXT1KZShnKTtyZXR1cm4gaihBLHt0eXBlOiJBUFBMWSIscGF0aDplLm1hcChzPT5zLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpwfSxuKS50aGVuKFkpfSxjb25zdHJ1Y3QocixhKXtmQShpKTtsZXRbZyxjXT1KZShhKTtyZXR1cm4gaihBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ZS5tYXAocD0+cC50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Z30sYykudGhlbihZKX19KTtyZXR1cm4gcHIobyxBKSxvfWZ1bmN0aW9uIGZyKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIEplKEEpe2xldCBlPUEubWFwKG1BKTtyZXR1cm5bZS5tYXAodD0+dFswXSksZnIoZS5tYXAodD0+dFsxXSkpXX12YXIgX2U9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTEEoQSxlKXtyZXR1cm4gX2Uuc2V0KEEsZSksQX1mdW5jdGlvbiBCcihBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbSGVdOiEwfSl9ZnVuY3Rpb24gbUEoQSl7Zm9yKGxldFtlLHRdb2YgcWUpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtpLG9dPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTplLHZhbHVlOml9LG9dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxfZS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBZKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHFlLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gaihBLGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKGk9PntsZXQgbz1jcigpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihhKXshYS5kYXRhfHwhYS5kYXRhLmlkfHxhLmRhdGEuaWQhPT1vfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxpKGEuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sZSksdCl9KX1mdW5jdGlvbiBjcigpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gaUEoQSxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseShlLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpDcn09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6WUF9PU9iamVjdCxkQT0oQT0+ZT0+e2xldCB0PUNyLmNhbGwoZSk7cmV0dXJuIEFbdF18fChBW3RdPXQuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxPPUE9PihBPUEudG9Mb3dlckNhc2UoKSxlPT5kQShlKT09PUEpLFFBPUE9PmU9PnR5cGVvZiBlPT09QSx7aXNBcnJheTp2fT1BcnJheSxvQT1RQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gbXIoQSl7cmV0dXJuIEEhPT1udWxsJiYhb0EoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhb0EoQS5jb25zdHJ1Y3RvcikmJlAoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIFhlPU8oIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gRXIoQSl7bGV0IGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhBKTplPUEmJkEuYnVmZmVyJiZYZShBLmJ1ZmZlciksZX12YXIgZHI9UUEoInN0cmluZyIpLFA9UUEoImZ1bmN0aW9uIiksJGU9UUEoIm51bWJlciIpLHlBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsUXI9QT0+QT09PSEwfHxBPT09ITEsRUE9QT0+e2lmKGRBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IGU9WUEoQSk7cmV0dXJuKGU9PT1udWxsfHxlPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0seXI9TygiRGF0ZSIpLGhyPU8oIkZpbGUiKSx3cj1PKCJCbG9iIiksRHI9TygiRmlsZUxpc3QiKSxTcj1BPT55QShBKSYmUChBLnBpcGUpLGJyPUE9PntsZXQgZTtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxQKEEuYXBwZW5kKSYmKChlPWRBKEEpKT09PSJmb3JtZGF0YSJ8fGU9PT0ib2JqZWN0IiYmUChBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxrcj1PKCJVUkxTZWFyY2hQYXJhbXMiKSxScj1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gbkEoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgaSxvO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSx2KEEpKWZvcihpPTAsbz1BLmxlbmd0aDtpPG87aSsrKWUuY2FsbChudWxsLEFbaV0saSxBKTtlbHNle2xldCByPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksYT1yLmxlbmd0aCxnO2ZvcihpPTA7aTxhO2krKylnPXJbaV0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBBdChBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLGk9dC5sZW5ndGgsbztmb3IoO2ktLSA+MDspaWYobz10W2ldLGU9PT1vLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG87cmV0dXJuIG51bGx9dmFyIGV0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsdHQ9QT0+IW9BKEEpJiZBIT09ZXQ7ZnVuY3Rpb24gSEEoKXtsZXR7Y2FzZWxlc3M6QX09dHQodGhpcykmJnRoaXN8fHt9LGU9e30sdD0oaSxvKT0+e2xldCByPUEmJkF0KGUsbyl8fG87RUEoZVtyXSkmJkVBKGkpP2Vbcl09SEEoZVtyXSxpKTpFQShpKT9lW3JdPUhBKHt9LGkpOnYoaSk/ZVtyXT1pLnNsaWNlKCk6ZVtyXT1pfTtmb3IobGV0IGk9MCxvPWFyZ3VtZW50cy5sZW5ndGg7aTxvO2krKylhcmd1bWVudHNbaV0mJm5BKGFyZ3VtZW50c1tpXSx0KTtyZXR1cm4gZX12YXIgRnI9KEEsZSx0LHthbGxPd25LZXlzOml9PXt9KT0+KG5BKGUsKG8scik9Pnt0JiZQKG8pP0Fbcl09aUEobyx0KTpBW3JdPW99LHthbGxPd25LZXlzOml9KSxBKSxQcj1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLFdyPShBLGUsdCxpKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUsaSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTplLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LFVyPShBLGUsdCxpKT0+e2xldCBvLHIsYSxnPXt9O2lmKGU9ZXx8e30sQT09bnVsbClyZXR1cm4gZTtkb3tmb3Iobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxyPW8ubGVuZ3RoO3ItLSA+MDspYT1vW3JdLCghaXx8aShhLEEsZSkpJiYhZ1thXSYmKGVbYV09QVthXSxnW2FdPSEwKTtBPXQhPT0hMSYmWUEoQSl9d2hpbGUoQSYmKCF0fHx0KEEsZSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGV9LE5yPShBLGUsdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1lLmxlbmd0aDtsZXQgaT1BLmluZGV4T2YoZSx0KTtyZXR1cm4gaSE9PS0xJiZpPT09dH0sT3I9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKHYoQSkpcmV0dXJuIEE7bGV0IGU9QS5sZW5ndGg7aWYoISRlKGUpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShlKTtmb3IoO2UtLSA+MDspdFtlXT1BW2VdO3JldHVybiB0fSxNcj0oQT0+ZT0+QSYmZSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmWUEoVWludDhBcnJheSkpLHhyPShBLGUpPT57bGV0IGk9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxvO2Zvcig7KG89aS5uZXh0KCkpJiYhby5kb25lOyl7bGV0IHI9by52YWx1ZTtlLmNhbGwoQSxyWzBdLHJbMV0pfX0sVHI9KEEsZSk9PntsZXQgdCxpPVtdO2Zvcig7KHQ9QS5leGVjKGUpKSE9PW51bGw7KWkucHVzaCh0KTtyZXR1cm4gaX0sR3I9TygiSFRNTEZvcm1FbGVtZW50IiksTHI9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxpLG8pe3JldHVybiBpLnRvVXBwZXJDYXNlKCkrb30pLHplPSgoe2hhc093blByb3BlcnR5OkF9KT0+KGUsdCk9PkEuY2FsbChlLHQpKShPYmplY3QucHJvdG90eXBlKSxKcj1PKCJSZWdFeHAiKSxydD0oQSxlKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLGk9e307bkEodCwobyxyKT0+e2xldCBhOyhhPWUobyxyLEEpKSE9PSExJiYoaVtyXT1hfHxvKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsaSl9LEhyPUE9PntydChBLChlLHQpPT57aWYoUChBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHQpIT09LTEpcmV0dXJuITE7bGV0IGk9QVt0XTtpZihQKGkpKXtpZihlLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIGUpe2Uud3JpdGFibGU9ITE7cmV0dXJufWUuc2V0fHwoZS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrdCsiJyIpfSl9fSl9LFlyPShBLGUpPT57bGV0IHQ9e30saT1vPT57by5mb3JFYWNoKHI9Pnt0W3JdPSEwfSl9O3JldHVybiB2KEEpP2koQSk6aShTdHJpbmcoQSkuc3BsaXQoZSkpLHR9LHFyPSgpPT57fSxLcj0oQSxlKT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6ZSksSkE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixaZT0iMDEyMzQ1Njc4OSIsaXQ9e0RJR0lUOlplLEFMUEhBOkpBLEFMUEhBX0RJR0lUOkpBK0pBLnRvVXBwZXJDYXNlKCkrWmV9LGpyPShBPTE2LGU9aXQuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDppfT1lO2Zvcig7QS0tOyl0Kz1lW01hdGgucmFuZG9tKCkqaXwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gdnIoQSl7cmV0dXJuISEoQSYmUChBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIF9yPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHQ9KGksbyk9PntpZih5QShpKSl7aWYoZS5pbmRleE9mKGkpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gaSkpe2Vbb109aTtsZXQgcj12KGkpP1tdOnt9O3JldHVybiBuQShpLChhLGcpPT57bGV0IGM9dChhLG8rMSk7IW9BKGMpJiYocltnXT1jKX0pLGVbb109dm9pZCAwLHJ9fXJldHVybiBpfTtyZXR1cm4gdChBLDApfSxWcj1PKCJBc3luY0Z1bmN0aW9uIiksenI9QT0+QSYmKHlBKEEpfHxQKEEpKSYmUChBLnRoZW4pJiZQKEEuY2F0Y2gpLGY9e2lzQXJyYXk6dixpc0FycmF5QnVmZmVyOlhlLGlzQnVmZmVyOm1yLGlzRm9ybURhdGE6YnIsaXNBcnJheUJ1ZmZlclZpZXc6RXIsaXNTdHJpbmc6ZHIsaXNOdW1iZXI6JGUsaXNCb29sZWFuOlFyLGlzT2JqZWN0OnlBLGlzUGxhaW5PYmplY3Q6RUEsaXNVbmRlZmluZWQ6b0EsaXNEYXRlOnlyLGlzRmlsZTpocixpc0Jsb2I6d3IsaXNSZWdFeHA6SnIsaXNGdW5jdGlvbjpQLGlzU3RyZWFtOlNyLGlzVVJMU2VhcmNoUGFyYW1zOmtyLGlzVHlwZWRBcnJheTpNcixpc0ZpbGVMaXN0OkRyLGZvckVhY2g6bkEsbWVyZ2U6SEEsZXh0ZW5kOkZyLHRyaW06UnIsc3RyaXBCT006UHIsaW5oZXJpdHM6V3IsdG9GbGF0T2JqZWN0OlVyLGtpbmRPZjpkQSxraW5kT2ZUZXN0Ok8sZW5kc1dpdGg6TnIsdG9BcnJheTpPcixmb3JFYWNoRW50cnk6eHIsbWF0Y2hBbGw6VHIsaXNIVE1MRm9ybTpHcixoYXNPd25Qcm9wZXJ0eTp6ZSxoYXNPd25Qcm9wOnplLHJlZHVjZURlc2NyaXB0b3JzOnJ0LGZyZWV6ZU1ldGhvZHM6SHIsdG9PYmplY3RTZXQ6WXIsdG9DYW1lbENhc2U6THIsbm9vcDpxcix0b0Zpbml0ZU51bWJlcjpLcixmaW5kS2V5OkF0LGdsb2JhbDpldCxpc0NvbnRleHREZWZpbmVkOnR0LEFMUEhBQkVUOml0LGdlbmVyYXRlU3RyaW5nOmpyLGlzU3BlY0NvbXBsaWFudEZvcm06dnIsdG9KU09OT2JqZWN0Ol9yLGlzQXN5bmNGbjpWcixpc1RoZW5hYmxlOnpyfTtmdW5jdGlvbiBfKEEsZSx0LGksbyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxpJiYodGhpcy5yZXF1ZXN0PWkpLG8mJih0aGlzLnJlc3BvbnNlPW8pfWYuaW5oZXJpdHMoXyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmYudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIG90PV8ucHJvdG90eXBlLG50PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e250W0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF8sbnQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtfLmZyb209KEEsZSx0LGksbyxyKT0+e2xldCBhPU9iamVjdC5jcmVhdGUob3QpO3JldHVybiBmLnRvRmxhdE9iamVjdChBLGEsZnVuY3Rpb24oYyl7cmV0dXJuIGMhPT1FcnJvci5wcm90b3R5cGV9LGc9PmchPT0iaXNBeGlvc0Vycm9yIiksXy5jYWxsKGEsQS5tZXNzYWdlLGUsdCxpLG8pLGEuY2F1c2U9QSxhLm5hbWU9QS5uYW1lLHImJk9iamVjdC5hc3NpZ24oYSxyKSxhfTt2YXIgaD1fO3ZhciBoQT1udWxsO2Z1bmN0aW9uIHFBKEEpe3JldHVybiBmLmlzUGxhaW5PYmplY3QoQSl8fGYuaXNBcnJheShBKX1mdW5jdGlvbiBzdChBKXtyZXR1cm4gZi5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBhdChBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG8scil7cmV0dXJuIG89c3QobyksIXQmJnI/IlsiK28rIl0iOm99KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIFpyKEEpe3JldHVybiBmLmlzQXJyYXkoQSkmJiFBLnNvbWUocUEpfXZhciBYcj1mLnRvRmxhdE9iamVjdChmLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gJHIoQSxlLHQpe2lmKCFmLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KGhBfHxGb3JtRGF0YSksdD1mLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oQyxtKXtyZXR1cm4hZi5pc1VuZGVmaW5lZChtW0NdKX0pO2xldCBpPXQubWV0YVRva2VucyxvPXQudmlzaXRvcnx8bixyPXQuZG90cyxhPXQuaW5kZXhlcyxjPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmYuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighZi5pc0Z1bmN0aW9uKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gcChsKXtpZihsPT09bnVsbClyZXR1cm4iIjtpZihmLmlzRGF0ZShsKSlyZXR1cm4gbC50b0lTT1N0cmluZygpO2lmKCFjJiZmLmlzQmxvYihsKSl0aHJvdyBuZXcgaCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gZi5pc0FycmF5QnVmZmVyKGwpfHxmLmlzVHlwZWRBcnJheShsKT9jJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbbF0pOkJ1ZmZlci5mcm9tKGwpOmx9ZnVuY3Rpb24gbihsLEMsbSl7bGV0IHc9bDtpZihsJiYhbSYmdHlwZW9mIGw9PSJvYmplY3QiKXtpZihmLmVuZHNXaXRoKEMsInt9IikpQz1pP0M6Qy5zbGljZSgwLC0yKSxsPUpTT04uc3RyaW5naWZ5KGwpO2Vsc2UgaWYoZi5pc0FycmF5KGwpJiZacihsKXx8KGYuaXNGaWxlTGlzdChsKXx8Zi5lbmRzV2l0aChDLCJbXSIpKSYmKHc9Zi50b0FycmF5KGwpKSlyZXR1cm4gQz1zdChDKSx3LmZvckVhY2goZnVuY3Rpb24oVSxadCl7IShmLmlzVW5kZWZpbmVkKFUpfHxVPT09bnVsbCkmJmUuYXBwZW5kKGE9PT0hMD9hdChbQ10sWnQscik6YT09PW51bGw/QzpDKyJbXSIscChVKSl9KSwhMX1yZXR1cm4gcUEobCk/ITA6KGUuYXBwZW5kKGF0KG0sQyxyKSxwKGwpKSwhMSl9bGV0IHM9W10sQj1PYmplY3QuYXNzaWduKFhyLHtkZWZhdWx0VmlzaXRvcjpuLGNvbnZlcnRWYWx1ZTpwLGlzVmlzaXRhYmxlOnFBfSk7ZnVuY3Rpb24gSShsLEMpe2lmKCFmLmlzVW5kZWZpbmVkKGwpKXtpZihzLmluZGV4T2YobCkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrQy5qb2luKCIuIikpO3MucHVzaChsKSxmLmZvckVhY2gobCxmdW5jdGlvbih3LFcpeyghKGYuaXNVbmRlZmluZWQodyl8fHc9PT1udWxsKSYmby5jYWxsKGUsdyxmLmlzU3RyaW5nKFcpP1cudHJpbSgpOlcsQyxCKSk9PT0hMCYmSSh3LEM/Qy5jb25jYXQoVyk6W1ddKX0pLHMucG9wKCl9fWlmKCFmLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gSShBKSxlfXZhciBUPSRyO2Z1bmN0aW9uIEl0KEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKGkpe3JldHVybiBlW2ldfSl9ZnVuY3Rpb24gbHQoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZUKEEsdGhpcyxlKX12YXIgZ3Q9bHQucHJvdG90eXBlO2d0LmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtndC50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKGkpe3JldHVybiBlLmNhbGwodGhpcyxpLEl0KX06SXQ7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gdChvWzBdKSsiPSIrdChvWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHdBPWx0O2Z1bmN0aW9uIEFpKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIGFBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgaT10JiZ0LmVuY29kZXx8QWksbz10JiZ0LnNlcmlhbGl6ZSxyO2lmKG8/cj1vKGUsdCk6cj1mLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgd0EoZSx0KS50b1N0cmluZyhpKSxyKXtsZXQgYT1BLmluZGV4T2YoIiMiKTthIT09LTEmJihBPUEuc2xpY2UoMCxhKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrcn1yZXR1cm4gQX12YXIgS0E9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQsaSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czppP2kuc3luY2hyb25vdXM6ITEscnVuV2hlbjppP2kucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe2YuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKGkpe2khPT1udWxsJiZlKGkpfSl9fSxqQT1LQTt2YXIgREE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBwdD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6d0E7dmFyIHV0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgZnQ9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgQnQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6cHQsRm9ybURhdGE6dXQsQmxvYjpmdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciB2QT17fTskdCh2QSx7aGFzQnJvd3NlckVudjooKT0+Y3QsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5laSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PnRpfSk7dmFyIGN0PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLGVpPShBPT5jdCYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLHRpPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgYj17Li4udkEsLi4uQnR9O2Z1bmN0aW9uIF9BKEEsZSl7cmV0dXJuIFQoQSxuZXcgYi5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQsaSxvLHIpe3JldHVybiBiLmlzTm9kZSYmZi5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQoaSx0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOnIuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZSkpfWZ1bmN0aW9uIHJpKEEpe3JldHVybiBmLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxBKS5tYXAoZT0+ZVswXT09PSJbXSI/IiI6ZVsxXXx8ZVswXSl9ZnVuY3Rpb24gaWkoQSl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhBKSxpLG89dC5sZW5ndGgscjtmb3IoaT0wO2k8bztpKyspcj10W2ldLGVbcl09QVtyXTtyZXR1cm4gZX1mdW5jdGlvbiBvaShBKXtmdW5jdGlvbiBlKHQsaSxvLHIpe2xldCBhPXRbcisrXTtpZihhPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IGc9TnVtYmVyLmlzRmluaXRlKCthKSxjPXI+PXQubGVuZ3RoO3JldHVybiBhPSFhJiZmLmlzQXJyYXkobyk/by5sZW5ndGg6YSxjPyhmLmhhc093blByb3AobyxhKT9vW2FdPVtvW2FdLGldOm9bYV09aSwhZyk6KCghb1thXXx8IWYuaXNPYmplY3Qob1thXSkpJiYob1thXT1bXSksZSh0LGksb1thXSxyKSYmZi5pc0FycmF5KG9bYV0pJiYob1thXT1paShvW2FdKSksIWcpfWlmKGYuaXNGb3JtRGF0YShBKSYmZi5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBmLmZvckVhY2hFbnRyeShBLChpLG8pPT57ZShyaShpKSxvLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBTQT1vaTtmdW5jdGlvbiBuaShBLGUsdCl7aWYoZi5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKEEpLGYudHJpbShBKX1jYXRjaChpKXtpZihpLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IGl9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgVkE9e3RyYW5zaXRpb25hbDpEQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7bGV0IGk9dC5nZXRDb250ZW50VHlwZSgpfHwiIixvPWkuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLHI9Zi5pc09iamVjdChlKTtpZihyJiZmLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSksZi5pc0Zvcm1EYXRhKGUpKXJldHVybiBvP0pTT04uc3RyaW5naWZ5KFNBKGUpKTplO2lmKGYuaXNBcnJheUJ1ZmZlcihlKXx8Zi5pc0J1ZmZlcihlKXx8Zi5pc1N0cmVhbShlKXx8Zi5pc0ZpbGUoZSl8fGYuaXNCbG9iKGUpKXJldHVybiBlO2lmKGYuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKGYuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKHIpe2lmKGkuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIF9BKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1mLmlzRmlsZUxpc3QoZSkpfHxpLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGM9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBUKGc/eyJmaWxlc1tdIjplfTplLGMmJm5ldyBjLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gcnx8bz8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLG5pKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxWQS50cmFuc2l0aW9uYWwsaT10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG89dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoZSYmZi5pc1N0cmluZyhlKSYmKGkmJiF0aGlzLnJlc3BvbnNlVHlwZXx8bykpe2xldCBhPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm87dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKGEpdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9oLmZyb20oZyxoLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpiLmNsYXNzZXMuRm9ybURhdGEsQmxvYjpiLmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtmLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e1ZBLmhlYWRlcnNbQV09e319KTt2YXIgVj1WQTt2YXIgYWk9Zi50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxDdD1BPT57bGV0IGU9e30sdCxpLG87cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe289YS5pbmRleE9mKCI6IiksdD1hLnN1YnN0cmluZygwLG8pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGk9YS5zdWJzdHJpbmcobysxKS50cmltKCksISghdHx8ZVt0XSYmYWlbdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChpKTplW3RdPVtpXTplW3RdPWVbdF0/ZVt0XSsiLCAiK2k6aSl9KSxlfTt2YXIgbXQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBzQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGJBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpmLmlzQXJyYXkoQSk/QS5tYXAoYkEpOlN0cmluZyhBKX1mdW5jdGlvbiBzaShBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxpO2Zvcig7aT10LmV4ZWMoQSk7KWVbaVsxXV09aVsyXTtyZXR1cm4gZX12YXIgSWk9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gekEoQSxlLHQsaSxvKXtpZihmLmlzRnVuY3Rpb24oaSkpcmV0dXJuIGkuY2FsbCh0aGlzLGUsdCk7aWYobyYmKGU9dCksISFmLmlzU3RyaW5nKGUpKXtpZihmLmlzU3RyaW5nKGkpKXJldHVybiBlLmluZGV4T2YoaSkhPT0tMTtpZihmLmlzUmVnRXhwKGkpKXJldHVybiBpLnRlc3QoZSl9fWZ1bmN0aW9uIGxpKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxpKT0+dC50b1VwcGVyQ2FzZSgpK2kpfWZ1bmN0aW9uIGdpKEEsZSl7bGV0IHQ9Zi50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKGk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxpK3Qse3ZhbHVlOmZ1bmN0aW9uKG8scixhKXtyZXR1cm4gdGhpc1tpXS5jYWxsKHRoaXMsZSxvLHIsYSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIHo9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxpKXtsZXQgbz10aGlzO2Z1bmN0aW9uIHIoZyxjLHApe2xldCBuPXNBKGMpO2lmKCFuKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgcz1mLmZpbmRLZXkobyxuKTsoIXN8fG9bc109PT12b2lkIDB8fHA9PT0hMHx8cD09PXZvaWQgMCYmb1tzXSE9PSExKSYmKG9bc3x8Y109YkEoZykpfWxldCBhPShnLGMpPT5mLmZvckVhY2goZywocCxuKT0+cihwLG4sYykpO3JldHVybiBmLmlzUGxhaW5PYmplY3QoZSl8fGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2EoZSx0KTpmLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiFJaShlKT9hKEN0KGUpLHQpOmUhPW51bGwmJnIodCxlLGkpLHRoaXN9Z2V0KGUsdCl7aWYoZT1zQShlKSxlKXtsZXQgaT1mLmZpbmRLZXkodGhpcyxlKTtpZihpKXtsZXQgbz10aGlzW2ldO2lmKCF0KXJldHVybiBvO2lmKHQ9PT0hMClyZXR1cm4gc2kobyk7aWYoZi5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxvLGkpO2lmKGYuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhvKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1zQShlKSxlKXtsZXQgaT1mLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShpJiZ0aGlzW2ldIT09dm9pZCAwJiYoIXR8fHpBKHRoaXMsdGhpc1tpXSxpLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IGk9dGhpcyxvPSExO2Z1bmN0aW9uIHIoYSl7aWYoYT1zQShhKSxhKXtsZXQgZz1mLmZpbmRLZXkoaSxhKTtnJiYoIXR8fHpBKGksaVtnXSxnLHQpKSYmKGRlbGV0ZSBpW2ddLG89ITApfX1yZXR1cm4gZi5pc0FycmF5KGUpP2UuZm9yRWFjaChyKTpyKGUpLG99Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcyksaT10Lmxlbmd0aCxvPSExO2Zvcig7aS0tOyl7bGV0IHI9dFtpXTsoIWV8fHpBKHRoaXMsdGhpc1tyXSxyLGUsITApKSYmKGRlbGV0ZSB0aGlzW3JdLG89ITApfXJldHVybiBvfW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLGk9e307cmV0dXJuIGYuZm9yRWFjaCh0aGlzLChvLHIpPT57bGV0IGE9Zi5maW5kS2V5KGkscik7aWYoYSl7dFthXT1iQShvKSxkZWxldGUgdFtyXTtyZXR1cm59bGV0IGc9ZT9saShyKTpTdHJpbmcocikudHJpbSgpO2chPT1yJiZkZWxldGUgdFtyXSx0W2ddPWJBKG8pLGlbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZi5mb3JFYWNoKHRoaXMsKGksbyk9PntpIT1udWxsJiZpIT09ITEmJih0W29dPWUmJmYuaXNBcnJheShpKT9pLmpvaW4oIiwgIik6aSl9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgaT1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG89Pmkuc2V0KG8pKSxpfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgaT0odGhpc1ttdF09dGhpc1ttdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxvPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIoYSl7bGV0IGc9c0EoYSk7aVtnXXx8KGdpKG8sYSksaVtnXT0hMCl9cmV0dXJuIGYuaXNBcnJheShlKT9lLmZvckVhY2gocik6cihlKSx0aGlzfX07ei5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7Zi5yZWR1Y2VEZXNjcmlwdG9ycyh6LnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQoaSl7dGhpc1t0XT1pfX19KTtmLmZyZWV6ZU1ldGhvZHMoeik7dmFyIGs9ejtmdW5jdGlvbiBJQShBLGUpe2xldCB0PXRoaXN8fFYsaT1lfHx0LG89ay5mcm9tKGkuaGVhZGVycykscj1pLmRhdGE7cmV0dXJuIGYuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe3I9Zy5jYWxsKHQscixvLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG8ubm9ybWFsaXplKCkscn1mdW5jdGlvbiBsQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIEV0KEEsZSx0KXtoLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGguRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1mLmluaGVyaXRzKEV0LGgse19fQ0FOQ0VMX186ITB9KTt2YXIgRz1FdDtmdW5jdGlvbiBaQShBLGUsdCl7bGV0IGk9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhaXx8aSh0LnN0YXR1cyk/QSh0KTplKG5ldyBoKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW2guRVJSX0JBRF9SRVFVRVNULGguRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIGR0PWIuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxpLG8scil7bGV0IGE9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07Zi5pc051bWJlcih0KSYmYS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksZi5pc1N0cmluZyhpKSYmYS5wdXNoKCJwYXRoPSIraSksZi5pc1N0cmluZyhvKSYmYS5wdXNoKCJkb21haW49IitvKSxyPT09ITAmJmEucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWEuam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIFhBKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gJEEoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIGdBKEEsZSl7cmV0dXJuIEEmJiFYQShlKT8kQShBLGUpOmV9dmFyIFF0PWIuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxpO2Z1bmN0aW9uIG8ocil7bGV0IGE9cjtyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixhKSxhPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGEpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gaT1vKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihhKXtsZXQgZz1mLmlzU3RyaW5nKGEpP28oYSk6YTtyZXR1cm4gZy5wcm90b2NvbD09PWkucHJvdG9jb2wmJmcuaG9zdD09PWkuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gQWUoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIHBpKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSksaT1uZXcgQXJyYXkoQSksbz0wLHI9MCxhO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24oYyl7bGV0IHA9RGF0ZS5ub3coKSxuPWlbcl07YXx8KGE9cCksdFtvXT1jLGlbb109cDtsZXQgcz1yLEI9MDtmb3IoO3MhPT1vOylCKz10W3MrK10scz1zJUE7aWYobz0obysxKSVBLG89PT1yJiYocj0ocisxKSVBKSxwLWE8ZSlyZXR1cm47bGV0IEk9biYmcC1uO3JldHVybiBJP01hdGgucm91bmQoQioxZTMvSSk6dm9pZCAwfX12YXIgeXQ9cGk7ZnVuY3Rpb24gaHQoQSxlKXtsZXQgdD0wLGk9eXQoNTAsMjUwKTtyZXR1cm4gbz0+e2xldCByPW8ubG9hZGVkLGE9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLGc9ci10LGM9aShnKSxwPXI8PWE7dD1yO2xldCBuPXtsb2FkZWQ6cix0b3RhbDphLHByb2dyZXNzOmE/ci9hOnZvaWQgMCxieXRlczpnLHJhdGU6Y3x8dm9pZCAwLGVzdGltYXRlZDpjJiZhJiZwPyhhLXIpL2M6dm9pZCAwLGV2ZW50Om99O25bZT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKG4pfX12YXIgdWk9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iix3dD11aSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsaSl7bGV0IG89QS5kYXRhLHI9ay5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTphLHdpdGhYU1JGVG9rZW46Z309QSxjO2Z1bmN0aW9uIHAoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGMpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYyl9bGV0IG47aWYoZi5pc0Zvcm1EYXRhKG8pKXtpZihiLmhhc1N0YW5kYXJkQnJvd3NlckVudnx8Yi5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpci5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigobj1yLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtDLC4uLm1dPW4/bi5zcGxpdCgiOyIpLm1hcCh3PT53LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO3Iuc2V0Q29udGVudFR5cGUoW0N8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5tXS5qb2luKCI7ICIpKX19bGV0IHM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IEM9QS5hdXRoLnVzZXJuYW1lfHwiIixtPUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7ci5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoQysiOiIrbSkpfWxldCBCPWdBKEEuYmFzZVVSTCxBLnVybCk7cy5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksYUEoQixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIEkoKXtpZighcylyZXR1cm47bGV0IEM9ay5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gcyYmcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksdz17ZGF0YTohYXx8YT09PSJ0ZXh0Inx8YT09PSJqc29uIj9zLnJlc3BvbnNlVGV4dDpzLnJlc3BvbnNlLHN0YXR1czpzLnN0YXR1cyxzdGF0dXNUZXh0OnMuc3RhdHVzVGV4dCxoZWFkZXJzOkMsY29uZmlnOkEscmVxdWVzdDpzfTtaQShmdW5jdGlvbihVKXt0KFUpLHAoKX0sZnVuY3Rpb24oVSl7aShVKSxwKCl9LHcpLHM9bnVsbH1pZigib25sb2FkZW5kImluIHM/cy5vbmxvYWRlbmQ9STpzLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFzfHxzLnJlYWR5U3RhdGUhPT00fHxzLnN0YXR1cz09PTAmJiEocy5yZXNwb25zZVVSTCYmcy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoSSl9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihpKG5ldyBoKCJSZXF1ZXN0IGFib3J0ZWQiLGguRUNPTk5BQk9SVEVELEEscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe2kobmV3IGgoIk5ldHdvcmsgRXJyb3IiLGguRVJSX05FVFdPUkssQSxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBtPUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIix3PUEudHJhbnNpdGlvbmFsfHxEQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihtPUEudGltZW91dEVycm9yTWVzc2FnZSksaShuZXcgaChtLHcuY2xhcmlmeVRpbWVvdXRFcnJvcj9oLkVUSU1FRE9VVDpoLkVDT05OQUJPUlRFRCxBLHMpKSxzPW51bGx9LGIuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoZyYmZi5pc0Z1bmN0aW9uKGcpJiYoZz1nKEEpKSxnfHxnIT09ITEmJlF0KEIpKSl7bGV0IEM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmZHQucmVhZChBLnhzcmZDb29raWVOYW1lKTtDJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLEMpfW89PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gcyYmZi5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24obSx3KXtzLnNldFJlcXVlc3RIZWFkZXIodyxtKX0pLGYuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwocy53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksYSYmYSE9PSJqc29uIiYmKHMucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJnMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGh0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmcy51cGxvYWQmJnMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixodChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYz1DPT57cyYmKGkoIUN8fEMudHlwZT9uZXcgRyhudWxsLEEscyk6Qykscy5hYm9ydCgpLHM9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGMpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9jKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpKSk7bGV0IGw9QWUoQik7aWYobCYmYi5wcm90b2NvbHMuaW5kZXhPZihsKT09PS0xKXtpKG5ldyBoKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2wrIjoiLGguRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59cy5zZW5kKG98fG51bGwpfSl9O3ZhciBlZT17aHR0cDpoQSx4aHI6d3R9O2YuZm9yRWFjaChlZSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBEdD1BPT5gLSAke0F9YCxmaT1BPT5mLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsa0E9e2dldEFkYXB0ZXI6QT0+e0E9Zi5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LGksbz17fTtmb3IobGV0IHI9MDtyPGU7cisrKXt0PUFbcl07bGV0IGE7aWYoaT10LCFmaSh0KSYmKGk9ZWVbKGE9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxpPT09dm9pZCAwKSl0aHJvdyBuZXcgaChgVW5rbm93biBhZGFwdGVyICcke2F9J2ApO2lmKGkpYnJlYWs7b1thfHwiIyIrcl09aX1pZighaSl7bGV0IHI9T2JqZWN0LmVudHJpZXMobykubWFwKChbZyxjXSk9PmBhZGFwdGVyICR7Z30gYCsoYz09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGE9ZT9yLmxlbmd0aD4xP2BzaW5jZSA6CmArci5tYXAoRHQpLmpvaW4oYApgKToiICIrRHQoclswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgaCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2EsIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBpfSxhZGFwdGVyczplZX07ZnVuY3Rpb24gdGUoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEcobnVsbCxBKX1mdW5jdGlvbiBSQShBKXtyZXR1cm4gdGUoQSksQS5oZWFkZXJzPWsuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1JQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksa0EuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFYuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihpKXtyZXR1cm4gdGUoQSksaS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGkpLGkuaGVhZGVycz1rLmZyb20oaS5oZWFkZXJzKSxpfSxmdW5jdGlvbihpKXtyZXR1cm4gbEEoaSl8fCh0ZShBKSxpJiZpLnJlc3BvbnNlJiYoaS5yZXNwb25zZS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGkucmVzcG9uc2UpLGkucmVzcG9uc2UuaGVhZGVycz1rLmZyb20oaS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KGkpfSl9dmFyIFN0PUE9PkEgaW5zdGFuY2VvZiBrP3suLi5BfTpBO2Z1bmN0aW9uIHgoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIGkocCxuLHMpe3JldHVybiBmLmlzUGxhaW5PYmplY3QocCkmJmYuaXNQbGFpbk9iamVjdChuKT9mLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOnN9LHAsbik6Zi5pc1BsYWluT2JqZWN0KG4pP2YubWVyZ2Uoe30sbik6Zi5pc0FycmF5KG4pP24uc2xpY2UoKTpufWZ1bmN0aW9uIG8ocCxuLHMpe2lmKGYuaXNVbmRlZmluZWQobikpe2lmKCFmLmlzVW5kZWZpbmVkKHApKXJldHVybiBpKHZvaWQgMCxwLHMpfWVsc2UgcmV0dXJuIGkocCxuLHMpfWZ1bmN0aW9uIHIocCxuKXtpZighZi5pc1VuZGVmaW5lZChuKSlyZXR1cm4gaSh2b2lkIDAsbil9ZnVuY3Rpb24gYShwLG4pe2lmKGYuaXNVbmRlZmluZWQobikpe2lmKCFmLmlzVW5kZWZpbmVkKHApKXJldHVybiBpKHZvaWQgMCxwKX1lbHNlIHJldHVybiBpKHZvaWQgMCxuKX1mdW5jdGlvbiBnKHAsbixzKXtpZihzIGluIGUpcmV0dXJuIGkocCxuKTtpZihzIGluIEEpcmV0dXJuIGkodm9pZCAwLHApfWxldCBjPXt1cmw6cixtZXRob2Q6cixkYXRhOnIsYmFzZVVSTDphLHRyYW5zZm9ybVJlcXVlc3Q6YSx0cmFuc2Zvcm1SZXNwb25zZTphLHBhcmFtc1NlcmlhbGl6ZXI6YSx0aW1lb3V0OmEsdGltZW91dE1lc3NhZ2U6YSx3aXRoQ3JlZGVudGlhbHM6YSx3aXRoWFNSRlRva2VuOmEsYWRhcHRlcjphLHJlc3BvbnNlVHlwZTphLHhzcmZDb29raWVOYW1lOmEseHNyZkhlYWRlck5hbWU6YSxvblVwbG9hZFByb2dyZXNzOmEsb25Eb3dubG9hZFByb2dyZXNzOmEsZGVjb21wcmVzczphLG1heENvbnRlbnRMZW5ndGg6YSxtYXhCb2R5TGVuZ3RoOmEsYmVmb3JlUmVkaXJlY3Q6YSx0cmFuc3BvcnQ6YSxodHRwQWdlbnQ6YSxodHRwc0FnZW50OmEsY2FuY2VsVG9rZW46YSxzb2NrZXRQYXRoOmEscmVzcG9uc2VFbmNvZGluZzphLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczoocCxuKT0+byhTdChwKSxTdChuKSwhMCl9O3JldHVybiBmLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihuKXtsZXQgcz1jW25dfHxvLEI9cyhBW25dLGVbbl0sbik7Zi5pc1VuZGVmaW5lZChCKSYmcyE9PWd8fCh0W25dPUIpfSksdH12YXIgRkE9IjEuNi44Ijt2YXIgcmU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57cmVbQV09ZnVuY3Rpb24oaSl7cmV0dXJuIHR5cGVvZiBpPT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIGJ0PXt9O3JlLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsaSl7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiJbQXhpb3MgdiIrRkErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIityKyInIithKyhpPyIuICIraToiIil9cmV0dXJuKHIsYSxnKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgaChvKGEsIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLGguRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhYnRbYV0mJihidFthXT0hMCxjb25zb2xlLndhcm4obyhhLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShyLGEsZyk6ITB9fTtmdW5jdGlvbiBCaShBLGUsdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBoKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixoLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgaT1PYmplY3Qua2V5cyhBKSxvPWkubGVuZ3RoO2Zvcig7by0tID4wOyl7bGV0IHI9aVtvXSxhPWVbcl07aWYoYSl7bGV0IGc9QVtyXSxjPWc9PT12b2lkIDB8fGEoZyxyLEEpO2lmKGMhPT0hMCl0aHJvdyBuZXcgaCgib3B0aW9uICIrcisiIG11c3QgYmUgIitjLGguRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgaCgiVW5rbm93biBvcHRpb24gIityLGguRVJSX0JBRF9PUFRJT04pfX12YXIgUEE9e2Fzc2VydE9wdGlvbnM6QmksdmFsaWRhdG9yczpyZX07dmFyIEw9UEEudmFsaWRhdG9ycyxaPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgakEscmVzcG9uc2U6bmV3IGpBfX1hc3luYyByZXF1ZXN0KGUsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUsdCl9Y2F0Y2goaSl7aWYoaSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvPXt9KTpvPW5ldyBFcnJvcjtsZXQgcj1vLnN0YWNrP28uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtpLnN0YWNrP3ImJiFTdHJpbmcoaS5zdGFjaykuZW5kc1dpdGgoci5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihpLnN0YWNrKz1gCmArcik6aS5zdGFjaz1yfXRocm93IGl9fV9yZXF1ZXN0KGUsdCl7dHlwZW9mIGU9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPWUpOnQ9ZXx8e30sdD14KHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDppLHBhcmFtc1NlcmlhbGl6ZXI6byxoZWFkZXJzOnJ9PXQ7aSE9PXZvaWQgMCYmUEEuYXNzZXJ0T3B0aW9ucyhpLHtzaWxlbnRKU09OUGFyc2luZzpMLnRyYW5zaXRpb25hbChMLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkwudHJhbnNpdGlvbmFsKEwuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpMLnRyYW5zaXRpb25hbChMLmJvb2xlYW4pfSwhMSksbyE9bnVsbCYmKGYuaXNGdW5jdGlvbihvKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpvfTpQQS5hc3NlcnRPcHRpb25zKG8se2VuY29kZTpMLmZ1bmN0aW9uLHNlcmlhbGl6ZTpMLmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBhPXImJmYubWVyZ2Uoci5jb21tb24sclt0Lm1ldGhvZF0pO3ImJmYuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxsPT57ZGVsZXRlIHJbbF19KSx0LmhlYWRlcnM9ay5jb25jYXQoYSxyKTtsZXQgZz1bXSxjPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihDKXt0eXBlb2YgQy5ydW5XaGVuPT0iZnVuY3Rpb24iJiZDLnJ1bldoZW4odCk9PT0hMXx8KGM9YyYmQy5zeW5jaHJvbm91cyxnLnVuc2hpZnQoQy5mdWxmaWxsZWQsQy5yZWplY3RlZCkpfSk7bGV0IHA9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihDKXtwLnB1c2goQy5mdWxmaWxsZWQsQy5yZWplY3RlZCl9KTtsZXQgbixzPTAsQjtpZighYyl7bGV0IGw9W1JBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IobC51bnNoaWZ0LmFwcGx5KGwsZyksbC5wdXNoLmFwcGx5KGwscCksQj1sLmxlbmd0aCxuPVByb21pc2UucmVzb2x2ZSh0KTtzPEI7KW49bi50aGVuKGxbcysrXSxsW3MrK10pO3JldHVybiBufUI9Zy5sZW5ndGg7bGV0IEk9dDtmb3Iocz0wO3M8Qjspe2xldCBsPWdbcysrXSxDPWdbcysrXTt0cnl7ST1sKEkpfWNhdGNoKG0pe0MuY2FsbCh0aGlzLG0pO2JyZWFrfX10cnl7bj1SQS5jYWxsKHRoaXMsSSl9Y2F0Y2gobCl7cmV0dXJuIFByb21pc2UucmVqZWN0KGwpfWZvcihzPTAsQj1wLmxlbmd0aDtzPEI7KW49bi50aGVuKHBbcysrXSxwW3MrK10pO3JldHVybiBufWdldFVyaShlKXtlPXgodGhpcy5kZWZhdWx0cyxlKTtsZXQgdD1nQShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBhQSh0LGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTtmLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe1oucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMucmVxdWVzdCh4KGl8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihpfHx7fSkuZGF0YX0pKX19KTtmLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkpe3JldHVybiBmdW5jdGlvbihyLGEsZyl7cmV0dXJuIHRoaXMucmVxdWVzdCh4KGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOmk/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTphfSkpfX1aLnByb3RvdHlwZVtlXT10KCksWi5wcm90b3R5cGVbZSsiRm9ybSJdPXQoITApfSk7dmFyIHBBPVo7dmFyIGllPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXt0PXJ9KTtsZXQgaT10aGlzO3RoaXMucHJvbWlzZS50aGVuKG89PntpZighaS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1pLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOylpLl9saXN0ZW5lcnNbcl0obyk7aS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1vPT57bGV0IHIsYT1uZXcgUHJvbWlzZShnPT57aS5zdWJzY3JpYmUoZykscj1nfSkudGhlbihvKTtyZXR1cm4gYS5jYW5jZWw9ZnVuY3Rpb24oKXtpLnVuc3Vic2NyaWJlKHIpfSxhfSxlKGZ1bmN0aW9uKHIsYSxnKXtpLnJlYXNvbnx8KGkucmVhc29uPW5ldyBHKHIsYSxnKSx0KGkucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihvKXtlPW99KSxjYW5jZWw6ZX19fSxrdD1pZTtmdW5jdGlvbiBvZShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gbmUoQSl7cmV0dXJuIGYuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIGFlPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhhZSkuZm9yRWFjaCgoW0EsZV0pPT57YWVbZV09QX0pO3ZhciBSdD1hZTtmdW5jdGlvbiBGdChBKXtsZXQgZT1uZXcgcEEoQSksdD1pQShwQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gZi5leHRlbmQodCxwQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLGYuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obyl7cmV0dXJuIEZ0KHgoQSxvKSl9LHR9dmFyIEQ9RnQoVik7RC5BeGlvcz1wQTtELkNhbmNlbGVkRXJyb3I9RztELkNhbmNlbFRva2VuPWt0O0QuaXNDYW5jZWw9bEE7RC5WRVJTSU9OPUZBO0QudG9Gb3JtRGF0YT1UO0QuQXhpb3NFcnJvcj1oO0QuQ2FuY2VsPUQuQ2FuY2VsZWRFcnJvcjtELmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O0Quc3ByZWFkPW9lO0QuaXNBeGlvc0Vycm9yPW5lO0QubWVyZ2VDb25maWc9eDtELkF4aW9zSGVhZGVycz1rO0QuZm9ybVRvSlNPTj1BPT5TQShmLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO0QuZ2V0QWRhcHRlcj1rQS5nZXRBZGFwdGVyO0QuSHR0cFN0YXR1c0NvZGU9UnQ7RC5kZWZhdWx0PUQ7dmFyIFg9RDt2YXJ7QXhpb3M6aHMsQXhpb3NFcnJvcjp3cyxDYW5jZWxlZEVycm9yOkRzLGlzQ2FuY2VsOlNzLENhbmNlbFRva2VuOmJzLFZFUlNJT046a3MsYWxsOlJzLENhbmNlbDpGcyxpc0F4aW9zRXJyb3I6UHMsc3ByZWFkOldzLHRvRm9ybURhdGE6VXMsQXhpb3NIZWFkZXJzOk5zLEh0dHBTdGF0dXNDb2RlOk9zLGZvcm1Ub0pTT046TXMsZ2V0QWRhcHRlcjp4cyxtZXJnZUNvbmZpZzpUc309WDthc3luYyBmdW5jdGlvbiBjaShBLGUpe2xldCB0PUEsaT1udWxsO2lmKHQ9PW51bGwpaT1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG89YXdhaXQgWC5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLHI9VVJMLmNyZWF0ZU9iamVjdFVSTChvLmRhdGEpO2k9bmV3IFdvcmtlcihyLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSBpPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiBpfXZhciB1QT1jaTtmdW5jdGlvbiBQdChBKXtsZXQgZT1HQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W1RBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIENpKEEsZSx0KXtsZXQgaTtpZihBIT1udWxsKXtsZXQgcj1BO3JldHVybiByLndvcmtlclByb3h5IT09dm9pZCAwPyhpPXIud29ya2VyUHJveHkse3dvcmtlclByb3h5Omksd29ya2VyOnJ9KTpQdChBKX1sZXQgbz1hd2FpdCB1QShlLHQpO3JldHVybiBQdChvKX12YXIgV3Q9Q2k7YXN5bmMgZnVuY3Rpb24gbWkoQSxlLHQpe2xldCBpPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/aT1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/aT1BOmk9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsaS5lbmRzV2l0aCgiLmpzIikmJihpPWkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMykpLGkuZW5kc1dpdGgoIi53YXNtIikmJihpPWkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtNSkpO2xldCBvPWAke2l9Lndhc21gLGE9KGF3YWl0IFguZ2V0KG8se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtpfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OmF9KX12YXIgVXQ9bWk7dmFyIE50PWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciB4dD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixPdD1uZXcgVGV4dEVuY29kZXIsTXQ9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIEVpKEEsZSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0saT1BLmZzX29wZW4oZSx0LmZsYWdzKSxyPUEuZnNfc3RhdChlKS5zaXplLGE9bnVsbDt4dD9hPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTphPW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgZz1uZXcgVWludDhBcnJheShhKTtyZXR1cm4gQS5mc19yZWFkKGksZywwLHIsMCksQS5mc19jbG9zZShpKSxnfWZ1bmN0aW9uIFR0KEEsZSx0KXtsZXQgaT1udWxsO3h0P2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOmk9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBvPW5ldyBVaW50OEFycmF5KGkpLHI9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUsdCk7cmV0dXJuIG8uc2V0KHIpLG99ZnVuY3Rpb24gUyhBLGUsdCxpKXtsZXQgbz0wO3JldHVybiBlIT09bnVsbCYmKG89QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxpLGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG8pKSxvfWZ1bmN0aW9uIHEoQSxlLHQpe2xldCBpPUpTT04uc3RyaW5naWZ5KGUpLG89QS5sZW5ndGhCeXRlc1VURjgoaSkrMSxyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxvXSk7QS5zdHJpbmdUb1VURjgoaSxyLG8pfWZ1bmN0aW9uIFIoQSxlLHQsaSl7bGV0IG89QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSkscj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxhPVR0KEEsbyxyKTtyZXR1cm4gTihpLGEuYnVmZmVyKX1mdW5jdGlvbiBXQShBLGUpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLGk9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2UoaSl9ZnVuY3Rpb24gZGkoQSxlLHQsaSl7aSE9bnVsbCYmaS5sZW5ndGg+MCYmaS5mb3JFYWNoKGZ1bmN0aW9uKHAsbil7c3dpdGNoKHAudHlwZSl7Y2FzZSB1LlRleHRTdHJlYW06e2xldCBzPU90LmVuY29kZShwLmRhdGEuZGF0YSksQj1TKEEscyxuLDApLEk9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gfTtxKEEsSSxuKTticmVha31jYXNlIHUuSnNvbkNvbXBhdGlibGU6e2xldCBzPU90LmVuY29kZShKU09OLnN0cmluZ2lmeShwLmRhdGEpKSxCPVMoQSxzLG4sMCksST17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWB9O3EoQSxJLG4pO2JyZWFrfWNhc2UgdS5CaW5hcnlTdHJlYW06e2xldCBzPXAuZGF0YS5kYXRhLEI9UyhBLHMsbiwwKSxJPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07cShBLEksbik7YnJlYWt9Y2FzZSB1LlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShwLmRhdGEucGF0aCxwLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSB1LkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKHAuZGF0YS5wYXRoLHAuZGF0YS5kYXRhKTticmVha31jYXNlIHUuSW1hZ2U6e2xldCBzPXAuZGF0YSxCPVMoQSxzLmRhdGEsbiwwKSxJPVMoQSxzLmRpcmVjdGlvbixuLDEpLGw9dHlwZW9mIHMubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20ocy5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLEM9e2ltYWdlVHlwZTpzLmltYWdlVHlwZSxuYW1lOnMubmFtZSxvcmlnaW46cy5vcmlnaW4sc3BhY2luZzpzLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7SX1gLHNpemU6cy5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbWV0YWRhdGE6bH07cShBLEMsbik7YnJlYWt9Y2FzZSB1Lk1lc2g6e2xldCBzPXAuZGF0YSxCPVMoQSxzLnBvaW50cyxuLDApLEk9UyhBLHMuY2VsbHMsbiwxKSxsPVMoQSxzLnBvaW50RGF0YSxuLDIpLEM9UyhBLHMuY2VsbERhdGEsbiwzKSxtPXttZXNoVHlwZTpzLm1lc2hUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLG51bWJlck9mQ2VsbHM6cy5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7SX1gLGNlbGxCdWZmZXJTaXplOnMuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YH07cShBLG0sbik7YnJlYWt9Y2FzZSB1LlBvaW50U2V0OntsZXQgcz1wLmRhdGEsQj1TKEEscy5wb2ludHMsbiwwKSxJPVMoQSxzLnBvaW50RGF0YSxuLDEpLGw9e3BvaW50U2V0VHlwZTpzLnBvaW50U2V0VHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtJfWB9O3EoQSxsLG4pO2JyZWFrfWNhc2UgdS5Qb2x5RGF0YTp7bGV0IHM9cC5kYXRhLEI9UyhBLHMucG9pbnRzLG4sMCksST1TKEEscy52ZXJ0aWNlcyxuLDEpLGw9UyhBLHMubGluZXMsbiwyKSxDPVMoQSxzLnBvbHlnb25zLG4sMyksbT1TKEEscy50cmlhbmdsZVN0cmlwcyxuLDQpLHc9UyhBLHMucG9pbnREYXRhLG4sNSksVz1TKEEscy5wb2ludERhdGEsbiw2KSxVPXtwb2x5RGF0YVR5cGU6cy5wb2x5RGF0YVR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsdmVydGljZXNCdWZmZXJTaXplOnMudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7SX1gLGxpbmVzQnVmZmVyU2l6ZTpzLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxwb2x5Z29uc0J1ZmZlclNpemU6cy5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOnMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bX1gLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3d9YCxudW1iZXJPZkNlbGxQaXhlbHM6cy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtXfWB9O3EoQSxVLG4pO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBvPUEuc3RhY2tTYXZlKCkscj0wO3RyeXtyPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChwKXt0aHJvdyB0eXBlb2YgcD09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShwKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxwfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobyl9bGV0IGE9QS5nZXRNb2R1bGVTdGRvdXQoKSxnPUEuZ2V0TW9kdWxlU3RkZXJyKCksYz1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmcj09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihwLG4pe2xldCBzPW51bGw7c3dpdGNoKHAudHlwZSl7Y2FzZSB1LlRleHRTdHJlYW06e2xldCBJPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLGw9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksQz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsSSxsKTtzPXtkYXRhOk10LmRlY29kZShDKX07YnJlYWt9Y2FzZSB1Lkpzb25Db21wYXRpYmxlOntsZXQgST1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxsPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEksbCk7cz1KU09OLnBhcnNlKE10LmRlY29kZShDKSk7YnJlYWt9Y2FzZSB1LkJpbmFyeVN0cmVhbTp7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksbD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKTtzPXtkYXRhOlR0KEEsSSxsKX07YnJlYWt9Y2FzZSB1LlRleHRGaWxlOntzPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShwLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgdS5CaW5hcnlGaWxlOntzPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6RWkoQSxwLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgdS5JbWFnZTp7bGV0IEk9V0EoQSxuKTtJLmRhdGE9UihBLG4sMCxJLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxJLmRpcmVjdGlvbj1SKEEsbiwxLEsuRmxvYXQ2NCksSS5tZXRhZGF0YT1uZXcgTWFwKEkubWV0YWRhdGEpLHM9STticmVha31jYXNlIHUuTWVzaDp7bGV0IEk9V0EoQSxuKTtJLm51bWJlck9mUG9pbnRzPjA/SS5wb2ludHM9UihBLG4sMCxJLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6SS5wb2ludHM9TihJLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEkubnVtYmVyT2ZDZWxscz4wP0kuY2VsbHM9UihBLG4sMSxJLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpJLmNlbGxzPU4oSS5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEkubnVtYmVyT2ZQb2ludFBpeGVscz4wP0kucG9pbnREYXRhPVIoQSxuLDIsSS5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6SS5wb2ludERhdGE9TihJLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksSS5udW1iZXJPZkNlbGxQaXhlbHM+MD9JLmNlbGxEYXRhPVIoQSxuLDMsSS5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpJLmNlbGxEYXRhPU4oSS5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1JO2JyZWFrfWNhc2UgdS5Qb2ludFNldDp7bGV0IEk9V0EoQSxuKTtJLm51bWJlck9mUG9pbnRzPjA/SS5wb2ludHM9UihBLG4sMCxJLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOkkucG9pbnRzPU4oSS5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksSS5udW1iZXJPZlBvaW50UGl4ZWxzPjA/SS5wb2ludERhdGE9UihBLG4sMSxJLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6SS5wb2ludERhdGE9TihJLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9STticmVha31jYXNlIHUuUG9seURhdGE6e2xldCBJPVdBKEEsbik7SS5udW1iZXJPZlBvaW50cz4wP0kucG9pbnRzPVIoQSxuLDAsSy5GbG9hdDMyKTpJLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LEkudmVydGljZXNCdWZmZXJTaXplPjA/SS52ZXJ0aWNlcz1SKEEsbiwxLEYuVUludDMyKTpJLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxJLmxpbmVzQnVmZmVyU2l6ZT4wP0kubGluZXM9UihBLG4sMixGLlVJbnQzMik6SS5saW5lcz1uZXcgVWludDMyQXJyYXksSS5wb2x5Z29uc0J1ZmZlclNpemU+MD9JLnBvbHlnb25zPVIoQSxuLDMsRi5VSW50MzIpOkkucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LEkudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/SS50cmlhbmdsZVN0cmlwcz1SKEEsbiw0LEYuVUludDMyKTpJLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxJLm51bWJlck9mUG9pbnRQaXhlbHM+MD9JLnBvaW50RGF0YT1SKEEsbiw1LEkucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpJLnBvaW50RGF0YT1OKEkucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksSS5udW1iZXJPZkNlbGxQaXhlbHM+MD9JLmNlbGxEYXRhPVIoQSxuLDYsSS5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6SS5jZWxsRGF0YT1OKEkucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgQj17dHlwZTpwLnR5cGUsZGF0YTpzfTtjLnB1c2goQil9KSx7cmV0dXJuVmFsdWU6cixzdGRvdXQ6YSxzdGRlcnI6ZyxvdXRwdXRzOmN9fXZhciBHdD1kaTt2YXIgUWk9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIHlpKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IGk9MDtpPEEubGVuZ3RoO2krKyl7bGV0IG89aGkoQVtpXSxlKTtvIT09bnVsbCYmdC5wdXNoKG8pfXJldHVybiB0fWZ1bmN0aW9uIGhpKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksUWkmJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBMdD15aTtmdW5jdGlvbiB3aShBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgSnQ9d2k7ZnVuY3Rpb24gRGkoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIEh0PURpO2Z1bmN0aW9uIFNpKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBZdD1TaTt2YXIgYmk7ZnVuY3Rpb24gVUEoKXtyZXR1cm4gYml9dmFyIGtpO2Z1bmN0aW9uIHF0KCl7cmV0dXJuIGtpfXZhciBSaTtmdW5jdGlvbiBOQSgpe3JldHVybiBSaX12YXIgc2U9bmV3IE1hcDtmdW5jdGlvbiBGaSgpe2xldCBBPU5BKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBLdCgpe2xldCBBPVVBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIE9BKCl7bGV0IEE9cXQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBQaShBLGUsdCl7bGV0IGk9QSxvPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYoaT1uZXcgVVJMKEEuaHJlZiksbz1pLmhyZWYpLHNlLmhhcyhvKSlyZXR1cm4gc2UuZ2V0KG8pO3tsZXQgcj1hd2FpdCBVdChBLGU/LnRvU3RyaW5nKCk/P0t0KCksdD8/T0EoKSk7cmV0dXJuIHNlLnNldChvLHIpLHJ9fWFzeW5jIGZ1bmN0aW9uIFdpKEEsZSx0LGksbyl7aWYoIWF3YWl0IE50KCkpe2xldCBtPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChtKSxuZXcgRXJyb3IobSl9bGV0IHI9bz8ud2ViV29ya2VyPz9udWxsO2lmKHI9PT0hMSl7bGV0IG09YXdhaXQgUGkoQS50b1N0cmluZygpLG8/LnBpcGVsaW5lQmFzZVVybCxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9PQSgpKTtyZXR1cm4gR3QobSxlLHQsaSl9bGV0IGE9cixnPW8/LnBpcGVsaW5lV29ya2VyVXJsPz9GaSgpLGM9dHlwZW9mIGchPSJzdHJpbmciJiZ0eXBlb2YgZz8uaHJlZjwidSI/Zy5ocmVmOmcse3dvcmtlclByb3h5OnAsd29ya2VyOm59PWF3YWl0IFd0KGEsYyxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9PQSgpKTthPW47bGV0IHM9W107aSE9bnVsbCYmaS5sZW5ndGg+MCYmaS5mb3JFYWNoKGZ1bmN0aW9uKG0pe2lmKG0udHlwZT09PXUuQmluYXJ5U3RyZWFtKXtsZXQgdz1tLmRhdGEuZGF0YTtzLnB1c2godyl9ZWxzZSBpZihtLnR5cGU9PT11LkJpbmFyeUZpbGUpe2xldCB3PW0uZGF0YS5kYXRhO3MucHVzaCh3KX1lbHNlIGlmKG0udHlwZT09PXUuSW1hZ2Upe2xldCB3PW0uZGF0YTt3LmRhdGEhPT1udWxsJiZzLnB1c2goLi4uSnQodykpfWVsc2UgaWYobS50eXBlPT09dS5NZXNoKXtsZXQgdz1tLmRhdGE7cy5wdXNoKC4uLkh0KHcpKX1lbHNlIGlmKG0udHlwZT09PXUuUG9seURhdGEpe2xldCB3PW0uZGF0YTtzLnB1c2goLi4uWXQodykpfX0pO2xldCBCPW8/LnBpcGVsaW5lQmFzZVVybD8/S3QoKSxJPXR5cGVvZiBCIT0ic3RyaW5nIiYmdHlwZW9mIEI/LmhyZWY8InUiP0IuaHJlZjpCLGw9aSE9bnVsbD9MQShpLEx0KHMsbz8ubm9Db3B5KSk6bnVsbCxDPWF3YWl0IHAucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLEksZSx0LGwsbz8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/T0EoKSk7cmV0dXJue3JldHVyblZhbHVlOkMucmV0dXJuVmFsdWUsc3Rkb3V0OkMuc3Rkb3V0LHN0ZGVycjpDLnN0ZGVycixvdXRwdXRzOkMub3V0cHV0cyx3ZWJXb3JrZXI6YX19dmFyIGQ9V2k7dmFyIFVpPW51bGw7ZnVuY3Rpb24ganQoKXtyZXR1cm4gVWl9dmFyIE5pPW5ldyBNYXAoW10pLCQ9Tmk7dmFyIE9pPSIxLjQuMCIsdnQ9T2k7dmFyIEllLE1pPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9tZXNoLWlvQCR7dnR9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBGSShBKXtJZT1BfWZ1bmN0aW9uIFEoKXtpZih0eXBlb2YgSWU8InUiKXJldHVybiBJZTtsZXQgQT1VQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpNaX12YXIgbGUseGk9bnVsbDtmdW5jdGlvbiBfdChBKXtsZT1BfWZ1bmN0aW9uIEUoKXtpZih0eXBlb2YgbGU8InUiKXJldHVybiBsZTtsZXQgQT1OQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTp4aX12YXIgQUE9bnVsbDthc3luYyBmdW5jdGlvbiBWdCgpe2xldCBBPUUoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO0FBPWF3YWl0IHVBKGUpfWZ1bmN0aW9uIHhJKEEpe0FBPUF9YXN5bmMgZnVuY3Rpb24geSgpe2lmKEFBIT09bnVsbClyZXR1cm4gQUEudGVybWluYXRlZCYmYXdhaXQgVnQoKSxBQTtsZXQgQT1qdCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCBWdCgpLEFBKX1hc3luYyBmdW5jdGlvbiBUaShBLGU9e30pe2xldCB0PVt7dHlwZTp1Lkpzb25Db21wYXRpYmxlfSx7dHlwZTp1Lk1lc2h9XSxpPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBtPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtpPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KG0pfX1sZXQgbz1be3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6aX1dLHI9W10sYT1pLnBhdGg7ci5wdXNoKGEpLHIucHVzaCgiMCIpLHIucHVzaCgiMSIpLHIucHVzaCgiLS1tZW1vcnktaW8iKSxlLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJnIucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9InZ0ay1wb2x5LWRhdGEtcmVhZC1tZXNoIixuPWU/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsdCxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLG1lc2g6bFsxXT8uZGF0YX19dmFyIGdlPVRpO2FzeW5jIGZ1bmN0aW9uIEdpKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuTWVzaCxkYXRhOkF9XSxyPVtdO3IucHVzaCgiMCIpLHIucHVzaCgiMCIpO2xldCBjPWU7ci5wdXNoKGMpLHIucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJnIucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmci5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJnIucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHA9InZ0ay1wb2x5LWRhdGEtd3JpdGUtbWVzaCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6bFsxXT8uZGF0YX19dmFyIHBlPUdpO2FzeW5jIGZ1bmN0aW9uIExpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuTWVzaH1dLGk9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2k9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fWxldCBvPVt7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTppfV0scj1bXSxhPWkucGF0aDtyLnB1c2goYSksci5wdXNoKCIwIiksci5wdXNoKCIxIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ib2JqLXJlYWQtbWVzaCIsbj1lPy53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLHQsbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxtZXNoOmxbMV0/LmRhdGF9fXZhciB1ZT1MaTthc3luYyBmdW5jdGlvbiBKaShBLGUsdD17fSl7bGV0IGk9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTp1Lk1lc2gsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJvYmotd3JpdGUtbWVzaCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6bFsxXT8uZGF0YX19dmFyIGZlPUppO2FzeW5jIGZ1bmN0aW9uIEhpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuTWVzaH1dLGk9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2k9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fWxldCBvPVt7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTppfV0scj1bXSxhPWkucGF0aDtyLnB1c2goYSksci5wdXNoKCIwIiksci5wdXNoKCIxIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ic3RsLXJlYWQtbWVzaCIsbj1lPy53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLHQsbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxtZXNoOmxbMV0/LmRhdGF9fXZhciBCZT1IaTthc3luYyBmdW5jdGlvbiBZaShBLGUsdD17fSl7bGV0IGk9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTp1Lk1lc2gsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJzdGwtd3JpdGUtbWVzaCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6bFsxXT8uZGF0YX19dmFyIGNlPVlpO2FzeW5jIGZ1bmN0aW9uIHFpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuTWVzaH1dLGk9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2k9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fWxldCBvPVt7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTppfV0scj1bXSxhPWkucGF0aDtyLnB1c2goYSksci5wdXNoKCIwIiksci5wdXNoKCIxIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ib2ZmLXJlYWQtbWVzaCIsbj1lPy53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLHQsbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxtZXNoOmxbMV0/LmRhdGF9fXZhciBDZT1xaTthc3luYyBmdW5jdGlvbiBLaShBLGUsdD17fSl7bGV0IGk9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTp1Lk1lc2gsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJvZmYtd3JpdGUtbWVzaCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6bFsxXT8uZGF0YX19dmFyIG1lPUtpO2FzeW5jIGZ1bmN0aW9uIGppKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuTWVzaH1dLGk9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2k9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fWxldCBvPVt7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTppfV0scj1bXSxhPWkucGF0aDtyLnB1c2goYSksci5wdXNoKCIwIiksci5wdXNoKCIxIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0id2FzbS1yZWFkLW1lc2giLG49ZT8ud2ViV29ya2VyO249PT12b2lkIDAmJihuPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkIsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBkKHAscix0LG8se3BpcGVsaW5lQmFzZVVybDpRKCkscGlwZWxpbmVXb3JrZXJVcmw6RSgpLHdlYldvcmtlcjpuLG5vQ29weTplPy5ub0NvcHl9KTtpZihCIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsbWVzaDpsWzFdPy5kYXRhfX12YXIgRWU9amk7YXN5bmMgZnVuY3Rpb24gdmkoQSxlLHQ9e30pe2xldCBpPVt7dHlwZTp1Lkpzb25Db21wYXRpYmxlfSx7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6dS5NZXNoLGRhdGE6QX1dLHI9W107ci5wdXNoKCIwIiksci5wdXNoKCIwIik7bGV0IGM9ZTtyLnB1c2goYyksci5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZyLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmci5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgcD0id2FzbS13cml0ZS1tZXNoIixuPXQ/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsaSxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6dD8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpsWzFdPy5kYXRhfX12YXIgZGU9dmk7YXN5bmMgZnVuY3Rpb24gX2koQSxlPXt9KXtsZXQgdD1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5NZXNofV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJ3YXNtLXpzdGQtcmVhZC1tZXNoIixuPWU/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsdCxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLG1lc2g6bFsxXT8uZGF0YX19dmFyIFFlPV9pO2FzeW5jIGZ1bmN0aW9uIFZpKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuTWVzaCxkYXRhOkF9XSxyPVtdO3IucHVzaCgiMCIpLHIucHVzaCgiMCIpO2xldCBjPWU7ci5wdXNoKGMpLHIucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJnIucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmci5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJnIucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHA9Indhc20tenN0ZC13cml0ZS1tZXNoIixuPXQ/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsaSxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6dD8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpsWzFdPy5kYXRhfX12YXIgeWU9Vmk7YXN5bmMgZnVuY3Rpb24gemkoQSxlPXt9KXtsZXQgdD1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5NZXNofV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJzd2MtcmVhZC1tZXNoIixuPWU/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsdCxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLG1lc2g6bFsxXT8uZGF0YX19dmFyIGhlPXppO2FzeW5jIGZ1bmN0aW9uIFppKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuTWVzaCxkYXRhOkF9XSxyPVtdO3IucHVzaCgiMCIpLHIucHVzaCgiMCIpO2xldCBjPWU7ci5wdXNoKGMpLHIucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJnIucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmci5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJnIucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHA9InN3Yy13cml0ZS1tZXNoIixuPXQ/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsaSxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6dD8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpsWzFdPy5kYXRhfX12YXIgd2U9Wmk7YXN5bmMgZnVuY3Rpb24gWGkoQSxlPXt9KXtsZXQgdD1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5NZXNofV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJieXUtcmVhZC1tZXNoIixuPWU/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsdCxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLG1lc2g6bFsxXT8uZGF0YX19dmFyIERlPVhpO2FzeW5jIGZ1bmN0aW9uICRpKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuTWVzaCxkYXRhOkF9XSxyPVtdO3IucHVzaCgiMCIpLHIucHVzaCgiMCIpO2xldCBjPWU7ci5wdXNoKGMpLHIucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJnIucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmci5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJnIucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHA9ImJ5dS13cml0ZS1tZXNoIixuPXQ/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsaSxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6dD8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpsWzFdPy5kYXRhfX12YXIgU2U9JGk7YXN5bmMgZnVuY3Rpb24gQW8oQSxlPXt9KXtsZXQgdD1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5NZXNofV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJmcmVlLXN1cmZlci1hc2NpaS1yZWFkLW1lc2giLG49ZT8ud2ViV29ya2VyO249PT12b2lkIDAmJihuPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkIsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBkKHAscix0LG8se3BpcGVsaW5lQmFzZVVybDpRKCkscGlwZWxpbmVXb3JrZXJVcmw6RSgpLHdlYldvcmtlcjpuLG5vQ29weTplPy5ub0NvcHl9KTtpZihCIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsbWVzaDpsWzFdPy5kYXRhfX12YXIgYmU9QW87YXN5bmMgZnVuY3Rpb24gZW8oQSxlLHQ9e30pe2xldCBpPVt7dHlwZTp1Lkpzb25Db21wYXRpYmxlfSx7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6dS5NZXNoLGRhdGE6QX1dLHI9W107ci5wdXNoKCIwIiksci5wdXNoKCIwIik7bGV0IGM9ZTtyLnB1c2goYyksci5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZyLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmci5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgcD0iZnJlZS1zdXJmZXItYXNjaWktd3JpdGUtbWVzaCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6bFsxXT8uZGF0YX19dmFyIGtlPWVvO2FzeW5jIGZ1bmN0aW9uIHRvKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuTWVzaH1dLGk9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2k9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fWxldCBvPVt7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTppfV0scj1bXSxhPWkucGF0aDtyLnB1c2goYSksci5wdXNoKCIwIiksci5wdXNoKCIxIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iZnJlZS1zdXJmZXItYmluYXJ5LXJlYWQtbWVzaCIsbj1lPy53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLHQsbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxtZXNoOmxbMV0/LmRhdGF9fXZhciBSZT10bzthc3luYyBmdW5jdGlvbiBybyhBLGUsdD17fSl7bGV0IGk9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTp1Lk1lc2gsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJmcmVlLXN1cmZlci1iaW5hcnktd3JpdGUtbWVzaCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6bFsxXT8uZGF0YX19dmFyIEZlPXJvO3ZhciBpbz1uZXcgTWFwKFtbInZ0ayIsW2dlLHBlXV0sWyJvYmoiLFt1ZSxmZV1dLFsic3RsIixbQmUsY2VdXSxbIm9mZiIsW0NlLG1lXV0sWyJ3YXNtIixbRWUsZGVdXSxbIndhc20tenN0IixbUWUseWVdXSxbInN3YyIsW2hlLHdlXV0sWyJieXUiLFtEZSxTZV1dLFsiZnJlZS1zdXJmZXItYXNjaWkiLFtiZSxrZV1dLFsiZnJlZS1zdXJmZXItYmluYXJ5IixbUmUsRmVdXV0pLGVBPWlvO2FzeW5jIGZ1bmN0aW9uIG9vKEEsZT17fSl7bGV0IHQ9QS50eXBlPz8iIixpPUEubmFtZT8/QS5wYXRoPz8iZmlsZU5hbWUiLG89TShpKS50b0xvd2VyQ2FzZSgpLHI9ZT8ud2ViV29ya2VyLGE9QTtpZihBIGluc3RhbmNlb2YgQmxvYil7bGV0IEk9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2E9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoSSl9fWxldCBnPW51bGw7aWYodCYmJC5oYXModCkpZz0kLmdldCh0KTtlbHNlIGlmKEouaGFzKG8pKWc9Si5nZXQobyk7ZWxzZSBmb3IobGV0IEkgb2YgZUEudmFsdWVzKCkpaWYoSVswXSE9PW51bGwpe2xldHt3ZWJXb3JrZXI6bCxjb3VsZFJlYWQ6QyxtZXNoOm19PWF3YWl0IElbMF0oe3BhdGg6YS5wYXRoLGRhdGE6YS5kYXRhLnNsaWNlKCl9LHtpbmZvcm1hdGlvbk9ubHk6ZS5pbmZvcm1hdGlvbk9ubHksd2ViV29ya2VyOnIsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKHI9bCxDKXJldHVybnt3ZWJXb3JrZXI6cixtZXNoOm19fWlmKCFnKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIraSk7bGV0IHA9ZUEuZ2V0KGcpWzBdLHt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6cyxtZXNoOkJ9PWF3YWl0IHAoYSx7aW5mb3JtYXRpb25Pbmx5OmUuaW5mb3JtYXRpb25Pbmx5LHdlYldvcmtlcjpyLG5vQ29weTplPy5ub0NvcHl9KTtpZihyPW4sIXMpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCByZWFkOiAiK2kpO3JldHVybnt3ZWJXb3JrZXI6cixtZXNoOkJ9fXZhciBubz1vbzthc3luYyBmdW5jdGlvbiBhbyhBLGUsdD17fSl7bGV0IGk9QSxvPXQubWltZVR5cGUscj1NKGUpLnRvTG93ZXJDYXNlKCksYT10LndlYldvcmtlcixnPW51bGw7aWYodHlwZW9mIG88InUiJiYkLmhhcyhvKSlnPSQuZ2V0KG8pO2Vsc2UgaWYoSi5oYXMocikpZz1KLmdldChyKTtlbHNlIGZvcihsZXQgbCBvZiBlQS52YWx1ZXMoKSlpZihsWzFdIT09bnVsbCl7bGV0e3dlYldvcmtlcjpDLGNvdWxkV3JpdGU6bSxzZXJpYWxpemVkTWVzaDp3fT1hd2FpdCBsWzFdKGksZSx0KTtpZihhPUMsbSlyZXR1cm57d2ViV29ya2VyOmEsc2VyaWFsaXplZE1lc2g6d319aWYoIWcpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIElPIGZvcjogIitlKTtsZXQgcD1lQS5nZXQoZylbMV0se3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6cyxzZXJpYWxpemVkTWVzaDpCfT1hd2FpdCBwKGksZSx0KTtpZihhPW4sIXMpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCB3cml0ZTogIitlKTtyZXR1cm57d2ViV29ya2VyOmEsc2VyaWFsaXplZE1lc2g6Qn19dmFyIHNvPWFvO3ZhciBJbz1uZXcgTWFwKFtdKSx0QT1Jbzthc3luYyBmdW5jdGlvbiBsbyhBLGU9e30pe2xldCB0PVt7dHlwZTp1Lkpzb25Db21wYXRpYmxlfSx7dHlwZTp1LlBvaW50U2V0fV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJ2dGstcG9seS1kYXRhLXJlYWQtcG9pbnQtc2V0IixuPWU/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsdCxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLHBvaW50U2V0OmxbMV0/LmRhdGF9fXZhciBQZT1sbzthc3luYyBmdW5jdGlvbiBnbyhBLGUsdD17fSl7bGV0IGk9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTp1LlBvaW50U2V0LGRhdGE6QX1dLHI9W107ci5wdXNoKCIwIiksci5wdXNoKCIwIik7bGV0IGM9ZTtyLnB1c2goYyksci5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZyLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmci5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgcD0idnRrLXBvbHktZGF0YS13cml0ZS1wb2ludC1zZXQiLG49dD8ud2ViV29ya2VyO249PT12b2lkIDAmJihuPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkIsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBkKHAscixpLG8se3BpcGVsaW5lQmFzZVVybDpRKCkscGlwZWxpbmVXb3JrZXJVcmw6RSgpLHdlYldvcmtlcjpuLG5vQ29weTp0Py5ub0NvcHl9KTtpZihCIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRQb2ludFNldDpsWzFdPy5kYXRhfX12YXIgV2U9Z287YXN5bmMgZnVuY3Rpb24gcG8oQSxlPXt9KXtsZXQgdD1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5Qb2ludFNldH1dLGk9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2k9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fWxldCBvPVt7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTppfV0scj1bXSxhPWkucGF0aDtyLnB1c2goYSksci5wdXNoKCIwIiksci5wdXNoKCIxIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ib2JqLXJlYWQtcG9pbnQtc2V0IixuPWU/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsdCxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLHBvaW50U2V0OmxbMV0/LmRhdGF9fXZhciBVZT1wbzthc3luYyBmdW5jdGlvbiB1byhBLGUsdD17fSl7bGV0IGk9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTp1LlBvaW50U2V0LGRhdGE6QX1dLHI9W107ci5wdXNoKCIwIiksci5wdXNoKCIwIik7bGV0IGM9ZTtyLnB1c2goYyksci5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZyLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmci5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgcD0ib2JqLXdyaXRlLXBvaW50LXNldCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZFBvaW50U2V0OmxbMV0/LmRhdGF9fXZhciBOZT11bzthc3luYyBmdW5jdGlvbiBmbyhBLGU9e30pe2xldCB0PVt7dHlwZTp1Lkpzb25Db21wYXRpYmxlfSx7dHlwZTp1LlBvaW50U2V0fV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJvZmYtcmVhZC1wb2ludC1zZXQiLG49ZT8ud2ViV29ya2VyO249PT12b2lkIDAmJihuPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkIsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBkKHAscix0LG8se3BpcGVsaW5lQmFzZVVybDpRKCkscGlwZWxpbmVXb3JrZXJVcmw6RSgpLHdlYldvcmtlcjpuLG5vQ29weTplPy5ub0NvcHl9KTtpZihCIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEscG9pbnRTZXQ6bFsxXT8uZGF0YX19dmFyIE9lPWZvO2FzeW5jIGZ1bmN0aW9uIEJvKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuUG9pbnRTZXQsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJvZmYtd3JpdGUtcG9pbnQtc2V0IixuPXQ/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsaSxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6dD8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkUG9pbnRTZXQ6bFsxXT8uZGF0YX19dmFyIE1lPUJvO2FzeW5jIGZ1bmN0aW9uIGNvKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuUG9pbnRTZXR9XSxpPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBtPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtpPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KG0pfX1sZXQgbz1be3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6aX1dLHI9W10sYT1pLnBhdGg7ci5wdXNoKGEpLHIucHVzaCgiMCIpLHIucHVzaCgiMSIpLHIucHVzaCgiLS1tZW1vcnktaW8iKSxlLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJnIucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Indhc20tcmVhZC1wb2ludC1zZXQiLG49ZT8ud2ViV29ya2VyO249PT12b2lkIDAmJihuPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkIsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBkKHAscix0LG8se3BpcGVsaW5lQmFzZVVybDpRKCkscGlwZWxpbmVXb3JrZXJVcmw6RSgpLHdlYldvcmtlcjpuLG5vQ29weTplPy5ub0NvcHl9KTtpZihCIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEscG9pbnRTZXQ6bFsxXT8uZGF0YX19dmFyIHhlPWNvO2FzeW5jIGZ1bmN0aW9uIENvKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuUG9pbnRTZXQsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJ3YXNtLXdyaXRlLXBvaW50LXNldCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZFBvaW50U2V0OmxbMV0/LmRhdGF9fXZhciBUZT1Dbzthc3luYyBmdW5jdGlvbiBtbyhBLGU9e30pe2xldCB0PVt7dHlwZTp1Lkpzb25Db21wYXRpYmxlfSx7dHlwZTp1LlBvaW50U2V0fV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJ3YXNtLXpzdGQtcmVhZC1wb2ludC1zZXQiLG49ZT8ud2ViV29ya2VyO249PT12b2lkIDAmJihuPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkIsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBkKHAscix0LG8se3BpcGVsaW5lQmFzZVVybDpRKCkscGlwZWxpbmVXb3JrZXJVcmw6RSgpLHdlYldvcmtlcjpuLG5vQ29weTplPy5ub0NvcHl9KTtpZihCIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEscG9pbnRTZXQ6bFsxXT8uZGF0YX19dmFyIEdlPW1vO2FzeW5jIGZ1bmN0aW9uIEVvKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuUG9pbnRTZXQsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJ3YXNtLXpzdGQtd3JpdGUtcG9pbnQtc2V0IixuPXQ/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsaSxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6dD8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkUG9pbnRTZXQ6bFsxXT8uZGF0YX19dmFyIExlPUVvO3ZhciBRbz1uZXcgTWFwKFtbInZ0ayIsW1BlLFdlXV0sWyJvYmoiLFtVZSxOZV1dLFsib2ZmIixbT2UsTWVdXSxbIndhc20iLFt4ZSxUZV1dLFsid2FzbS16c3QiLFtHZSxMZV1dXSksckE9UW87YXN5bmMgZnVuY3Rpb24geW8oQSxlPXt9KXtsZXQgdD1BLnR5cGU/PyIiLGk9QS5uYW1lPz9BLnBhdGg/PyJmaWxlTmFtZSIsbz1NKGkpLnRvTG93ZXJDYXNlKCkscj1lPy53ZWJXb3JrZXIsYT1BO2lmKEEgaW5zdGFuY2VvZiBCbG9iKXtsZXQgST1hd2FpdCBBLmFycmF5QnVmZmVyKCk7YT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShJKX19bGV0IGc9bnVsbDtpZih0JiZ0QS5oYXModCkpZz10QS5nZXQodCk7ZWxzZSBpZihILmhhcyhvKSlnPUguZ2V0KG8pO2Vsc2UgZm9yKGxldCBJIG9mIHJBLnZhbHVlcygpKWlmKElbMF0hPT1udWxsKXtsZXR7d2ViV29ya2VyOmwsY291bGRSZWFkOkMscG9pbnRTZXQ6bX09YXdhaXQgSVswXSh7cGF0aDphLnBhdGgsZGF0YTphLmRhdGEuc2xpY2UoKX0se2luZm9ybWF0aW9uT25seTplLmluZm9ybWF0aW9uT25seSx3ZWJXb3JrZXI6cixub0NvcHk6ZT8ubm9Db3B5fSk7aWYocj1sLEMpcmV0dXJue3dlYldvcmtlcjpyLHBvaW50U2V0Om19fWlmKCFnKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIraSk7bGV0IHA9ckEuZ2V0KGcpWzBdLHt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6cyxwb2ludFNldDpCfT1hd2FpdCBwKGEse2luZm9ybWF0aW9uT25seTplLmluZm9ybWF0aW9uT25seSx3ZWJXb3JrZXI6cixub0NvcHk6ZT8ubm9Db3B5fSk7aWYocj1uLCFzKXRocm93IEVycm9yKCJDb3VsZCBub3QgcmVhZDogIitpKTtyZXR1cm57d2ViV29ya2VyOnIscG9pbnRTZXQ6Qn19dmFyIGhvPXlvO2FzeW5jIGZ1bmN0aW9uIHdvKEEsZSx0PXt9KXtsZXQgaT1BLG89dC5taW1lVHlwZSxyPU0oZSkudG9Mb3dlckNhc2UoKSxhPXQud2ViV29ya2VyLGc9bnVsbDtpZih0eXBlb2YgbzwidSImJnRBLmhhcyhvKSlnPXRBLmdldChvKTtlbHNlIGlmKEguaGFzKHIpKWc9SC5nZXQocik7ZWxzZSBmb3IobGV0IGwgb2YgckEudmFsdWVzKCkpaWYobFsxXSE9PW51bGwpe2xldHt3ZWJXb3JrZXI6Qyxjb3VsZFdyaXRlOm0sc2VyaWFsaXplZFBvaW50U2V0Ond9PWF3YWl0IGxbMV0oaSxlLHQpO2lmKGE9QyxtKXJldHVybnt3ZWJXb3JrZXI6YSxzZXJpYWxpemVkUG9pbnRTZXQ6d319aWYoIWcpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIElPIGZvcjogIitlKTtsZXQgcD1yQS5nZXQoZylbMV0se3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6cyxzZXJpYWxpemVkUG9pbnRTZXQ6Qn09YXdhaXQgcChpLGUsdCk7aWYoYT1uLCFzKXRocm93IEVycm9yKCJDb3VsZCBub3Qgd3JpdGU6ICIrZSk7cmV0dXJue3dlYldvcmtlcjphLHNlcmlhbGl6ZWRQb2ludFNldDpCfX12YXIgRG89d287dmFyIHp0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciBJST1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGVJPShBLHQpPT57Zm9yKHZhciBJIGluIHQpSUkoQSxJLHtnZXQ6dFtJXSxlbnVtZXJhYmxlOiEwfSl9O3ZhciB2QT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxnST1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxyST1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IikscEE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGVBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSwkQT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixvST17Y2FuSGFuZGxlOkE9PiRBKEEpJiZBW3ZBXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOnQscG9ydDI6SX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBpQShBLHQpLFtJLFtJXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksbkkoQSl9fSxpST17Y2FuSGFuZGxlOkE9PiRBKEEpJiZlQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCB0O3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/dD17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OnQ9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW3QsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sQXQ9bmV3IE1hcChbWyJwcm94eSIsb0ldLFsidGhyb3ciLGlJXV0pO2Z1bmN0aW9uIENJKEEsdCl7Zm9yKGxldCBJIG9mIEEpaWYodD09PUl8fEk9PT0iKiJ8fEkgaW5zdGFuY2VvZiBSZWdFeHAmJkkudGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpQShBLHQ9Z2xvYmFsVGhpcyxJPVsiKiJdKXt0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGUoZyl7aWYoIWd8fCFnLmRhdGEpcmV0dXJuO2lmKCFDSShJLGcub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7Zy5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOnIsdHlwZTpvLHBhdGg6bn09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sZy5kYXRhKSxhPShnLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKGIpLFE7dHJ5e2xldCBCPW4uc2xpY2UoMCwtMSkucmVkdWNlKChmLHMpPT5mW3NdLEEpLGk9bi5yZWR1Y2UoKGYscyk9PmZbc10sQSk7c3dpdGNoKG8pe2Nhc2UiR0VUIjpRPWk7YnJlYWs7Y2FzZSJTRVQiOkJbbi5zbGljZSgtMSlbMF1dPWIoZy5kYXRhLnZhbHVlKSxRPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOlE9aS5hcHBseShCLGEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IGkoLi4uYSk7UT1hSShmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6c309bmV3IE1lc3NhZ2VDaGFubmVsO2lBKEEscyksUT1GQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpRPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goQil7UT17dmFsdWU6QixbZUFdOjB9fVByb21pc2UucmVzb2x2ZShRKS5jYXRjaChCPT4oe3ZhbHVlOkIsW2VBXTowfSkpLnRoZW4oQj0+e2xldFtpLGZdPW9BKEIpO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZiksbz09PSJSRUxFQVNFIiYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZSksdHQodCkscEEgaW4gQSYmdHlwZW9mIEFbcEFdPT0iZnVuY3Rpb24iJiZBW3BBXSgpKX0pLmNhdGNoKEI9PntsZXRbaSxmXT1vQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2VBXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse2lkOnJ9KSxmKX0pfSksdC5zdGFydCYmdC5zdGFydCgpfWZ1bmN0aW9uIEJJKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIHR0KEEpe0JJKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gbkkoQSx0KXtyZXR1cm4gU0EoQSxbXSx0KX1mdW5jdGlvbiBJQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gSXQoQSl7cmV0dXJuIHEoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57dHQoQSl9KX12YXIgZ0E9bmV3IFdlYWtNYXAsckE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IHQ9KGdBLmdldChBKXx8MCktMTtnQS5zZXQoQSx0KSx0PT09MCYmSXQoQSl9KTtmdW5jdGlvbiBzSShBLHQpe2xldCBJPShnQS5nZXQodCl8fDApKzE7Z0Euc2V0KHQsSSksckEmJnJBLnJlZ2lzdGVyKEEsdCxBKX1mdW5jdGlvbiBRSShBKXtyQSYmckEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBTQShBLHQ9W10sST1mdW5jdGlvbigpe30pe2xldCBlPSExLGc9bmV3IFByb3h5KEkse2dldChyLG8pe2lmKElBKGUpLG89PT1ySSlyZXR1cm4oKT0+e1FJKGcpLEl0KEEpLGU9ITB9O2lmKG89PT0idGhlbiIpe2lmKHQubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+Z307bGV0IG49cShBLHt0eXBlOiJHRVQiLHBhdGg6dC5tYXAoYT0+YS50b1N0cmluZygpKX0pLnRoZW4oYik7cmV0dXJuIG4udGhlbi5iaW5kKG4pfXJldHVybiBTQShBLFsuLi50LG9dKX0sc2V0KHIsbyxuKXtJQShlKTtsZXRbYSxRXT1vQShuKTtyZXR1cm4gcShBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnQsb10ubWFwKEI9PkIudG9TdHJpbmcoKSksdmFsdWU6YX0sUSkudGhlbihiKX0sYXBwbHkocixvLG4pe0lBKGUpO2xldCBhPXRbdC5sZW5ndGgtMV07aWYoYT09PWdJKXJldHVybiBxKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oYik7aWYoYT09PSJiaW5kIilyZXR1cm4gU0EoQSx0LnNsaWNlKDAsLTEpKTtsZXRbUSxCXT1fQShuKTtyZXR1cm4gcShBLHt0eXBlOiJBUFBMWSIscGF0aDp0Lm1hcChpPT5pLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpRfSxCKS50aGVuKGIpfSxjb25zdHJ1Y3QocixvKXtJQShlKTtsZXRbbixhXT1fQShvKTtyZXR1cm4gcShBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6dC5tYXAoUT0+US50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6bn0sYSkudGhlbihiKX19KTtyZXR1cm4gc0koZyxBKSxnfWZ1bmN0aW9uIEVJKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIF9BKEEpe2xldCB0PUEubWFwKG9BKTtyZXR1cm5bdC5tYXAoST0+SVswXSksRUkodC5tYXAoST0+SVsxXSkpXX12YXIgZXQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRkEoQSx0KXtyZXR1cm4gZXQuc2V0KEEsdCksQX1mdW5jdGlvbiBhSShBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbdkFdOiEwfSl9ZnVuY3Rpb24gb0EoQSl7Zm9yKGxldFt0LEldb2YgQXQpaWYoSS5jYW5IYW5kbGUoQSkpe2xldFtlLGddPUkuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTp0LHZhbHVlOmV9LGddfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxldC5nZXQoQSl8fFtdXX1mdW5jdGlvbiBiKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEF0LmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gcShBLHQsSSl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntsZXQgZz1jSSgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihvKXshby5kYXRhfHwhby5kYXRhLmlkfHxvLmRhdGEuaWQhPT1nfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxlKG8uZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6Z30sdCksSSl9KX1mdW5jdGlvbiBjSSgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gVyhBLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOmZJfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpVQX09T2JqZWN0LEJBPShBPT50PT57bGV0IEk9ZkkuY2FsbCh0KTtyZXR1cm4gQVtJXXx8KEFbSV09SS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLFU9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLHQ9PkJBKHQpPT09QSksbkE9QT0+dD0+dHlwZW9mIHQ9PT1BLHtpc0FycmF5Okt9PUFycmF5LFo9bkEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGxJKEEpe3JldHVybiBBIT09bnVsbCYmIVooQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWihBLmNvbnN0cnVjdG9yKSYmRihBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgaXQ9VSgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBESShBKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOnQ9QSYmQS5idWZmZXImJml0KEEuYnVmZmVyKSx0fXZhciB1ST1uQSgic3RyaW5nIiksRj1uQSgiZnVuY3Rpb24iKSxDdD1uQSgibnVtYmVyIiksc0E9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixoST1BPT5BPT09ITB8fEE9PT0hMSxDQT1BPT57aWYoQkEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1VQShBKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxkST1VKCJEYXRlIikseUk9VSgiRmlsZSIpLHdJPVUoIkJsb2IiKSxtST1VKCJGaWxlTGlzdCIpLHBJPUE9PnNBKEEpJiZGKEEucGlwZSksU0k9QT0+e2xldCB0O3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fEYoQS5hcHBlbmQpJiYoKHQ9QkEoQSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZGKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LEZJPVUoIlVSTFNlYXJjaFBhcmFtcyIpLFJJPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBWKEEsdCx7YWxsT3duS2V5czpJPSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IGUsZztpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSksSyhBKSlmb3IoZT0wLGc9QS5sZW5ndGg7ZTxnO2UrKyl0LmNhbGwobnVsbCxBW2VdLGUsQSk7ZWxzZXtsZXQgcj1JP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG89ci5sZW5ndGgsbjtmb3IoZT0wO2U8bztlKyspbj1yW2VdLHQuY2FsbChudWxsLEFbbl0sbixBKX19ZnVuY3Rpb24gQnQoQSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgST1PYmplY3Qua2V5cyhBKSxlPUkubGVuZ3RoLGc7Zm9yKDtlLS0gPjA7KWlmKGc9SVtlXSx0PT09Zy50b0xvd2VyQ2FzZSgpKXJldHVybiBnO3JldHVybiBudWxsfXZhciBudD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLHN0PUE9PiFaKEEpJiZBIT09bnQ7ZnVuY3Rpb24gTkEoKXtsZXR7Y2FzZWxlc3M6QX09c3QodGhpcykmJnRoaXN8fHt9LHQ9e30sST0oZSxnKT0+e2xldCByPUEmJkJ0KHQsZyl8fGc7Q0EodFtyXSkmJkNBKGUpP3Rbcl09TkEodFtyXSxlKTpDQShlKT90W3JdPU5BKHt9LGUpOksoZSk/dFtyXT1lLnNsaWNlKCk6dFtyXT1lfTtmb3IobGV0IGU9MCxnPWFyZ3VtZW50cy5sZW5ndGg7ZTxnO2UrKylhcmd1bWVudHNbZV0mJlYoYXJndW1lbnRzW2VdLEkpO3JldHVybiB0fXZhciBOST0oQSx0LEkse2FsbE93bktleXM6ZX09e30pPT4oVih0LChnLHIpPT57SSYmRihnKT9BW3JdPVcoZyxJKTpBW3JdPWd9LHthbGxPd25LZXlzOmV9KSxBKSxVST1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLEdJPShBLHQsSSxlKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsZSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTp0LnByb3RvdHlwZX0pLEkmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsSSl9LGtJPShBLHQsSSxlKT0+e2xldCBnLHIsbyxuPXt9O2lmKHQ9dHx8e30sQT09bnVsbClyZXR1cm4gdDtkb3tmb3IoZz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxyPWcubGVuZ3RoO3ItLSA+MDspbz1nW3JdLCghZXx8ZShvLEEsdCkpJiYhbltvXSYmKHRbb109QVtvXSxuW29dPSEwKTtBPUkhPT0hMSYmVUEoQSl9d2hpbGUoQSYmKCFJfHxJKEEsdCkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LExJPShBLHQsSSk9PntBPVN0cmluZyhBKSwoST09PXZvaWQgMHx8ST5BLmxlbmd0aCkmJihJPUEubGVuZ3RoKSxJLT10Lmxlbmd0aDtsZXQgZT1BLmluZGV4T2YodCxJKTtyZXR1cm4gZSE9PS0xJiZlPT09SX0sSkk9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKEsoQSkpcmV0dXJuIEE7bGV0IHQ9QS5sZW5ndGg7aWYoIUN0KHQpKXJldHVybiBudWxsO2xldCBJPW5ldyBBcnJheSh0KTtmb3IoO3QtLSA+MDspSVt0XT1BW3RdO3JldHVybiBJfSxIST0oQT0+dD0+QSYmdCBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmVUEoVWludDhBcnJheSkpLFlJPShBLHQpPT57bGV0IGU9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxnO2Zvcig7KGc9ZS5uZXh0KCkpJiYhZy5kb25lOyl7bGV0IHI9Zy52YWx1ZTt0LmNhbGwoQSxyWzBdLHJbMV0pfX0sYkk9KEEsdCk9PntsZXQgSSxlPVtdO2Zvcig7KEk9QS5leGVjKHQpKSE9PW51bGw7KWUucHVzaChJKTtyZXR1cm4gZX0sTUk9VSgiSFRNTEZvcm1FbGVtZW50IikscUk9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24oSSxlLGcpe3JldHVybiBlLnRvVXBwZXJDYXNlKCkrZ30pLHJ0PSgoe2hhc093blByb3BlcnR5OkF9KT0+KHQsSSk9PkEuY2FsbCh0LEkpKShPYmplY3QucHJvdG90eXBlKSxLST1VKCJSZWdFeHAiKSxRdD0oQSx0KT0+e2xldCBJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLGU9e307VihJLChnLHIpPT57bGV0IG87KG89dChnLHIsQSkpIT09ITEmJihlW3JdPW98fGcpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxlKX0sT0k9QT0+e1F0KEEsKHQsSSk9PntpZihGKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoSSkhPT0tMSlyZXR1cm4hMTtsZXQgZT1BW0ldO2lmKEYoZSkpe2lmKHQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdCl7dC53cml0YWJsZT0hMTtyZXR1cm59dC5zZXR8fCh0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrSSsiXCciKX0pfX0pfSxUST0oQSx0KT0+e2xldCBJPXt9LGU9Zz0+e2cuZm9yRWFjaChyPT57SVtyXT0hMH0pfTtyZXR1cm4gSyhBKT9lKEEpOmUoU3RyaW5nKEEpLnNwbGl0KHQpKSxJfSxQST0oKT0+e30seEk9KEEsdCk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOnQpLFJBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsb3Q9IjAxMjM0NTY3ODkiLEV0PXtESUdJVDpvdCxBTFBIQTpSQSxBTFBIQV9ESUdJVDpSQStSQS50b1VwcGVyQ2FzZSgpK290fSxqST0oQT0xNix0PUV0LkFMUEhBX0RJR0lUKT0+e2xldCBJPSIiLHtsZW5ndGg6ZX09dDtmb3IoO0EtLTspSSs9dFtNYXRoLnJhbmRvbSgpKmV8MF07cmV0dXJuIEl9O2Z1bmN0aW9uIFdJKEEpe3JldHVybiEhKEEmJkYoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBaST1BPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxJPShlLGcpPT57aWYoc0EoZSkpe2lmKHQuaW5kZXhPZihlKT49MClyZXR1cm47aWYoISgidG9KU09OImluIGUpKXt0W2ddPWU7bGV0IHI9SyhlKT9bXTp7fTtyZXR1cm4gVihlLChvLG4pPT57bGV0IGE9SShvLGcrMSk7IVooYSkmJihyW25dPWEpfSksdFtnXT12b2lkIDAscn19cmV0dXJuIGV9O3JldHVybiBJKEEsMCl9LFZJPVUoIkFzeW5jRnVuY3Rpb24iKSxYST1BPT5BJiYoc0EoQSl8fEYoQSkpJiZGKEEudGhlbikmJkYoQS5jYXRjaCksQz17aXNBcnJheTpLLGlzQXJyYXlCdWZmZXI6aXQsaXNCdWZmZXI6bEksaXNGb3JtRGF0YTpTSSxpc0FycmF5QnVmZmVyVmlldzpESSxpc1N0cmluZzp1SSxpc051bWJlcjpDdCxpc0Jvb2xlYW46aEksaXNPYmplY3Q6c0EsaXNQbGFpbk9iamVjdDpDQSxpc1VuZGVmaW5lZDpaLGlzRGF0ZTpkSSxpc0ZpbGU6eUksaXNCbG9iOndJLGlzUmVnRXhwOktJLGlzRnVuY3Rpb246Rixpc1N0cmVhbTpwSSxpc1VSTFNlYXJjaFBhcmFtczpGSSxpc1R5cGVkQXJyYXk6SEksaXNGaWxlTGlzdDptSSxmb3JFYWNoOlYsbWVyZ2U6TkEsZXh0ZW5kOk5JLHRyaW06Ukksc3RyaXBCT006VUksaW5oZXJpdHM6R0ksdG9GbGF0T2JqZWN0OmtJLGtpbmRPZjpCQSxraW5kT2ZUZXN0OlUsZW5kc1dpdGg6TEksdG9BcnJheTpKSSxmb3JFYWNoRW50cnk6WUksbWF0Y2hBbGw6YkksaXNIVE1MRm9ybTpNSSxoYXNPd25Qcm9wZXJ0eTpydCxoYXNPd25Qcm9wOnJ0LHJlZHVjZURlc2NyaXB0b3JzOlF0LGZyZWV6ZU1ldGhvZHM6T0ksdG9PYmplY3RTZXQ6VEksdG9DYW1lbENhc2U6cUksbm9vcDpQSSx0b0Zpbml0ZU51bWJlcjp4SSxmaW5kS2V5OkJ0LGdsb2JhbDpudCxpc0NvbnRleHREZWZpbmVkOnN0LEFMUEhBQkVUOkV0LGdlbmVyYXRlU3RyaW5nOmpJLGlzU3BlY0NvbXBsaWFudEZvcm06V0ksdG9KU09OT2JqZWN0OlpJLGlzQXN5bmNGbjpWSSxpc1RoZW5hYmxlOlhJfTtmdW5jdGlvbiBPKEEsdCxJLGUsZyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIix0JiYodGhpcy5jb2RlPXQpLEkmJih0aGlzLmNvbmZpZz1JKSxlJiYodGhpcy5yZXF1ZXN0PWUpLGcmJih0aGlzLnJlc3BvbnNlPWcpfUMuaW5oZXJpdHMoTyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGF0PU8ucHJvdG90eXBlLGN0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e2N0W0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sY3QpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtPLmZyb209KEEsdCxJLGUsZyxyKT0+e2xldCBvPU9iamVjdC5jcmVhdGUoYXQpO3JldHVybiBDLnRvRmxhdE9iamVjdChBLG8sZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1FcnJvci5wcm90b3R5cGV9LG49Pm4hPT0iaXNBeGlvc0Vycm9yIiksTy5jYWxsKG8sQS5tZXNzYWdlLHQsSSxlLGcpLG8uY2F1c2U9QSxvLm5hbWU9QS5uYW1lLHImJk9iamVjdC5hc3NpZ24obyxyKSxvfTt2YXIgbD1PO3ZhciBRQT1udWxsO2Z1bmN0aW9uIEdBKEEpe3JldHVybiBDLmlzUGxhaW5PYmplY3QoQSl8fEMuaXNBcnJheShBKX1mdW5jdGlvbiBsdChBKXtyZXR1cm4gQy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBmdChBLHQsSSl7cmV0dXJuIEE/QS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKGcscil7cmV0dXJuIGc9bHQoZyksIUkmJnI/IlsiK2crIl0iOmd9KS5qb2luKEk/Ii4iOiIiKTp0fWZ1bmN0aW9uIHpJKEEpe3JldHVybiBDLmlzQXJyYXkoQSkmJiFBLnNvbWUoR0EpfXZhciBfST1DLnRvRmxhdE9iamVjdChDLHt9LG51bGwsZnVuY3Rpb24odCl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KHQpfSk7ZnVuY3Rpb24gdkkoQSx0LEkpe2lmKCFDLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9dHx8bmV3KFFBfHxGb3JtRGF0YSksST1DLnRvRmxhdE9iamVjdChJLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyx1KXtyZXR1cm4hQy5pc1VuZGVmaW5lZCh1W2NdKX0pO2xldCBlPUkubWV0YVRva2VucyxnPUkudmlzaXRvcnx8QixyPUkuZG90cyxvPUkuaW5kZXhlcyxhPShJLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkMuaXNTcGVjQ29tcGxpYW50Rm9ybSh0KTtpZighQy5pc0Z1bmN0aW9uKGcpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gUShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihDLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFhJiZDLmlzQmxvYihFKSl0aHJvdyBuZXcgbCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gQy5pc0FycmF5QnVmZmVyKEUpfHxDLmlzVHlwZWRBcnJheShFKT9hJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gQihFLGMsdSl7bGV0IHk9RTtpZihFJiYhdSYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihDLmVuZHNXaXRoKGMsInt9IikpYz1lP2M6Yy5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoQy5pc0FycmF5KEUpJiZ6SShFKXx8KEMuaXNGaWxlTGlzdChFKXx8Qy5lbmRzV2l0aChjLCJbXSIpKSYmKHk9Qy50b0FycmF5KEUpKSlyZXR1cm4gYz1sdChjKSx5LmZvckVhY2goZnVuY3Rpb24oTix0SSl7IShDLmlzVW5kZWZpbmVkKE4pfHxOPT09bnVsbCkmJnQuYXBwZW5kKG89PT0hMD9mdChbY10sdEkscik6bz09PW51bGw/YzpjKyJbXSIsUShOKSl9KSwhMX1yZXR1cm4gR0EoRSk/ITA6KHQuYXBwZW5kKGZ0KHUsYyxyKSxRKEUpKSwhMSl9bGV0IGk9W10sZj1PYmplY3QuYXNzaWduKF9JLHtkZWZhdWx0VmlzaXRvcjpCLGNvbnZlcnRWYWx1ZTpRLGlzVmlzaXRhYmxlOkdBfSk7ZnVuY3Rpb24gcyhFLGMpe2lmKCFDLmlzVW5kZWZpbmVkKEUpKXtpZihpLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO2kucHVzaChFKSxDLmZvckVhY2goRSxmdW5jdGlvbih5LFIpeyghKEMuaXNVbmRlZmluZWQoeSl8fHk9PT1udWxsKSYmZy5jYWxsKHQseSxDLmlzU3RyaW5nKFIpP1IudHJpbSgpOlIsYyxmKSk9PT0hMCYmcyh5LGM/Yy5jb25jYXQoUik6W1JdKX0pLGkucG9wKCl9fWlmKCFDLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gcyhBKSx0fXZhciBKPXZJO2Z1bmN0aW9uIER0KEEpe2xldCB0PXsiISI6IiUyNTIxIiwiXCciOiIlMjUyNyIsIigiOiIlMjUyOCIsIikiOiIlMjUyOSIsIn4iOiIlMjU3RSIsIiUyNTIwIjoiKyIsIiUyNTAwIjoiXFwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIVwnKCl+XXwlMjUyMHwlMjUwMC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gdXQoQSx0KXt0aGlzLl9wYWlycz1bXSxBJiZKKEEsdGhpcyx0KX12YXIgaHQ9dXQucHJvdG90eXBlO2h0LmFwcGVuZD1mdW5jdGlvbih0LEkpe3RoaXMuX3BhaXJzLnB1c2goW3QsSV0pfTtodC50b1N0cmluZz1mdW5jdGlvbih0KXtsZXQgST10P2Z1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcyxlLER0KX06RHQ7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihnKXtyZXR1cm4gSShnWzBdKSsiPSIrSShnWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIEVBPXV0O2Z1bmN0aW9uICRJKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTI1M0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjUyNC9nLCIkIikucmVwbGFjZSgvJTI1MkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjUyMC9nLCIrIikucmVwbGFjZSgvJTI1NUIvZ2ksIlsiKS5yZXBsYWNlKC8lMjU1RC9naSwiXSIpfWZ1bmN0aW9uIFgoQSx0LEkpe2lmKCF0KXJldHVybiBBO2xldCBlPUkmJkkuZW5jb2RlfHwkSSxnPUkmJkkuc2VyaWFsaXplLHI7aWYoZz9yPWcodCxJKTpyPUMuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyBFQSh0LEkpLnRvU3RyaW5nKGUpLHIpe2xldCBvPUEuaW5kZXhPZigiJTIzIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK3J9cmV0dXJuIEF9dmFyIGtBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UodCxJLGUpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDp0LHJlamVjdGVkOkksc3luY2hyb25vdXM6ZT9lLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ZT9lLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QodCl7dGhpcy5oYW5kbGVyc1t0XSYmKHRoaXMuaGFuZGxlcnNbdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh0KXtDLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihlKXtlIT09bnVsbCYmdChlKX0pfX0sTEE9a0E7dmFyIGFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgZHQ9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOkVBO3ZhciB5dD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIHd0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIG10PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOmR0LEZvcm1EYXRhOnl0LEJsb2I6d3R9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgSkE9e307ZUkoSkEse2hhc0Jyb3dzZXJFbnY6KCk9PnB0LGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+QWUsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT50ZX0pO3ZhciBwdD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixBZT0oQT0+cHQmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSx0ZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHc9ey4uLkpBLC4uLm10fTtmdW5jdGlvbiBIQShBLHQpe3JldHVybiBKKEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihJLGUsZyxyKXtyZXR1cm4gdy5pc05vZGUmJkMuaXNCdWZmZXIoSSk/KHRoaXMuYXBwZW5kKGUsSS50b1N0cmluZygiYmFzZTY0IikpLCExKTpyLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHQpKX1mdW5jdGlvbiBJZShBKXtyZXR1cm4gQy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csQSkubWFwKHQ9PnRbMF09PT0iW10iPyIiOnRbMV18fHRbMF0pfWZ1bmN0aW9uIGVlKEEpe2xldCB0PXt9LEk9T2JqZWN0LmtleXMoQSksZSxnPUkubGVuZ3RoLHI7Zm9yKGU9MDtlPGc7ZSsrKXI9SVtlXSx0W3JdPUFbcl07cmV0dXJuIHR9ZnVuY3Rpb24gZ2UoQSl7ZnVuY3Rpb24gdChJLGUsZyxyKXtsZXQgbz1JW3IrK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBuPU51bWJlci5pc0Zpbml0ZSgrbyksYT1yPj1JLmxlbmd0aDtyZXR1cm4gbz0hbyYmQy5pc0FycmF5KGcpP2cubGVuZ3RoOm8sYT8oQy5oYXNPd25Qcm9wKGcsbyk/Z1tvXT1bZ1tvXSxlXTpnW29dPWUsIW4pOigoIWdbb118fCFDLmlzT2JqZWN0KGdbb10pKSYmKGdbb109W10pLHQoSSxlLGdbb10scikmJkMuaXNBcnJheShnW29dKSYmKGdbb109ZWUoZ1tvXSkpLCFuKX1pZihDLmlzRm9ybURhdGEoQSkmJkMuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgST17fTtyZXR1cm4gQy5mb3JFYWNoRW50cnkoQSwoZSxnKT0+e3QoSWUoZSksZyxJLDApfSksSX1yZXR1cm4gbnVsbH12YXIgY0E9Z2U7ZnVuY3Rpb24gcmUoQSx0LEkpe2lmKEMuaXNTdHJpbmcoQSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShBKSxDLnRyaW0oQSl9Y2F0Y2goZSl7aWYoZS5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBlfXJldHVybihJfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIFlBPXt0cmFuc2l0aW9uYWw6YUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbih0LEkpe2xldCBlPUkuZ2V0Q29udGVudFR5cGUoKXx8IiIsZz1lLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxyPUMuaXNPYmplY3QodCk7aWYociYmQy5pc0hUTUxGb3JtKHQpJiYodD1uZXcgRm9ybURhdGEodCkpLEMuaXNGb3JtRGF0YSh0KSlyZXR1cm4gZz9KU09OLnN0cmluZ2lmeShjQSh0KSk6dDtpZihDLmlzQXJyYXlCdWZmZXIodCl8fEMuaXNCdWZmZXIodCl8fEMuaXNTdHJlYW0odCl8fEMuaXNGaWxlKHQpfHxDLmlzQmxvYih0KSlyZXR1cm4gdDtpZihDLmlzQXJyYXlCdWZmZXJWaWV3KHQpKXJldHVybiB0LmJ1ZmZlcjtpZihDLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLHQudG9TdHJpbmcoKTtsZXQgbjtpZihyKXtpZihlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBIQSh0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKG49Qy5pc0ZpbGVMaXN0KHQpKXx8ZS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBhPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gSihuP3siZmlsZXNbXSI6dH06dCxhJiZuZXcgYSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIHJ8fGc/KEkuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxyZSh0KSk6dH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbih0KXtsZXQgST10aGlzLnRyYW5zaXRpb25hbHx8WUEudHJhbnNpdGlvbmFsLGU9SSYmSS5mb3JjZWRKU09OUGFyc2luZyxnPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKHQmJkMuaXNTdHJpbmcodCkmJihlJiYhdGhpcy5yZXNwb25zZVR5cGV8fGcpKXtsZXQgbz0hKEkmJkkuc2lsZW50SlNPTlBhcnNpbmcpJiZnO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChuKXtpZihvKXRocm93IG4ubmFtZT09PSJTeW50YXhFcnJvciI/bC5mcm9tKG4sbC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpufX1yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Qy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntZQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFQ9WUE7dmFyIG9lPUMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksU3Q9QT0+e2xldCB0PXt9LEksZSxnO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2c9by5pbmRleE9mKCI6IiksST1vLnN1YnN0cmluZygwLGcpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGU9by5zdWJzdHJpbmcoZysxKS50cmltKCksISghSXx8dFtJXSYmb2VbSV0pJiYoST09PSJzZXQtY29va2llIj90W0ldP3RbSV0ucHVzaChlKTp0W0ldPVtlXTp0W0ldPXRbSV0/dFtJXSsiLCAiK2U6ZSl9KSx0fTt2YXIgRnQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiB6KEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOkMuaXNBcnJheShBKT9BLm1hcChmQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIGllKEEpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCksST0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLGU7Zm9yKDtlPUkuZXhlYyhBKTspdFtlWzFdXT1lWzJdO3JldHVybiB0fXZhciBDZT1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBiQShBLHQsSSxlLGcpe2lmKEMuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMsdCxJKTtpZihnJiYodD1JKSwhIUMuaXNTdHJpbmcodCkpe2lmKEMuaXNTdHJpbmcoZSkpcmV0dXJuIHQuaW5kZXhPZihlKSE9PS0xO2lmKEMuaXNSZWdFeHAoZSkpcmV0dXJuIGUudGVzdCh0KX19ZnVuY3Rpb24gQmUoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCh0LEksZSk9PkkudG9VcHBlckNhc2UoKStlKX1mdW5jdGlvbiBuZShBLHQpe2xldCBJPUMudG9DYW1lbENhc2UoIiAiK3QpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChlPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsZStJLHt2YWx1ZTpmdW5jdGlvbihnLHIsbyl7cmV0dXJuIHRoaXNbZV0uY2FsbCh0aGlzLHQsZyxyLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3QmJnRoaXMuc2V0KHQpfXNldCh0LEksZSl7bGV0IGc9dGhpcztmdW5jdGlvbiByKG4sYSxRKXtsZXQgQj16KGEpO2lmKCFCKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgaT1DLmZpbmRLZXkoZyxCKTsoIWl8fGdbaV09PT12b2lkIDB8fFE9PT0hMHx8UT09PXZvaWQgMCYmZ1tpXSE9PSExKSYmKGdbaXx8YV09ZkEobikpfWxldCBvPShuLGEpPT5DLmZvckVhY2gobiwoUSxCKT0+cihRLEIsYSkpO3JldHVybiBDLmlzUGxhaW5PYmplY3QodCl8fHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP28odCxJKTpDLmlzU3RyaW5nKHQpJiYodD10LnRyaW0oKSkmJiFDZSh0KT9vKFN0KHQpLEkpOnQhPW51bGwmJnIoSSx0LGUpLHRoaXN9Z2V0KHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO2lmKGUpe2xldCBnPXRoaXNbZV07aWYoIUkpcmV0dXJuIGc7aWYoST09PSEwKXJldHVybiBpZShnKTtpZihDLmlzRnVuY3Rpb24oSSkpcmV0dXJuIEkuY2FsbCh0aGlzLGcsZSk7aWYoQy5pc1JlZ0V4cChJKSlyZXR1cm4gSS5leGVjKGcpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXModCxJKXtpZih0PXoodCksdCl7bGV0IGU9Qy5maW5kS2V5KHRoaXMsdCk7cmV0dXJuISEoZSYmdGhpc1tlXSE9PXZvaWQgMCYmKCFJfHxiQSh0aGlzLHRoaXNbZV0sZSxJKSkpfXJldHVybiExfWRlbGV0ZSh0LEkpe2xldCBlPXRoaXMsZz0hMTtmdW5jdGlvbiByKG8pe2lmKG89eihvKSxvKXtsZXQgbj1DLmZpbmRLZXkoZSxvKTtuJiYoIUl8fGJBKGUsZVtuXSxuLEkpKSYmKGRlbGV0ZSBlW25dLGc9ITApfX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLGd9Y2xlYXIodCl7bGV0IEk9T2JqZWN0LmtleXModGhpcyksZT1JLmxlbmd0aCxnPSExO2Zvcig7ZS0tOyl7bGV0IHI9SVtlXTsoIXR8fGJBKHRoaXMsdGhpc1tyXSxyLHQsITApKSYmKGRlbGV0ZSB0aGlzW3JdLGc9ITApfXJldHVybiBnfW5vcm1hbGl6ZSh0KXtsZXQgST10aGlzLGU9e307cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChnLHIpPT57bGV0IG89Qy5maW5kS2V5KGUscik7aWYobyl7SVtvXT1mQShnKSxkZWxldGUgSVtyXTtyZXR1cm59bGV0IG49dD9CZShyKTpTdHJpbmcocikudHJpbSgpO24hPT1yJiZkZWxldGUgSVtyXSxJW25dPWZBKGcpLGVbbl09ITB9KSx0aGlzfWNvbmNhdCguLi50KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi50KX10b0pTT04odCl7bGV0IEk9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gQy5mb3JFYWNoKHRoaXMsKGUsZyk9PntlIT1udWxsJiZlIT09ITEmJihJW2ddPXQmJkMuaXNBcnJheShlKT9lLmpvaW4oIiwgIik6ZSl9KSxJfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFt0LEldKT0+dCsiOiAiK0kpLmpvaW4oYCUwQWApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzP3Q6bmV3IHRoaXModCl9c3RhdGljIGNvbmNhdCh0LC4uLkkpe2xldCBlPW5ldyB0aGlzKHQpO3JldHVybiBJLmZvckVhY2goZz0+ZS5zZXQoZykpLGV9c3RhdGljIGFjY2Vzc29yKHQpe2xldCBlPSh0aGlzW0Z0XT10aGlzW0Z0XT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLGc9dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gcihvKXtsZXQgbj16KG8pO2Vbbl18fChuZShnLG8pLGVbbl09ITApfXJldHVybiBDLmlzQXJyYXkodCk/dC5mb3JFYWNoKHIpOnIodCksdGhpc319O1AuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO0MucmVkdWNlRGVzY3JpcHRvcnMoUC5wcm90b3R5cGUsKHt2YWx1ZTpBfSx0KT0+e2xldCBJPXRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KGUpe3RoaXNbSV09ZX19fSk7Qy5mcmVlemVNZXRob2RzKFApO3ZhciBtPVA7ZnVuY3Rpb24gXyhBLHQpe2xldCBJPXRoaXN8fFQsZT10fHxJLGc9bS5mcm9tKGUuaGVhZGVycykscj1lLmRhdGE7cmV0dXJuIEMuZm9yRWFjaChBLGZ1bmN0aW9uKG4pe3I9bi5jYWxsKEkscixnLm5vcm1hbGl6ZSgpLHQ/dC5zdGF0dXM6dm9pZCAwKX0pLGcubm9ybWFsaXplKCkscn1mdW5jdGlvbiB2KEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gUnQoQSx0LEkpe2wuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsbC5FUlJfQ0FOQ0VMRUQsdCxJKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifUMuaW5oZXJpdHMoUnQsbCx7X19DQU5DRUxfXzohMH0pO3ZhciBIPVJ0O2Z1bmN0aW9uIE1BKEEsdCxJKXtsZXQgZT1JLmNvbmZpZy52YWxpZGF0ZVN0YXR1czshSS5zdGF0dXN8fCFlfHxlKEkuc3RhdHVzKT9BKEkpOnQobmV3IGwoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIitJLnN0YXR1cyxbbC5FUlJfQkFEX1JFUVVFU1QsbC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKEkuc3RhdHVzLzEwMCktNF0sSS5jb25maWcsSS5yZXF1ZXN0LEkpKX12YXIgTnQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsdCxJLGUsZyxyKXtsZXQgbz1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpXTtDLmlzTnVtYmVyKEkpJiZvLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShJKS50b0dNVFN0cmluZygpKSxDLmlzU3RyaW5nKGUpJiZvLnB1c2goInBhdGg9IitlKSxDLmlzU3RyaW5nKGcpJiZvLnB1c2goImRvbWFpbj0iK2cpLHI9PT0hMCYmby5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9by5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBxQShBKXtyZXR1cm4vXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdChBKX1mdW5jdGlvbiBLQShBLHQpe3JldHVybiB0P0EucmVwbGFjZSgvXFwvP1xcLyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXFwvKy8sIiIpOkF9ZnVuY3Rpb24gJChBLHQpe3JldHVybiBBJiYhcUEodCk/S0EoQSx0KTp0fXZhciBVdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksST1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksZTtmdW5jdGlvbiBnKHIpe2xldCBvPXI7cmV0dXJuIHQmJihJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz1JLmhyZWYpLEkuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjpJLmhyZWYscHJvdG9jb2w6SS5wcm90b2NvbD9JLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpJLmhvc3Qsc2VhcmNoOkkuc2VhcmNoP0kuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOkkuaGFzaD9JLmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOkkuaG9zdG5hbWUscG9ydDpJLnBvcnQscGF0aG5hbWU6SS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/SS5wYXRobmFtZToiLyIrSS5wYXRobmFtZX19cmV0dXJuIGU9Zyh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IG49Qy5pc1N0cmluZyhvKT9nKG8pOm87cmV0dXJuIG4ucHJvdG9jb2w9PT1lLnByb3RvY29sJiZuLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIE9BKEEpe2xldCB0PS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiB0JiZ0WzFdfHwiIn1mdW5jdGlvbiBzZShBLHQpe0E9QXx8MTA7bGV0IEk9bmV3IEFycmF5KEEpLGU9bmV3IEFycmF5KEEpLGc9MCxyPTAsbztyZXR1cm4gdD10IT09dm9pZCAwP3Q6MWUzLGZ1bmN0aW9uKGEpe2xldCBRPURhdGUubm93KCksQj1lW3JdO298fChvPVEpLElbZ109YSxlW2ddPVE7bGV0IGk9cixmPTA7Zm9yKDtpIT09ZzspZis9SVtpKytdLGk9aSVBO2lmKGc9KGcrMSklQSxnPT09ciYmKHI9KHIrMSklQSksUS1vPHQpcmV0dXJuO2xldCBzPUImJlEtQjtyZXR1cm4gcz9NYXRoLnJvdW5kKGYqMWUzL3MpOnZvaWQgMH19dmFyIEd0PXNlO2Z1bmN0aW9uIGt0KEEsdCl7bGV0IEk9MCxlPUd0KDUwLDI1MCk7cmV0dXJuIGc9PntsZXQgcj1nLmxvYWRlZCxvPWcubGVuZ3RoQ29tcHV0YWJsZT9nLnRvdGFsOnZvaWQgMCxuPXItSSxhPWUobiksUT1yPD1vO0k9cjtsZXQgQj17bG9hZGVkOnIsdG90YWw6byxwcm9ncmVzczpvP3Ivbzp2b2lkIDAsYnl0ZXM6bixyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmbyYmUT8oby1yKS9hOnZvaWQgMCxldmVudDpnfTtCW3Q/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShCKX19dmFyIFFlPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsTHQ9UWUmJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihJLGUpe2xldCBnPUEuZGF0YSxyPW0uZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOm59PUEsYTtmdW5jdGlvbiBRKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpfWxldCBCO2lmKEMuaXNGb3JtRGF0YShnKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXIuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEI9ci5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1CP0Iuc3BsaXQoIjsiKS5tYXAoeT0+eS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtyLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO3Iuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgZj0kKEEuYmFzZVVSTCxBLnVybCk7aS5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksWChmLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksITApLGkudGltZW91dD1BLnRpbWVvdXQ7ZnVuY3Rpb24gcygpe2lmKCFpKXJldHVybjtsZXQgYz1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBpJiZpLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSx5PXtkYXRhOiFvfHxvPT09InRleHQifHxvPT09Impzb24iP2kucmVzcG9uc2VUZXh0OmkucmVzcG9uc2Usc3RhdHVzOmkuc3RhdHVzLHN0YXR1c1RleHQ6aS5zdGF0dXNUZXh0LGhlYWRlcnM6Yyxjb25maWc6QSxyZXF1ZXN0Oml9O01BKGZ1bmN0aW9uKE4pe0koTiksUSgpfSxmdW5jdGlvbihOKXtlKE4pLFEoKX0seSksaT1udWxsfWlmKCJvbmxvYWRlbmQiaW4gaT9pLm9ubG9hZGVuZD1zOmkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWl8fGkucmVhZHlTdGF0ZSE9PTR8fGkuc3RhdHVzPT09MCYmIShpLnJlc3BvbnNlVVJMJiZpLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChzKX0saS5vbmFib3J0PWZ1bmN0aW9uKCl7aSYmKGUobmV3IGwoIlJlcXVlc3QgYWJvcnRlZCIsbC5FQ09OTkFCT1JURUQsQSxpKSksaT1udWxsKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgbCgiTmV0d29yayBFcnJvciIsbC5FUlJfTkVUV09SSyxBLGkpKSxpPW51bGx9LGkub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IHU9QS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrQS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHk9QS50cmFuc2l0aW9uYWx8fGFBO0EudGltZW91dEVycm9yTWVzc2FnZSYmKHU9QS50aW1lb3V0RXJyb3JNZXNzYWdlKSxlKG5ldyBsKHUseS5jbGFyaWZ5VGltZW91dEVycm9yP2wuRVRJTUVET1VUOmwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbH0sdy5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihuJiZDLmlzRnVuY3Rpb24obikmJihuPW4oQSkpLG58fG4hPT0hMSYmVXQoZikpKXtsZXQgYz1BLnhzcmZIZWFkZXJOYW1lJiZBLnhzcmZDb29raWVOYW1lJiZOdC5yZWFkKEEueHNyZkNvb2tpZU5hbWUpO2MmJnIuc2V0KEEueHNyZkhlYWRlck5hbWUsYyl9Zz09PXZvaWQgMCYmci5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBpJiZDLmZvckVhY2goci50b0pTT04oKSxmdW5jdGlvbih1LHkpe2kuc2V0UmVxdWVzdEhlYWRlcih5LHUpfSksQy5pc1VuZGVmaW5lZChBLndpdGhDcmVkZW50aWFscyl8fChpLndpdGhDcmVkZW50aWFscz0hIUEud2l0aENyZWRlbnRpYWxzKSxvJiZvIT09Impzb24iJiYoaS5yZXNwb25zZVR5cGU9QS5yZXNwb25zZVR5cGUpLHR5cGVvZiBBLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa3QoQS5vbkRvd25sb2FkUHJvZ3Jlc3MsITApKSx0eXBlb2YgQS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZpLnVwbG9hZCYmaS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25VcGxvYWRQcm9ncmVzcykpLChBLmNhbmNlbFRva2VufHxBLnNpZ25hbCkmJihhPWM9PntpJiYoZSghY3x8Yy50eXBlP25ldyBIKG51bGwsQSxpKTpjKSxpLmFib3J0KCksaT1udWxsKX0sQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYSksQS5zaWduYWwmJihBLnNpZ25hbC5hYm9ydGVkP2EoKTpBLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYSkpKTtsZXQgRT1PQShmKTtpZihFJiZ3LnByb3RvY29scy5pbmRleE9mKEUpPT09LTEpe2UobmV3IGwoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrRSsiOiIsbC5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1pLnNlbmQoZ3x8bnVsbCl9KX07dmFyIFRBPXtodHRwOlFBLHhocjpMdH07Qy5mb3JFYWNoKFRBLChBLHQpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6dH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTp0fSl9fSk7dmFyIEp0PUE9PmAtICR7QX1gLEVlPUE9PkMuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxsQT17Z2V0QWRhcHRlcjpBPT57QT1DLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDp0fT1BLEksZSxnPXt9O2ZvcihsZXQgcj0wO3I8dDtyKyspe0k9QVtyXTtsZXQgbztpZihlPUksIUVlKEkpJiYoZT1UQVsobz1TdHJpbmcoSSkpLnRvTG93ZXJDYXNlKCldLGU9PT12b2lkIDApKXRocm93IG5ldyBsKGBVbmtub3duIGFkYXB0ZXIgXCcke299XCdgKTtpZihlKWJyZWFrO2dbb3x8IiUyMyIrcl09ZX1pZighZSl7bGV0IHI9T2JqZWN0LmVudHJpZXMoZykubWFwKChbbixhXSk9PmBhZGFwdGVyICR7bn0gYCsoYT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLG89dD9yLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtyLm1hcChKdCkuam9pbihgJTBBYCk6IiAiK0p0KHJbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IGwoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gZX0sYWRhcHRlcnM6VEF9O2Z1bmN0aW9uIFBBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBIKG51bGwsQSl9ZnVuY3Rpb24gREEoQSl7cmV0dXJuIFBBKEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFQuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gUEEoQSksZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZSksZS5oZWFkZXJzPW0uZnJvbShlLmhlYWRlcnMpLGV9LGZ1bmN0aW9uKGUpe3JldHVybiB2KGUpfHwoUEEoQSksZSYmZS5yZXNwb25zZSYmKGUucmVzcG9uc2UuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUucmVzcG9uc2UpLGUucmVzcG9uc2UuaGVhZGVycz1tLmZyb20oZS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KGUpfSl9dmFyIEh0PUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIGsoQSx0KXt0PXR8fHt9O2xldCBJPXt9O2Z1bmN0aW9uIGUoUSxCLGkpe3JldHVybiBDLmlzUGxhaW5PYmplY3QoUSkmJkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOml9LFEsQik6Qy5pc1BsYWluT2JqZWN0KEIpP0MubWVyZ2Uoe30sQik6Qy5pc0FycmF5KEIpP0Iuc2xpY2UoKTpCfWZ1bmN0aW9uIGcoUSxCLGkpe2lmKEMuaXNVbmRlZmluZWQoQikpe2lmKCFDLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRLGkpfWVsc2UgcmV0dXJuIGUoUSxCLGkpfWZ1bmN0aW9uIHIoUSxCKXtpZighQy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbyhRLEIpe2lmKEMuaXNVbmRlZmluZWQoQikpe2lmKCFDLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRKX1lbHNlIHJldHVybiBlKHZvaWQgMCxCKX1mdW5jdGlvbiBuKFEsQixpKXtpZihpIGluIHQpcmV0dXJuIGUoUSxCKTtpZihpIGluIEEpcmV0dXJuIGUodm9pZCAwLFEpfWxldCBhPXt1cmw6cixtZXRob2Q6cixkYXRhOnIsYmFzZVVSTDpvLHRyYW5zZm9ybVJlcXVlc3Q6byx0cmFuc2Zvcm1SZXNwb25zZTpvLHBhcmFtc1NlcmlhbGl6ZXI6byx0aW1lb3V0Om8sdGltZW91dE1lc3NhZ2U6byx3aXRoQ3JlZGVudGlhbHM6byx3aXRoWFNSRlRva2VuOm8sYWRhcHRlcjpvLHJlc3BvbnNlVHlwZTpvLHhzcmZDb29raWVOYW1lOm8seHNyZkhlYWRlck5hbWU6byxvblVwbG9hZFByb2dyZXNzOm8sb25Eb3dubG9hZFByb2dyZXNzOm8sZGVjb21wcmVzczpvLG1heENvbnRlbnRMZW5ndGg6byxtYXhCb2R5TGVuZ3RoOm8sYmVmb3JlUmVkaXJlY3Q6byx0cmFuc3BvcnQ6byxodHRwQWdlbnQ6byxodHRwc0FnZW50Om8sY2FuY2VsVG9rZW46byxzb2NrZXRQYXRoOm8scmVzcG9uc2VFbmNvZGluZzpvLHZhbGlkYXRlU3RhdHVzOm4saGVhZGVyczooUSxCKT0+ZyhIdChRKSxIdChCKSwhMCl9O3JldHVybiBDLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLHQpKSxmdW5jdGlvbihCKXtsZXQgaT1hW0JdfHxnLGY9aShBW0JdLHRbQl0sQik7Qy5pc1VuZGVmaW5lZChmKSYmaSE9PW58fChJW0JdPWYpfSksSX12YXIgdUE9IjEuNi44Ijt2YXIgeEE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLHQpPT57eEFbQV09ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT09QXx8ImEiKyh0PDE/Im4gIjoiICIpK0F9fSk7dmFyIFl0PXt9O3hBLnRyYW5zaXRpb25hbD1mdW5jdGlvbih0LEksZSl7ZnVuY3Rpb24gZyhyLG8pe3JldHVybiJbQXhpb3MgdiIrdUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrcisiXCciK28rKGU/Ii4gIitlOiIiKX1yZXR1cm4ocixvLG4pPT57aWYodD09PSExKXRocm93IG5ldyBsKGcobywiIGhhcyBiZWVuIHJlbW92ZWQiKyhJPyIgaW4gIitJOiIiKSksbC5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIEkmJiFZdFtvXSYmKFl0W29dPSEwLGNvbnNvbGUud2FybihnKG8sIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK0krIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksdD90KHIsbyxuKTohMH19O2Z1bmN0aW9uIGFlKEEsdCxJKXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IGwoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBlPU9iamVjdC5rZXlzKEEpLGc9ZS5sZW5ndGg7Zm9yKDtnLS0gPjA7KXtsZXQgcj1lW2ddLG89dFtyXTtpZihvKXtsZXQgbj1BW3JdLGE9bj09PXZvaWQgMHx8byhuLHIsQSk7aWYoYSE9PSEwKXRocm93IG5ldyBsKCJvcHRpb24gIityKyIgbXVzdCBiZSAiK2EsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYoSSE9PSEwKXRocm93IG5ldyBsKCJVbmtub3duIG9wdGlvbiAiK3IsbC5FUlJfQkFEX09QVElPTil9fXZhciBoQT17YXNzZXJ0T3B0aW9uczphZSx2YWxpZGF0b3JzOnhBfTt2YXIgWT1oQS52YWxpZGF0b3JzLHg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBMQSxyZXNwb25zZTpuZXcgTEF9fWFzeW5jIHJlcXVlc3QodCxJKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxJKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBnO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGc9e30pOmc9bmV3IEVycm9yO2xldCByPWcuc3RhY2s/Zy5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjtlLnN0YWNrP3ImJiFTdHJpbmcoZS5zdGFjaykuZW5kc1dpdGgoci5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKGUuc3RhY2srPWAlMEFgK3IpOmUuc3RhY2s9cn10aHJvdyBlfX1fcmVxdWVzdCh0LEkpe3R5cGVvZiB0PT0ic3RyaW5nIj8oST1JfHx7fSxJLnVybD10KTpJPXR8fHt9LEk9ayh0aGlzLmRlZmF1bHRzLEkpO2xldHt0cmFuc2l0aW9uYWw6ZSxwYXJhbXNTZXJpYWxpemVyOmcsaGVhZGVyczpyfT1JO2UhPT12b2lkIDAmJmhBLmFzc2VydE9wdGlvbnMoZSx7c2lsZW50SlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKX0sITEpLGchPW51bGwmJihDLmlzRnVuY3Rpb24oZyk/SS5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6Z306aEEuYXNzZXJ0T3B0aW9ucyhnLHtlbmNvZGU6WS5mdW5jdGlvbixzZXJpYWxpemU6WS5mdW5jdGlvbn0sITApKSxJLm1ldGhvZD0oSS5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1yJiZDLm1lcmdlKHIuY29tbW9uLHJbSS5tZXRob2RdKTtyJiZDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSByW0VdfSksSS5oZWFkZXJzPW0uY29uY2F0KG8scik7bGV0IG49W10sYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKEkpPT09ITF8fChhPWEmJmMuc3luY2hyb25vdXMsbi51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBRPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7US5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IEIsaT0wLGY7aWYoIWEpe2xldCBFPVtEQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLG4pLEUucHVzaC5hcHBseShFLFEpLGY9RS5sZW5ndGgsQj1Qcm9taXNlLnJlc29sdmUoSSk7aTxmOylCPUIudGhlbihFW2krK10sRVtpKytdKTtyZXR1cm4gQn1mPW4ubGVuZ3RoO2xldCBzPUk7Zm9yKGk9MDtpPGY7KXtsZXQgRT1uW2krK10sYz1uW2krK107dHJ5e3M9RShzKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e0I9REEuY2FsbCh0aGlzLHMpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3IoaT0wLGY9US5sZW5ndGg7aTxmOylCPUIudGhlbihRW2krK10sUVtpKytdKTtyZXR1cm4gQn1nZXRVcmkodCl7dD1rKHRoaXMuZGVmYXVsdHMsdCk7bGV0IEk9JCh0LmJhc2VVUkwsdC51cmwpO3JldHVybiBYKEksdC5wYXJhbXMsdC5wYXJhbXNTZXJpYWxpemVyKX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24odCl7eC5wcm90b3R5cGVbdF09ZnVuY3Rpb24oSSxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsoZXx8e30se21ldGhvZDp0LHVybDpJLGRhdGE6KGV8fHt9KS5kYXRhfSkpfX0pO0MuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIEkoZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbyxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsobnx8e30se21ldGhvZDp0LGhlYWRlcnM6ZT97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6cixkYXRhOm99KSl9fXgucHJvdG90eXBlW3RdPUkoKSx4LnByb3RvdHlwZVt0KyJGb3JtIl09SSghMCl9KTt2YXIgQUE9eDt2YXIgakE9Y2xhc3MgQXtjb25zdHJ1Y3Rvcih0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IEk7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe0k9cn0pO2xldCBlPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZz0+e2lmKCFlLl9saXN0ZW5lcnMpcmV0dXJuO2xldCByPWUuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtyLS0gPjA7KWUuX2xpc3RlbmVyc1tyXShnKTtlLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPWc9PntsZXQgcixvPW5ldyBQcm9taXNlKG49PntlLnN1YnNjcmliZShuKSxyPW59KS50aGVuKGcpO3JldHVybiBvLmNhbmNlbD1mdW5jdGlvbigpe2UudW5zdWJzY3JpYmUocil9LG99LHQoZnVuY3Rpb24ocixvLG4pe2UucmVhc29ufHwoZS5yZWFzb249bmV3IEgocixvLG4pLEkoZS5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUodCl7aWYodGhpcy5yZWFzb24pe3QodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2godCk6dGhpcy5fbGlzdGVuZXJzPVt0XX11bnN1YnNjcmliZSh0KXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgST10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZih0KTtJIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoSSwxKX1zdGF0aWMgc291cmNlKCl7bGV0IHQ7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKGcpe3Q9Z30pLGNhbmNlbDp0fX19LGJ0PWpBO2Z1bmN0aW9uIFdBKEEpe3JldHVybiBmdW5jdGlvbihJKXtyZXR1cm4gQS5hcHBseShudWxsLEkpfX1mdW5jdGlvbiBaQShBKXtyZXR1cm4gQy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgVkE9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKFZBKS5mb3JFYWNoKChbQSx0XSk9PntWQVt0XT1BfSk7dmFyIE10PVZBO2Z1bmN0aW9uIHF0KEEpe2xldCB0PW5ldyBBQShBKSxJPVcoQUEucHJvdG90eXBlLnJlcXVlc3QsdCk7cmV0dXJuIEMuZXh0ZW5kKEksQUEucHJvdG90eXBlLHQse2FsbE93bktleXM6ITB9KSxDLmV4dGVuZChJLHQsbnVsbCx7YWxsT3duS2V5czohMH0pLEkuY3JlYXRlPWZ1bmN0aW9uKGcpe3JldHVybiBxdChrKEEsZykpfSxJfXZhciBoPXF0KFQpO2guQXhpb3M9QUE7aC5DYW5jZWxlZEVycm9yPUg7aC5DYW5jZWxUb2tlbj1idDtoLmlzQ2FuY2VsPXY7aC5WRVJTSU9OPXVBO2gudG9Gb3JtRGF0YT1KO2guQXhpb3NFcnJvcj1sO2guQ2FuY2VsPWguQ2FuY2VsZWRFcnJvcjtoLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodCl9O2guc3ByZWFkPVdBO2guaXNBeGlvc0Vycm9yPVpBO2gubWVyZ2VDb25maWc9aztoLkF4aW9zSGVhZGVycz1tO2guZm9ybVRvSlNPTj1BPT5jQShDLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2guZ2V0QWRhcHRlcj1sQS5nZXRBZGFwdGVyO2guSHR0cFN0YXR1c0NvZGU9TXQ7aC5kZWZhdWx0PWg7dmFyIGRBPWg7dmFye0F4aW9zOmlvLEF4aW9zRXJyb3I6Q28sQ2FuY2VsZWRFcnJvcjpCbyxpc0NhbmNlbDpubyxDYW5jZWxUb2tlbjpzbyxWRVJTSU9OOlFvLGFsbDpFbyxDYW5jZWw6YW8saXNBeGlvc0Vycm9yOmNvLHNwcmVhZDpmbyx0b0Zvcm1EYXRhOmxvLEF4aW9zSGVhZGVyczpEbyxIdHRwU3RhdHVzQ29kZTp1byxmb3JtVG9KU09OOmhvLGdldEFkYXB0ZXI6eW8sbWVyZ2VDb25maWc6d299PWRBO3ZhciB0QSxMLHpBLFhBPXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7ekE9bmV3IFVpbnQ4QXJyYXkoTC5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LHlBPWNsYXNze2luaXQoKXtyZXR1cm4gdEF8fCh0eXBlb2YgZmV0Y2g8InUiP3RBPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrS3QpLnRoZW4odD0+dC5hcnJheUJ1ZmZlcigpKS50aGVuKHQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsWEEpKS50aGVuKHRoaXMuX2luaXQpOnRBPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKEt0LCJiYXNlNjQiKSxYQSkudGhlbih0aGlzLl9pbml0KSx0QSl9X2luaXQodCl7TD10Lmluc3RhbmNlLFhBLmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZSh0LEk9MCl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IGU9dC5ieXRlTGVuZ3RoLGc9TC5leHBvcnRzLm1hbGxvYyhlKTt6QS5zZXQodCxnKSxJPUl8fE51bWJlcihMLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShnLGUpKTtsZXQgcj1MLmV4cG9ydHMubWFsbG9jKEkpLG89TC5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhyLEksZyxlKSxuPXpBLnNsaWNlKHIscitvKTtyZXR1cm4gTC5leHBvcnRzLmZyZWUoZyksTC5leHBvcnRzLmZyZWUociksbn19LEt0PSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIE90PW5ldyB5QSxUdD0hMTthc3luYyBmdW5jdGlvbiBjZShBLHQsSSl7bGV0IGU9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ZT1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ZT1BOmU9YCR7dH0vJHtBfWAsZS5lbmRzV2l0aCgiLmpzIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMykpLGUuZW5kc1dpdGgoIi53YXNtIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtNSkpO2xldCBnPWAke2V9Lndhc21gLHI9YXdhaXQgZEEuZ2V0KGAke2d9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczpJfSk7VHR8fChhd2FpdCBPdC5pbml0KCksVHQ9ITApO2xldCBuPU90LmRlY29kZShuZXcgVWludDhBcnJheShyLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtlfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om59KX12YXIgUHQ9Y2U7dmFyIHdBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gZmUoQSx0LEkpe2xldCBlPUEsZz1BLHI9bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoZT1uZXcgVVJMKEEuaHJlZiksZz1lLmhyZWYpLHdBLmhhcyhnKT9yPWF3YWl0IHdBLmdldChnKTood0Euc2V0KGcsUHQoZSx0LEkpKSxyPWF3YWl0IHdBLmdldChnKSkscn12YXIgeHQ9ZmU7dmFyIGxlPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sRD1sZTt2YXIgRGU9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxTPURlO3ZhciB1ZT17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0saj11ZTtmdW5jdGlvbiBoZShBLHQpe2xldCBJPW51bGw7c3dpdGNoKEEpe2Nhc2UgUy5VSW50ODp7ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFMuSW50ODp7ST1uZXcgSW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50MTY6e0k9bmV3IFVpbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQxNjp7ST1uZXcgSW50MTZBcnJheSh0KTticmVha31jYXNlIFMuVUludDMyOntJPW5ldyBVaW50MzJBcnJheSh0KTticmVha31jYXNlIFMuSW50MzI6e0k9bmV3IEludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/ST1uZXcgQmlnVWludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFMuSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/ST1uZXcgQmlnSW50NjRBcnJheSh0KTpJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDMyOntJPW5ldyBGbG9hdDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBqLkZsb2F0NjQ6e0k9bmV3IEZsb2F0NjRBcnJheSh0KTticmVha31jYXNlIm51bGwiOntJPW51bGw7YnJlYWt9Y2FzZSBudWxsOntJPW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gSX12YXIgRz1oZTt2YXIgWnQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsanQ9bmV3IFRleHRFbmNvZGVyLFd0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBkZShBLHQpe2xldCBJPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LGU9QS5mc19vcGVuKHQsSS5mbGFncykscj1BLmZzX3N0YXQodCkuc2l6ZSxvPW51bGw7WnQ/bz1uZXcgU2hhcmVkQXJyYXlCdWZmZXIocik6bz1uZXcgQXJyYXlCdWZmZXIocik7bGV0IG49bmV3IFVpbnQ4QXJyYXkobyk7cmV0dXJuIEEuZnNfcmVhZChlLG4sMCxyLDApLEEuZnNfY2xvc2UoZSksbn1mdW5jdGlvbiBWdChBLHQsSSl7bGV0IGU9bnVsbDtadD9lPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihJKTplPW5ldyBBcnJheUJ1ZmZlcihJKTtsZXQgZz1uZXcgVWludDhBcnJheShlKSxyPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcix0LEkpO3JldHVybiBnLnNldChyKSxnfWZ1bmN0aW9uIGQoQSx0LEksZSl7bGV0IGc9MDtyZXR1cm4gdCE9PW51bGwmJihnPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksZSx0LmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxnKSksZ31mdW5jdGlvbiBNKEEsdCxJKXtsZXQgZT1KU09OLnN0cmluZ2lmeSh0KSxnPUEubGVuZ3RoQnl0ZXNVVEY4KGUpKzEscj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksZ10pO0Euc3RyaW5nVG9VVEY4KGUscixnKX1mdW5jdGlvbiBwKEEsdCxJLGUpe2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxJXSksbz1WdChBLGcscik7cmV0dXJuIEcoZSxvLmJ1ZmZlcil9ZnVuY3Rpb24gbUEoQSx0KXtsZXQgST1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLHRdKSxlPUEuVVRGOFRvU3RyaW5nKEkpO3JldHVybiBKU09OLnBhcnNlKGUpfWZ1bmN0aW9uIHllKEEsdCxJLGUpe2UhPW51bGwmJmUubGVuZ3RoPjAmJmUuZm9yRWFjaChmdW5jdGlvbihRLEIpe3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgaT1qdC5lbmNvZGUoUS5kYXRhLmRhdGEpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgaT1qdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoUS5kYXRhKSksZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgaT1RLmRhdGEuZGF0YSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5kYXRhLEIsMCkscz1kKEEsaS5kaXJlY3Rpb24sQiwxKSxFPXR5cGVvZiBpLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGkubWV0YWRhdGEuZW50cmllcygpKTpbXSxjPXtpbWFnZVR5cGU6aS5pbWFnZVR5cGUsbmFtZTppLm5hbWUsb3JpZ2luOmkub3JpZ2luLHNwYWNpbmc6aS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxzaXplOmkuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOkV9O00oQSxjLEIpO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLmNlbGxzLEIsMSksRT1kKEEsaS5wb2ludERhdGEsQiwyKSxjPWQoQSxpLmNlbGxEYXRhLEIsMyksdT17bWVzaFR5cGU6aS5tZXNoVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOmkubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxjZWxsQnVmZmVyU2l6ZTppLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZkNlbGxQaXhlbHM6aS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O00oQSx1LEIpO2JyZWFrfWNhc2UgRC5Qb2ludFNldDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5wb2ludERhdGEsQiwxKSxFPXtwb2ludFNldFR5cGU6aS5wb2ludFNldFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gfTtNKEEsRSxCKTticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkudmVydGljZXMsQiwxKSxFPWQoQSxpLmxpbmVzLEIsMiksYz1kKEEsaS5wb2x5Z29ucyxCLDMpLHU9ZChBLGkudHJpYW5nbGVTdHJpcHMsQiw0KSx5PWQoQSxpLnBvaW50RGF0YSxCLDUpLFI9ZChBLGkucG9pbnREYXRhLEIsNiksTj17cG9seURhdGFUeXBlOmkucG9seURhdGFUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTppLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxsaW5lc0J1ZmZlclNpemU6aS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOmkucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTppLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5fWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtNKEEsTixCKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgZz1BLnN0YWNrU2F2ZSgpLHI9MDt0cnl7cj1BLmNhbGxNYWluKHQuc2xpY2UoKSl9Y2F0Y2goUSl7dGhyb3cgdHlwZW9mIFE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoUSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksUX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKGcpfWxldCBvPUEuZ2V0TW9kdWxlU3Rkb3V0KCksbj1BLmdldE1vZHVsZVN0ZGVycigpLGE9W107cmV0dXJuIEkhPW51bGwmJkkubGVuZ3RoPjAmJnI9PT0wJiZJLmZvckVhY2goZnVuY3Rpb24oUSxCKXtsZXQgaT1udWxsO3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHMsRSk7aT17ZGF0YTpXdC5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9SlNPTi5wYXJzZShXdC5kZWNvZGUoYykpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSk7aT17ZGF0YTpWdChBLHMsRSl9O2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7aT17cGF0aDpRLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoUS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7aT17cGF0aDpRLmRhdGEucGF0aCxkYXRhOmRlKEEsUS5kYXRhLnBhdGgpfTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBzPW1BKEEsQik7cy5kYXRhPXAoQSxCLDAscy5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSkscy5kaXJlY3Rpb249cChBLEIsMSxqLkZsb2F0NjQpLHMubWV0YWRhdGE9bmV3IE1hcChzLm1ldGFkYXRhKSxpPXM7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAscy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOnMucG9pbnRzPUcocy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbHM+MD9zLmNlbGxzPXAoQSxCLDEscy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6cy5jZWxscz1HKHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwyLHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/cy5jZWxsRGF0YT1wKEEsQiwzLHMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6cy5jZWxsRGF0YT1HKHMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAscy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDEscy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLGouRmxvYXQzMik6cy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxzLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP3MudmVydGljZXM9cChBLEIsMSxTLlVJbnQzMik6cy52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXkscy5saW5lc0J1ZmZlclNpemU+MD9zLmxpbmVzPXAoQSxCLDIsUy5VSW50MzIpOnMubGluZXM9bmV3IFVpbnQzMkFycmF5LHMucG9seWdvbnNCdWZmZXJTaXplPjA/cy5wb2x5Z29ucz1wKEEsQiwzLFMuVUludDMyKTpzLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP3MudHJpYW5nbGVTdHJpcHM9cChBLEIsNCxTLlVJbnQzMik6cy50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsNSxzLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/cy5jZWxsRGF0YT1wKEEsQiw2LHMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6US50eXBlLGRhdGE6aX07YS5wdXNoKGYpfSkse3JldHVyblZhbHVlOnIsc3Rkb3V0Om8sc3RkZXJyOm4sb3V0cHV0czphfX12YXIgWHQ9eWU7dmFyIHdlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBtZShBLHQpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IEk9W107Zm9yKGxldCBlPTA7ZTxBLmxlbmd0aDtlKyspe2xldCBnPXBlKEFbZV0sdCk7ZyE9PW51bGwmJkkucHVzaChnKX1yZXR1cm4gSX1mdW5jdGlvbiBwZShBLHQpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IEk9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/ST1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihJPUEpLHdlJiZJIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDp0P0k6SS5zbGljZSgwKX12YXIgenQ9bWU7ZnVuY3Rpb24gU2UoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIF90PVNlO2Z1bmN0aW9uIEZlKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciB2dD1GZTtmdW5jdGlvbiBSZShBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgJHQ9UmU7YXN5bmMgZnVuY3Rpb24gTmUoQSx0LEksZSl7bGV0IGc9WHQoQSx0LEksZSkscj1bXTtyZXR1cm4gZy5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24obyl7aWYoby50eXBlPT09RC5CaW5hcnlTdHJlYW18fG8udHlwZT09PUQuQmluYXJ5RmlsZSl7bGV0IG49by5kYXRhO3IucHVzaChuKX1lbHNlIGlmKG8udHlwZT09PUQuSW1hZ2Upe2xldCBuPW8uZGF0YTtyLnB1c2goLi4uX3QobikpfWVsc2UgaWYoby50eXBlPT09RC5NZXNoKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLnZ0KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuUG9seURhdGEpe2xldCBuPW8uZGF0YTtyLnB1c2goLi4uJHQobikpfX0pLEZBKGcsenQociwhMCkpfXZhciBBST1OZTt2YXIgVWU9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsdCxJLGUsZyxyKXtsZXQgbz1hd2FpdCB4dChBLHQscik7cmV0dXJuIGF3YWl0IEFJKG8sSSxlLGcpfX07aUEoVWUpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7X3QoenQpO2V4cG9ydHtEZSBhcyBieXVSZWFkTWVzaCxTZSBhcyBieXVXcml0ZU1lc2gsSiBhcyBleHRlbnNpb25Ub01lc2hJbyxIIGFzIGV4dGVuc2lvblRvUG9pbnRTZXRJbyxiZSBhcyBmcmVlU3VyZmVyQXNjaWlSZWFkTWVzaCxrZSBhcyBmcmVlU3VyZmVyQXNjaWlXcml0ZU1lc2gsUmUgYXMgZnJlZVN1cmZlckJpbmFyeVJlYWRNZXNoLEZlIGFzIGZyZWVTdXJmZXJCaW5hcnlXcml0ZU1lc2gseSBhcyBnZXREZWZhdWx0V2ViV29ya2VyLEUgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsUSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLHVlIGFzIG9ialJlYWRNZXNoLFVlIGFzIG9ialJlYWRQb2ludFNldCxmZSBhcyBvYmpXcml0ZU1lc2gsTmUgYXMgb2JqV3JpdGVQb2ludFNldCxDZSBhcyBvZmZSZWFkTWVzaCxPZSBhcyBvZmZSZWFkUG9pbnRTZXQsbWUgYXMgb2ZmV3JpdGVNZXNoLE1lIGFzIG9mZldyaXRlUG9pbnRTZXQsbm8gYXMgcmVhZE1lc2gsaG8gYXMgcmVhZFBvaW50U2V0LHhJIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsX3QgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsRkkgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCxCZSBhcyBzdGxSZWFkTWVzaCxjZSBhcyBzdGxXcml0ZU1lc2gsaGUgYXMgc3djUmVhZE1lc2gsd2UgYXMgc3djV3JpdGVNZXNoLGdlIGFzIHZ0a1BvbHlEYXRhUmVhZE1lc2gsUGUgYXMgdnRrUG9seURhdGFSZWFkUG9pbnRTZXQscGUgYXMgdnRrUG9seURhdGFXcml0ZU1lc2gsV2UgYXMgdnRrUG9seURhdGFXcml0ZVBvaW50U2V0LEVlIGFzIHdhc21SZWFkTWVzaCx4ZSBhcyB3YXNtUmVhZFBvaW50U2V0LGRlIGFzIHdhc21Xcml0ZU1lc2gsVGUgYXMgd2FzbVdyaXRlUG9pbnRTZXQsUWUgYXMgd2FzbVpzdGRSZWFkTWVzaCxHZSBhcyB3YXNtWnN0ZFJlYWRQb2ludFNldCx5ZSBhcyB3YXNtWnN0ZFdyaXRlTWVzaCxMZSBhcyB3YXNtWnN0ZFdyaXRlUG9pbnRTZXQsc28gYXMgd3JpdGVNZXNoLERvIGFzIHdyaXRlUG9pbnRTZXR9OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" +default_js_module = """data:text/javascript;base64,dmFyIFh0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgJHQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlYdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEFyPW5ldyBNYXAoW1sidnRrIiwidnRrIl0sWyJieXUiLCJieXUiXSxbImZzYSIsImZyZWUtc3VyZmVyLWFzY2lpIl0sWyJmc2IiLCJmcmVlLXN1cmZlci1iaW5hcnkiXSxbIm9iaiIsIm9iaiJdLFsib2ZmIiwib2ZmIl0sWyJzdGwiLCJzdGwiXSxbInN3YyIsInN3YyJdLFsiaXdtIiwid2FzbSJdLFsiaXdtLmNib3IiLCJ3YXNtIl0sWyJpd20uY2Jvci56c3QiLCJ3YXNtLXpzdGQiXV0pLEo9QXI7dmFyIGVyPW5ldyBNYXAoW1sidnRrIiwidnRrIl0sWyJvYmoiLCJvYmoiXSxbIm9mZiIsIm9mZiJdLFsiaXdtIiwid2FzbSJdLFsiaXdtLmNib3IiLCJ3YXNtIl0sWyJpd20uY2Jvci56c3QiLCJ3YXNtLXpzdGQiXV0pLEg9ZXI7dmFyIHRyPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sRj10cjt2YXIgcnI9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LEs9cnI7ZnVuY3Rpb24gaXIoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIEYuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBGLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIEYuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIEYuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBGLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBGLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgRi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBGLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIEsuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgSy5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIE49aXI7ZnVuY3Rpb24gb3IoQSl7bGV0IGU9QS5zbGljZSgoQS5sYXN0SW5kZXhPZigiLiIpLTE+Pj4wKSsyKTtpZihlLnRvTG93ZXJDYXNlKCk9PT0iZ3oiKXtsZXQgdD1BLnNsaWNlKDAsLTMpLmxhc3RJbmRleE9mKCIuIik7ZT1BLnNsaWNlKCh0LTE+Pj4wKSsyKX1lbHNlIGlmKGUudG9Mb3dlckNhc2UoKT09PSJjYm9yIil7bGV0IHQ9QS5zbGljZSgwLC01KS5sYXN0SW5kZXhPZigiLiIpO2U9QS5zbGljZSgodC0xPj4+MCkrMil9ZWxzZSBpZihlLnRvTG93ZXJDYXNlKCk9PT0ienN0Iil7bGV0IHQ9QS5zbGljZSgwLC0xMCkubGFzdEluZGV4T2YoIi4iKTtlPUEuc2xpY2UoKHQtMT4+PjApKzIpfWVsc2UgaWYoZS50b0xvd2VyQ2FzZSgpPT09InppcCIpe2xldCB0PUEuc2xpY2UoMCwtNCkubGFzdEluZGV4T2YoIi4iKTtlPUEuc2xpY2UoKHQtMT4+PjApKzIpfXJldHVybiBlfXZhciBNPW9yO3ZhciBucj17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LHU9bnI7dmFyIEhlPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGFyPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLFRBPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxNQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksQkE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLFllPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLHNyPXtjYW5IYW5kbGU6QT0+WWUoQSkmJkFbSGVdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6ZSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIEtlKEEsZSksW3QsW3RdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxHQShBKX19LElyPXtjYW5IYW5kbGU6QT0+WWUoQSkmJkJBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IGU7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9lPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ZT17aXNFcnJvcjohMSx2YWx1ZTpBfSxbZSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxxZT1uZXcgTWFwKFtbInByb3h5Iixzcl0sWyJ0aHJvdyIsSXJdXSk7ZnVuY3Rpb24gbHIoQSxlKXtmb3IobGV0IHQgb2YgQSlpZihlPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEtlKEEsZT1nbG9iYWxUaGlzLHQ9WyIqIl0pe2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaShvKXtpZighb3x8IW8uZGF0YSlyZXR1cm47aWYoIWxyKHQsby5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke28ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOnIsdHlwZTphLHBhdGg6Z309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sby5kYXRhKSxjPShvLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKFkpLHA7dHJ5e2xldCBuPWcuc2xpY2UoMCwtMSkucmVkdWNlKChCLEkpPT5CW0ldLEEpLHM9Zy5yZWR1Y2UoKEIsSSk9PkJbSV0sQSk7c3dpdGNoKGEpe2Nhc2UiR0VUIjpwPXM7YnJlYWs7Y2FzZSJTRVQiOm5bZy5zbGljZSgtMSlbMF1dPVkoby5kYXRhLnZhbHVlKSxwPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOnA9cy5hcHBseShuLGMpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IEI9bmV3IHMoLi4uYyk7cD1CcihCKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOkIscG9ydDI6SX09bmV3IE1lc3NhZ2VDaGFubmVsO0tlKEEsSSkscD1MQShCLFtCXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpwPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2gobil7cD17dmFsdWU6bixbQkFdOjB9fVByb21pc2UucmVzb2x2ZShwKS5jYXRjaChuPT4oe3ZhbHVlOm4sW0JBXTowfSkpLnRoZW4obj0+e2xldFtzLEJdPW1BKG4pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDpyfSksQiksYT09PSJSRUxFQVNFIiYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsaSksamUoZSksTUEgaW4gQSYmdHlwZW9mIEFbTUFdPT0iZnVuY3Rpb24iJiZBW01BXSgpKX0pLmNhdGNoKG49PntsZXRbcyxCXT1tQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW0JBXTowfSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOnJ9KSxCKX0pfSksZS5zdGFydCYmZS5zdGFydCgpfWZ1bmN0aW9uIGdyKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIGplKEEpe2dyKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gR0EoQSxlKXtyZXR1cm4geEEoQSxbXSxlKX1mdW5jdGlvbiBmQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gdmUoQSl7cmV0dXJuIGooQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57amUoQSl9KX12YXIgY0E9bmV3IFdlYWtNYXAsQ0E9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IGU9KGNBLmdldChBKXx8MCktMTtjQS5zZXQoQSxlKSxlPT09MCYmdmUoQSl9KTtmdW5jdGlvbiBwcihBLGUpe2xldCB0PShjQS5nZXQoZSl8fDApKzE7Y0Euc2V0KGUsdCksQ0EmJkNBLnJlZ2lzdGVyKEEsZSxBKX1mdW5jdGlvbiB1cihBKXtDQSYmQ0EudW5yZWdpc3RlcihBKX1mdW5jdGlvbiB4QShBLGU9W10sdD1mdW5jdGlvbigpe30pe2xldCBpPSExLG89bmV3IFByb3h5KHQse2dldChyLGEpe2lmKGZBKGkpLGE9PT1UQSlyZXR1cm4oKT0+e3VyKG8pLHZlKEEpLGk9ITB9O2lmKGE9PT0idGhlbiIpe2lmKGUubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+b307bGV0IGc9aihBLHt0eXBlOiJHRVQiLHBhdGg6ZS5tYXAoYz0+Yy50b1N0cmluZygpKX0pLnRoZW4oWSk7cmV0dXJuIGcudGhlbi5iaW5kKGcpfXJldHVybiB4QShBLFsuLi5lLGFdKX0sc2V0KHIsYSxnKXtmQShpKTtsZXRbYyxwXT1tQShnKTtyZXR1cm4gaihBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLmUsYV0ubWFwKG49Pm4udG9TdHJpbmcoKSksdmFsdWU6Y30scCkudGhlbihZKX0sYXBwbHkocixhLGcpe2ZBKGkpO2xldCBjPWVbZS5sZW5ndGgtMV07aWYoYz09PWFyKXJldHVybiBqKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oWSk7aWYoYz09PSJiaW5kIilyZXR1cm4geEEoQSxlLnNsaWNlKDAsLTEpKTtsZXRbcCxuXT1KZShnKTtyZXR1cm4gaihBLHt0eXBlOiJBUFBMWSIscGF0aDplLm1hcChzPT5zLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpwfSxuKS50aGVuKFkpfSxjb25zdHJ1Y3QocixhKXtmQShpKTtsZXRbZyxjXT1KZShhKTtyZXR1cm4gaihBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ZS5tYXAocD0+cC50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Z30sYykudGhlbihZKX19KTtyZXR1cm4gcHIobyxBKSxvfWZ1bmN0aW9uIGZyKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIEplKEEpe2xldCBlPUEubWFwKG1BKTtyZXR1cm5bZS5tYXAodD0+dFswXSksZnIoZS5tYXAodD0+dFsxXSkpXX12YXIgX2U9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTEEoQSxlKXtyZXR1cm4gX2Uuc2V0KEEsZSksQX1mdW5jdGlvbiBCcihBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbSGVdOiEwfSl9ZnVuY3Rpb24gbUEoQSl7Zm9yKGxldFtlLHRdb2YgcWUpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtpLG9dPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTplLHZhbHVlOml9LG9dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxfZS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBZKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHFlLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gaihBLGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKGk9PntsZXQgbz1jcigpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihhKXshYS5kYXRhfHwhYS5kYXRhLmlkfHxhLmRhdGEuaWQhPT1vfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxpKGEuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sZSksdCl9KX1mdW5jdGlvbiBjcigpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gaUEoQSxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseShlLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpDcn09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6WUF9PU9iamVjdCxkQT0oQT0+ZT0+e2xldCB0PUNyLmNhbGwoZSk7cmV0dXJuIEFbdF18fChBW3RdPXQuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxPPUE9PihBPUEudG9Mb3dlckNhc2UoKSxlPT5kQShlKT09PUEpLFFBPUE9PmU9PnR5cGVvZiBlPT09QSx7aXNBcnJheTp2fT1BcnJheSxvQT1RQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gbXIoQSl7cmV0dXJuIEEhPT1udWxsJiYhb0EoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhb0EoQS5jb25zdHJ1Y3RvcikmJlAoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIFhlPU8oIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gRXIoQSl7bGV0IGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhBKTplPUEmJkEuYnVmZmVyJiZYZShBLmJ1ZmZlciksZX12YXIgZHI9UUEoInN0cmluZyIpLFA9UUEoImZ1bmN0aW9uIiksJGU9UUEoIm51bWJlciIpLHlBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsUXI9QT0+QT09PSEwfHxBPT09ITEsRUE9QT0+e2lmKGRBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IGU9WUEoQSk7cmV0dXJuKGU9PT1udWxsfHxlPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0seXI9TygiRGF0ZSIpLGhyPU8oIkZpbGUiKSx3cj1PKCJCbG9iIiksRHI9TygiRmlsZUxpc3QiKSxTcj1BPT55QShBKSYmUChBLnBpcGUpLGJyPUE9PntsZXQgZTtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxQKEEuYXBwZW5kKSYmKChlPWRBKEEpKT09PSJmb3JtZGF0YSJ8fGU9PT0ib2JqZWN0IiYmUChBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxrcj1PKCJVUkxTZWFyY2hQYXJhbXMiKSxScj1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gbkEoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgaSxvO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSx2KEEpKWZvcihpPTAsbz1BLmxlbmd0aDtpPG87aSsrKWUuY2FsbChudWxsLEFbaV0saSxBKTtlbHNle2xldCByPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksYT1yLmxlbmd0aCxnO2ZvcihpPTA7aTxhO2krKylnPXJbaV0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBBdChBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLGk9dC5sZW5ndGgsbztmb3IoO2ktLSA+MDspaWYobz10W2ldLGU9PT1vLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG87cmV0dXJuIG51bGx9dmFyIGV0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsdHQ9QT0+IW9BKEEpJiZBIT09ZXQ7ZnVuY3Rpb24gSEEoKXtsZXR7Y2FzZWxlc3M6QX09dHQodGhpcykmJnRoaXN8fHt9LGU9e30sdD0oaSxvKT0+e2xldCByPUEmJkF0KGUsbyl8fG87RUEoZVtyXSkmJkVBKGkpP2Vbcl09SEEoZVtyXSxpKTpFQShpKT9lW3JdPUhBKHt9LGkpOnYoaSk/ZVtyXT1pLnNsaWNlKCk6ZVtyXT1pfTtmb3IobGV0IGk9MCxvPWFyZ3VtZW50cy5sZW5ndGg7aTxvO2krKylhcmd1bWVudHNbaV0mJm5BKGFyZ3VtZW50c1tpXSx0KTtyZXR1cm4gZX12YXIgRnI9KEEsZSx0LHthbGxPd25LZXlzOml9PXt9KT0+KG5BKGUsKG8scik9Pnt0JiZQKG8pP0Fbcl09aUEobyx0KTpBW3JdPW99LHthbGxPd25LZXlzOml9KSxBKSxQcj1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLFdyPShBLGUsdCxpKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUsaSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTplLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LFVyPShBLGUsdCxpKT0+e2xldCBvLHIsYSxnPXt9O2lmKGU9ZXx8e30sQT09bnVsbClyZXR1cm4gZTtkb3tmb3Iobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxyPW8ubGVuZ3RoO3ItLSA+MDspYT1vW3JdLCghaXx8aShhLEEsZSkpJiYhZ1thXSYmKGVbYV09QVthXSxnW2FdPSEwKTtBPXQhPT0hMSYmWUEoQSl9d2hpbGUoQSYmKCF0fHx0KEEsZSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGV9LE5yPShBLGUsdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1lLmxlbmd0aDtsZXQgaT1BLmluZGV4T2YoZSx0KTtyZXR1cm4gaSE9PS0xJiZpPT09dH0sT3I9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKHYoQSkpcmV0dXJuIEE7bGV0IGU9QS5sZW5ndGg7aWYoISRlKGUpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShlKTtmb3IoO2UtLSA+MDspdFtlXT1BW2VdO3JldHVybiB0fSxNcj0oQT0+ZT0+QSYmZSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmWUEoVWludDhBcnJheSkpLHhyPShBLGUpPT57bGV0IGk9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxvO2Zvcig7KG89aS5uZXh0KCkpJiYhby5kb25lOyl7bGV0IHI9by52YWx1ZTtlLmNhbGwoQSxyWzBdLHJbMV0pfX0sVHI9KEEsZSk9PntsZXQgdCxpPVtdO2Zvcig7KHQ9QS5leGVjKGUpKSE9PW51bGw7KWkucHVzaCh0KTtyZXR1cm4gaX0sR3I9TygiSFRNTEZvcm1FbGVtZW50IiksTHI9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxpLG8pe3JldHVybiBpLnRvVXBwZXJDYXNlKCkrb30pLHplPSgoe2hhc093blByb3BlcnR5OkF9KT0+KGUsdCk9PkEuY2FsbChlLHQpKShPYmplY3QucHJvdG90eXBlKSxKcj1PKCJSZWdFeHAiKSxydD0oQSxlKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLGk9e307bkEodCwobyxyKT0+e2xldCBhOyhhPWUobyxyLEEpKSE9PSExJiYoaVtyXT1hfHxvKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsaSl9LEhyPUE9PntydChBLChlLHQpPT57aWYoUChBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHQpIT09LTEpcmV0dXJuITE7bGV0IGk9QVt0XTtpZihQKGkpKXtpZihlLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIGUpe2Uud3JpdGFibGU9ITE7cmV0dXJufWUuc2V0fHwoZS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrdCsiJyIpfSl9fSl9LFlyPShBLGUpPT57bGV0IHQ9e30saT1vPT57by5mb3JFYWNoKHI9Pnt0W3JdPSEwfSl9O3JldHVybiB2KEEpP2koQSk6aShTdHJpbmcoQSkuc3BsaXQoZSkpLHR9LHFyPSgpPT57fSxLcj0oQSxlKT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6ZSksSkE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixaZT0iMDEyMzQ1Njc4OSIsaXQ9e0RJR0lUOlplLEFMUEhBOkpBLEFMUEhBX0RJR0lUOkpBK0pBLnRvVXBwZXJDYXNlKCkrWmV9LGpyPShBPTE2LGU9aXQuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDppfT1lO2Zvcig7QS0tOyl0Kz1lW01hdGgucmFuZG9tKCkqaXwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gdnIoQSl7cmV0dXJuISEoQSYmUChBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIF9yPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHQ9KGksbyk9PntpZih5QShpKSl7aWYoZS5pbmRleE9mKGkpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gaSkpe2Vbb109aTtsZXQgcj12KGkpP1tdOnt9O3JldHVybiBuQShpLChhLGcpPT57bGV0IGM9dChhLG8rMSk7IW9BKGMpJiYocltnXT1jKX0pLGVbb109dm9pZCAwLHJ9fXJldHVybiBpfTtyZXR1cm4gdChBLDApfSxWcj1PKCJBc3luY0Z1bmN0aW9uIiksenI9QT0+QSYmKHlBKEEpfHxQKEEpKSYmUChBLnRoZW4pJiZQKEEuY2F0Y2gpLGY9e2lzQXJyYXk6dixpc0FycmF5QnVmZmVyOlhlLGlzQnVmZmVyOm1yLGlzRm9ybURhdGE6YnIsaXNBcnJheUJ1ZmZlclZpZXc6RXIsaXNTdHJpbmc6ZHIsaXNOdW1iZXI6JGUsaXNCb29sZWFuOlFyLGlzT2JqZWN0OnlBLGlzUGxhaW5PYmplY3Q6RUEsaXNVbmRlZmluZWQ6b0EsaXNEYXRlOnlyLGlzRmlsZTpocixpc0Jsb2I6d3IsaXNSZWdFeHA6SnIsaXNGdW5jdGlvbjpQLGlzU3RyZWFtOlNyLGlzVVJMU2VhcmNoUGFyYW1zOmtyLGlzVHlwZWRBcnJheTpNcixpc0ZpbGVMaXN0OkRyLGZvckVhY2g6bkEsbWVyZ2U6SEEsZXh0ZW5kOkZyLHRyaW06UnIsc3RyaXBCT006UHIsaW5oZXJpdHM6V3IsdG9GbGF0T2JqZWN0OlVyLGtpbmRPZjpkQSxraW5kT2ZUZXN0Ok8sZW5kc1dpdGg6TnIsdG9BcnJheTpPcixmb3JFYWNoRW50cnk6eHIsbWF0Y2hBbGw6VHIsaXNIVE1MRm9ybTpHcixoYXNPd25Qcm9wZXJ0eTp6ZSxoYXNPd25Qcm9wOnplLHJlZHVjZURlc2NyaXB0b3JzOnJ0LGZyZWV6ZU1ldGhvZHM6SHIsdG9PYmplY3RTZXQ6WXIsdG9DYW1lbENhc2U6THIsbm9vcDpxcix0b0Zpbml0ZU51bWJlcjpLcixmaW5kS2V5OkF0LGdsb2JhbDpldCxpc0NvbnRleHREZWZpbmVkOnR0LEFMUEhBQkVUOml0LGdlbmVyYXRlU3RyaW5nOmpyLGlzU3BlY0NvbXBsaWFudEZvcm06dnIsdG9KU09OT2JqZWN0Ol9yLGlzQXN5bmNGbjpWcixpc1RoZW5hYmxlOnpyfTtmdW5jdGlvbiBfKEEsZSx0LGksbyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxpJiYodGhpcy5yZXF1ZXN0PWkpLG8mJih0aGlzLnJlc3BvbnNlPW8pfWYuaW5oZXJpdHMoXyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmYudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIG90PV8ucHJvdG90eXBlLG50PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e250W0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF8sbnQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtfLmZyb209KEEsZSx0LGksbyxyKT0+e2xldCBhPU9iamVjdC5jcmVhdGUob3QpO3JldHVybiBmLnRvRmxhdE9iamVjdChBLGEsZnVuY3Rpb24oYyl7cmV0dXJuIGMhPT1FcnJvci5wcm90b3R5cGV9LGc9PmchPT0iaXNBeGlvc0Vycm9yIiksXy5jYWxsKGEsQS5tZXNzYWdlLGUsdCxpLG8pLGEuY2F1c2U9QSxhLm5hbWU9QS5uYW1lLHImJk9iamVjdC5hc3NpZ24oYSxyKSxhfTt2YXIgaD1fO3ZhciBoQT1udWxsO2Z1bmN0aW9uIHFBKEEpe3JldHVybiBmLmlzUGxhaW5PYmplY3QoQSl8fGYuaXNBcnJheShBKX1mdW5jdGlvbiBzdChBKXtyZXR1cm4gZi5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBhdChBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG8scil7cmV0dXJuIG89c3QobyksIXQmJnI/IlsiK28rIl0iOm99KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIFpyKEEpe3JldHVybiBmLmlzQXJyYXkoQSkmJiFBLnNvbWUocUEpfXZhciBYcj1mLnRvRmxhdE9iamVjdChmLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gJHIoQSxlLHQpe2lmKCFmLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KGhBfHxGb3JtRGF0YSksdD1mLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oQyxtKXtyZXR1cm4hZi5pc1VuZGVmaW5lZChtW0NdKX0pO2xldCBpPXQubWV0YVRva2VucyxvPXQudmlzaXRvcnx8bixyPXQuZG90cyxhPXQuaW5kZXhlcyxjPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmYuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighZi5pc0Z1bmN0aW9uKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gcChsKXtpZihsPT09bnVsbClyZXR1cm4iIjtpZihmLmlzRGF0ZShsKSlyZXR1cm4gbC50b0lTT1N0cmluZygpO2lmKCFjJiZmLmlzQmxvYihsKSl0aHJvdyBuZXcgaCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gZi5pc0FycmF5QnVmZmVyKGwpfHxmLmlzVHlwZWRBcnJheShsKT9jJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbbF0pOkJ1ZmZlci5mcm9tKGwpOmx9ZnVuY3Rpb24gbihsLEMsbSl7bGV0IHc9bDtpZihsJiYhbSYmdHlwZW9mIGw9PSJvYmplY3QiKXtpZihmLmVuZHNXaXRoKEMsInt9IikpQz1pP0M6Qy5zbGljZSgwLC0yKSxsPUpTT04uc3RyaW5naWZ5KGwpO2Vsc2UgaWYoZi5pc0FycmF5KGwpJiZacihsKXx8KGYuaXNGaWxlTGlzdChsKXx8Zi5lbmRzV2l0aChDLCJbXSIpKSYmKHc9Zi50b0FycmF5KGwpKSlyZXR1cm4gQz1zdChDKSx3LmZvckVhY2goZnVuY3Rpb24oVSxadCl7IShmLmlzVW5kZWZpbmVkKFUpfHxVPT09bnVsbCkmJmUuYXBwZW5kKGE9PT0hMD9hdChbQ10sWnQscik6YT09PW51bGw/QzpDKyJbXSIscChVKSl9KSwhMX1yZXR1cm4gcUEobCk/ITA6KGUuYXBwZW5kKGF0KG0sQyxyKSxwKGwpKSwhMSl9bGV0IHM9W10sQj1PYmplY3QuYXNzaWduKFhyLHtkZWZhdWx0VmlzaXRvcjpuLGNvbnZlcnRWYWx1ZTpwLGlzVmlzaXRhYmxlOnFBfSk7ZnVuY3Rpb24gSShsLEMpe2lmKCFmLmlzVW5kZWZpbmVkKGwpKXtpZihzLmluZGV4T2YobCkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrQy5qb2luKCIuIikpO3MucHVzaChsKSxmLmZvckVhY2gobCxmdW5jdGlvbih3LFcpeyghKGYuaXNVbmRlZmluZWQodyl8fHc9PT1udWxsKSYmby5jYWxsKGUsdyxmLmlzU3RyaW5nKFcpP1cudHJpbSgpOlcsQyxCKSk9PT0hMCYmSSh3LEM/Qy5jb25jYXQoVyk6W1ddKX0pLHMucG9wKCl9fWlmKCFmLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gSShBKSxlfXZhciBUPSRyO2Z1bmN0aW9uIEl0KEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKGkpe3JldHVybiBlW2ldfSl9ZnVuY3Rpb24gbHQoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZUKEEsdGhpcyxlKX12YXIgZ3Q9bHQucHJvdG90eXBlO2d0LmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtndC50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKGkpe3JldHVybiBlLmNhbGwodGhpcyxpLEl0KX06SXQ7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gdChvWzBdKSsiPSIrdChvWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHdBPWx0O2Z1bmN0aW9uIEFpKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIGFBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgaT10JiZ0LmVuY29kZXx8QWksbz10JiZ0LnNlcmlhbGl6ZSxyO2lmKG8/cj1vKGUsdCk6cj1mLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgd0EoZSx0KS50b1N0cmluZyhpKSxyKXtsZXQgYT1BLmluZGV4T2YoIiMiKTthIT09LTEmJihBPUEuc2xpY2UoMCxhKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrcn1yZXR1cm4gQX12YXIgS0E9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQsaSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czppP2kuc3luY2hyb25vdXM6ITEscnVuV2hlbjppP2kucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe2YuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKGkpe2khPT1udWxsJiZlKGkpfSl9fSxqQT1LQTt2YXIgREE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBwdD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6d0E7dmFyIHV0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgZnQ9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgQnQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6cHQsRm9ybURhdGE6dXQsQmxvYjpmdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciB2QT17fTskdCh2QSx7aGFzQnJvd3NlckVudjooKT0+Y3QsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5laSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PnRpfSk7dmFyIGN0PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLGVpPShBPT5jdCYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLHRpPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgYj17Li4udkEsLi4uQnR9O2Z1bmN0aW9uIF9BKEEsZSl7cmV0dXJuIFQoQSxuZXcgYi5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQsaSxvLHIpe3JldHVybiBiLmlzTm9kZSYmZi5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQoaSx0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOnIuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZSkpfWZ1bmN0aW9uIHJpKEEpe3JldHVybiBmLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxBKS5tYXAoZT0+ZVswXT09PSJbXSI/IiI6ZVsxXXx8ZVswXSl9ZnVuY3Rpb24gaWkoQSl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhBKSxpLG89dC5sZW5ndGgscjtmb3IoaT0wO2k8bztpKyspcj10W2ldLGVbcl09QVtyXTtyZXR1cm4gZX1mdW5jdGlvbiBvaShBKXtmdW5jdGlvbiBlKHQsaSxvLHIpe2xldCBhPXRbcisrXTtpZihhPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IGc9TnVtYmVyLmlzRmluaXRlKCthKSxjPXI+PXQubGVuZ3RoO3JldHVybiBhPSFhJiZmLmlzQXJyYXkobyk/by5sZW5ndGg6YSxjPyhmLmhhc093blByb3AobyxhKT9vW2FdPVtvW2FdLGldOm9bYV09aSwhZyk6KCghb1thXXx8IWYuaXNPYmplY3Qob1thXSkpJiYob1thXT1bXSksZSh0LGksb1thXSxyKSYmZi5pc0FycmF5KG9bYV0pJiYob1thXT1paShvW2FdKSksIWcpfWlmKGYuaXNGb3JtRGF0YShBKSYmZi5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBmLmZvckVhY2hFbnRyeShBLChpLG8pPT57ZShyaShpKSxvLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBTQT1vaTtmdW5jdGlvbiBuaShBLGUsdCl7aWYoZi5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKEEpLGYudHJpbShBKX1jYXRjaChpKXtpZihpLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IGl9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgVkE9e3RyYW5zaXRpb25hbDpEQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7bGV0IGk9dC5nZXRDb250ZW50VHlwZSgpfHwiIixvPWkuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLHI9Zi5pc09iamVjdChlKTtpZihyJiZmLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSksZi5pc0Zvcm1EYXRhKGUpKXJldHVybiBvP0pTT04uc3RyaW5naWZ5KFNBKGUpKTplO2lmKGYuaXNBcnJheUJ1ZmZlcihlKXx8Zi5pc0J1ZmZlcihlKXx8Zi5pc1N0cmVhbShlKXx8Zi5pc0ZpbGUoZSl8fGYuaXNCbG9iKGUpKXJldHVybiBlO2lmKGYuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKGYuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKHIpe2lmKGkuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIF9BKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1mLmlzRmlsZUxpc3QoZSkpfHxpLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGM9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBUKGc/eyJmaWxlc1tdIjplfTplLGMmJm5ldyBjLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gcnx8bz8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLG5pKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxWQS50cmFuc2l0aW9uYWwsaT10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG89dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoZSYmZi5pc1N0cmluZyhlKSYmKGkmJiF0aGlzLnJlc3BvbnNlVHlwZXx8bykpe2xldCBhPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm87dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKGEpdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9oLmZyb20oZyxoLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpiLmNsYXNzZXMuRm9ybURhdGEsQmxvYjpiLmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtmLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e1ZBLmhlYWRlcnNbQV09e319KTt2YXIgVj1WQTt2YXIgYWk9Zi50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxDdD1BPT57bGV0IGU9e30sdCxpLG87cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe289YS5pbmRleE9mKCI6IiksdD1hLnN1YnN0cmluZygwLG8pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGk9YS5zdWJzdHJpbmcobysxKS50cmltKCksISghdHx8ZVt0XSYmYWlbdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChpKTplW3RdPVtpXTplW3RdPWVbdF0/ZVt0XSsiLCAiK2k6aSl9KSxlfTt2YXIgbXQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBzQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGJBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpmLmlzQXJyYXkoQSk/QS5tYXAoYkEpOlN0cmluZyhBKX1mdW5jdGlvbiBzaShBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxpO2Zvcig7aT10LmV4ZWMoQSk7KWVbaVsxXV09aVsyXTtyZXR1cm4gZX12YXIgSWk9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gekEoQSxlLHQsaSxvKXtpZihmLmlzRnVuY3Rpb24oaSkpcmV0dXJuIGkuY2FsbCh0aGlzLGUsdCk7aWYobyYmKGU9dCksISFmLmlzU3RyaW5nKGUpKXtpZihmLmlzU3RyaW5nKGkpKXJldHVybiBlLmluZGV4T2YoaSkhPT0tMTtpZihmLmlzUmVnRXhwKGkpKXJldHVybiBpLnRlc3QoZSl9fWZ1bmN0aW9uIGxpKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxpKT0+dC50b1VwcGVyQ2FzZSgpK2kpfWZ1bmN0aW9uIGdpKEEsZSl7bGV0IHQ9Zi50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKGk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxpK3Qse3ZhbHVlOmZ1bmN0aW9uKG8scixhKXtyZXR1cm4gdGhpc1tpXS5jYWxsKHRoaXMsZSxvLHIsYSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIHo9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxpKXtsZXQgbz10aGlzO2Z1bmN0aW9uIHIoZyxjLHApe2xldCBuPXNBKGMpO2lmKCFuKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgcz1mLmZpbmRLZXkobyxuKTsoIXN8fG9bc109PT12b2lkIDB8fHA9PT0hMHx8cD09PXZvaWQgMCYmb1tzXSE9PSExKSYmKG9bc3x8Y109YkEoZykpfWxldCBhPShnLGMpPT5mLmZvckVhY2goZywocCxuKT0+cihwLG4sYykpO3JldHVybiBmLmlzUGxhaW5PYmplY3QoZSl8fGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2EoZSx0KTpmLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiFJaShlKT9hKEN0KGUpLHQpOmUhPW51bGwmJnIodCxlLGkpLHRoaXN9Z2V0KGUsdCl7aWYoZT1zQShlKSxlKXtsZXQgaT1mLmZpbmRLZXkodGhpcyxlKTtpZihpKXtsZXQgbz10aGlzW2ldO2lmKCF0KXJldHVybiBvO2lmKHQ9PT0hMClyZXR1cm4gc2kobyk7aWYoZi5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxvLGkpO2lmKGYuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhvKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1zQShlKSxlKXtsZXQgaT1mLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShpJiZ0aGlzW2ldIT09dm9pZCAwJiYoIXR8fHpBKHRoaXMsdGhpc1tpXSxpLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IGk9dGhpcyxvPSExO2Z1bmN0aW9uIHIoYSl7aWYoYT1zQShhKSxhKXtsZXQgZz1mLmZpbmRLZXkoaSxhKTtnJiYoIXR8fHpBKGksaVtnXSxnLHQpKSYmKGRlbGV0ZSBpW2ddLG89ITApfX1yZXR1cm4gZi5pc0FycmF5KGUpP2UuZm9yRWFjaChyKTpyKGUpLG99Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcyksaT10Lmxlbmd0aCxvPSExO2Zvcig7aS0tOyl7bGV0IHI9dFtpXTsoIWV8fHpBKHRoaXMsdGhpc1tyXSxyLGUsITApKSYmKGRlbGV0ZSB0aGlzW3JdLG89ITApfXJldHVybiBvfW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLGk9e307cmV0dXJuIGYuZm9yRWFjaCh0aGlzLChvLHIpPT57bGV0IGE9Zi5maW5kS2V5KGkscik7aWYoYSl7dFthXT1iQShvKSxkZWxldGUgdFtyXTtyZXR1cm59bGV0IGc9ZT9saShyKTpTdHJpbmcocikudHJpbSgpO2chPT1yJiZkZWxldGUgdFtyXSx0W2ddPWJBKG8pLGlbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZi5mb3JFYWNoKHRoaXMsKGksbyk9PntpIT1udWxsJiZpIT09ITEmJih0W29dPWUmJmYuaXNBcnJheShpKT9pLmpvaW4oIiwgIik6aSl9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgaT1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG89Pmkuc2V0KG8pKSxpfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgaT0odGhpc1ttdF09dGhpc1ttdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxvPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIHIoYSl7bGV0IGc9c0EoYSk7aVtnXXx8KGdpKG8sYSksaVtnXT0hMCl9cmV0dXJuIGYuaXNBcnJheShlKT9lLmZvckVhY2gocik6cihlKSx0aGlzfX07ei5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7Zi5yZWR1Y2VEZXNjcmlwdG9ycyh6LnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQoaSl7dGhpc1t0XT1pfX19KTtmLmZyZWV6ZU1ldGhvZHMoeik7dmFyIGs9ejtmdW5jdGlvbiBJQShBLGUpe2xldCB0PXRoaXN8fFYsaT1lfHx0LG89ay5mcm9tKGkuaGVhZGVycykscj1pLmRhdGE7cmV0dXJuIGYuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe3I9Zy5jYWxsKHQscixvLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG8ubm9ybWFsaXplKCkscn1mdW5jdGlvbiBsQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIEV0KEEsZSx0KXtoLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGguRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1mLmluaGVyaXRzKEV0LGgse19fQ0FOQ0VMX186ITB9KTt2YXIgRz1FdDtmdW5jdGlvbiBaQShBLGUsdCl7bGV0IGk9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhaXx8aSh0LnN0YXR1cyk/QSh0KTplKG5ldyBoKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW2guRVJSX0JBRF9SRVFVRVNULGguRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIGR0PWIuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxpLG8scil7bGV0IGE9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07Zi5pc051bWJlcih0KSYmYS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksZi5pc1N0cmluZyhpKSYmYS5wdXNoKCJwYXRoPSIraSksZi5pc1N0cmluZyhvKSYmYS5wdXNoKCJkb21haW49IitvKSxyPT09ITAmJmEucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWEuam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIFhBKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gJEEoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIGdBKEEsZSl7cmV0dXJuIEEmJiFYQShlKT8kQShBLGUpOmV9dmFyIFF0PWIuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxpO2Z1bmN0aW9uIG8ocil7bGV0IGE9cjtyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixhKSxhPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGEpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gaT1vKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihhKXtsZXQgZz1mLmlzU3RyaW5nKGEpP28oYSk6YTtyZXR1cm4gZy5wcm90b2NvbD09PWkucHJvdG9jb2wmJmcuaG9zdD09PWkuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gQWUoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIHBpKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSksaT1uZXcgQXJyYXkoQSksbz0wLHI9MCxhO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24oYyl7bGV0IHA9RGF0ZS5ub3coKSxuPWlbcl07YXx8KGE9cCksdFtvXT1jLGlbb109cDtsZXQgcz1yLEI9MDtmb3IoO3MhPT1vOylCKz10W3MrK10scz1zJUE7aWYobz0obysxKSVBLG89PT1yJiYocj0ocisxKSVBKSxwLWE8ZSlyZXR1cm47bGV0IEk9biYmcC1uO3JldHVybiBJP01hdGgucm91bmQoQioxZTMvSSk6dm9pZCAwfX12YXIgeXQ9cGk7ZnVuY3Rpb24gaHQoQSxlKXtsZXQgdD0wLGk9eXQoNTAsMjUwKTtyZXR1cm4gbz0+e2xldCByPW8ubG9hZGVkLGE9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLGc9ci10LGM9aShnKSxwPXI8PWE7dD1yO2xldCBuPXtsb2FkZWQ6cix0b3RhbDphLHByb2dyZXNzOmE/ci9hOnZvaWQgMCxieXRlczpnLHJhdGU6Y3x8dm9pZCAwLGVzdGltYXRlZDpjJiZhJiZwPyhhLXIpL2M6dm9pZCAwLGV2ZW50Om99O25bZT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKG4pfX12YXIgdWk9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iix3dD11aSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsaSl7bGV0IG89QS5kYXRhLHI9ay5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTphLHdpdGhYU1JGVG9rZW46Z309QSxjO2Z1bmN0aW9uIHAoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGMpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYyl9bGV0IG47aWYoZi5pc0Zvcm1EYXRhKG8pKXtpZihiLmhhc1N0YW5kYXJkQnJvd3NlckVudnx8Yi5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpci5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigobj1yLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtDLC4uLm1dPW4/bi5zcGxpdCgiOyIpLm1hcCh3PT53LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO3Iuc2V0Q29udGVudFR5cGUoW0N8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5tXS5qb2luKCI7ICIpKX19bGV0IHM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IEM9QS5hdXRoLnVzZXJuYW1lfHwiIixtPUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7ci5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoQysiOiIrbSkpfWxldCBCPWdBKEEuYmFzZVVSTCxBLnVybCk7cy5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksYUEoQixBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIEkoKXtpZighcylyZXR1cm47bGV0IEM9ay5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gcyYmcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksdz17ZGF0YTohYXx8YT09PSJ0ZXh0Inx8YT09PSJqc29uIj9zLnJlc3BvbnNlVGV4dDpzLnJlc3BvbnNlLHN0YXR1czpzLnN0YXR1cyxzdGF0dXNUZXh0OnMuc3RhdHVzVGV4dCxoZWFkZXJzOkMsY29uZmlnOkEscmVxdWVzdDpzfTtaQShmdW5jdGlvbihVKXt0KFUpLHAoKX0sZnVuY3Rpb24oVSl7aShVKSxwKCl9LHcpLHM9bnVsbH1pZigib25sb2FkZW5kImluIHM/cy5vbmxvYWRlbmQ9STpzLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFzfHxzLnJlYWR5U3RhdGUhPT00fHxzLnN0YXR1cz09PTAmJiEocy5yZXNwb25zZVVSTCYmcy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoSSl9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihpKG5ldyBoKCJSZXF1ZXN0IGFib3J0ZWQiLGguRUNPTk5BQk9SVEVELEEscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe2kobmV3IGgoIk5ldHdvcmsgRXJyb3IiLGguRVJSX05FVFdPUkssQSxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBtPUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIix3PUEudHJhbnNpdGlvbmFsfHxEQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihtPUEudGltZW91dEVycm9yTWVzc2FnZSksaShuZXcgaChtLHcuY2xhcmlmeVRpbWVvdXRFcnJvcj9oLkVUSU1FRE9VVDpoLkVDT05OQUJPUlRFRCxBLHMpKSxzPW51bGx9LGIuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoZyYmZi5pc0Z1bmN0aW9uKGcpJiYoZz1nKEEpKSxnfHxnIT09ITEmJlF0KEIpKSl7bGV0IEM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmZHQucmVhZChBLnhzcmZDb29raWVOYW1lKTtDJiZyLnNldChBLnhzcmZIZWFkZXJOYW1lLEMpfW89PT12b2lkIDAmJnIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gcyYmZi5mb3JFYWNoKHIudG9KU09OKCksZnVuY3Rpb24obSx3KXtzLnNldFJlcXVlc3RIZWFkZXIodyxtKX0pLGYuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwocy53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksYSYmYSE9PSJqc29uIiYmKHMucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJnMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGh0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmcy51cGxvYWQmJnMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixodChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoYz1DPT57cyYmKGkoIUN8fEMudHlwZT9uZXcgRyhudWxsLEEscyk6Qykscy5hYm9ydCgpLHM9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGMpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9jKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpKSk7bGV0IGw9QWUoQik7aWYobCYmYi5wcm90b2NvbHMuaW5kZXhPZihsKT09PS0xKXtpKG5ldyBoKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2wrIjoiLGguRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59cy5zZW5kKG98fG51bGwpfSl9O3ZhciBlZT17aHR0cDpoQSx4aHI6d3R9O2YuZm9yRWFjaChlZSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBEdD1BPT5gLSAke0F9YCxmaT1BPT5mLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsa0E9e2dldEFkYXB0ZXI6QT0+e0E9Zi5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LGksbz17fTtmb3IobGV0IHI9MDtyPGU7cisrKXt0PUFbcl07bGV0IGE7aWYoaT10LCFmaSh0KSYmKGk9ZWVbKGE9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxpPT09dm9pZCAwKSl0aHJvdyBuZXcgaChgVW5rbm93biBhZGFwdGVyICcke2F9J2ApO2lmKGkpYnJlYWs7b1thfHwiIyIrcl09aX1pZighaSl7bGV0IHI9T2JqZWN0LmVudHJpZXMobykubWFwKChbZyxjXSk9PmBhZGFwdGVyICR7Z30gYCsoYz09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGE9ZT9yLmxlbmd0aD4xP2BzaW5jZSA6CmArci5tYXAoRHQpLmpvaW4oYApgKToiICIrRHQoclswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgaCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2EsIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBpfSxhZGFwdGVyczplZX07ZnVuY3Rpb24gdGUoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEcobnVsbCxBKX1mdW5jdGlvbiBSQShBKXtyZXR1cm4gdGUoQSksQS5oZWFkZXJzPWsuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1JQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksa0EuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFYuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihpKXtyZXR1cm4gdGUoQSksaS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGkpLGkuaGVhZGVycz1rLmZyb20oaS5oZWFkZXJzKSxpfSxmdW5jdGlvbihpKXtyZXR1cm4gbEEoaSl8fCh0ZShBKSxpJiZpLnJlc3BvbnNlJiYoaS5yZXNwb25zZS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGkucmVzcG9uc2UpLGkucmVzcG9uc2UuaGVhZGVycz1rLmZyb20oaS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KGkpfSl9dmFyIFN0PUE9PkEgaW5zdGFuY2VvZiBrP3suLi5BfTpBO2Z1bmN0aW9uIHgoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIGkocCxuLHMpe3JldHVybiBmLmlzUGxhaW5PYmplY3QocCkmJmYuaXNQbGFpbk9iamVjdChuKT9mLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOnN9LHAsbik6Zi5pc1BsYWluT2JqZWN0KG4pP2YubWVyZ2Uoe30sbik6Zi5pc0FycmF5KG4pP24uc2xpY2UoKTpufWZ1bmN0aW9uIG8ocCxuLHMpe2lmKGYuaXNVbmRlZmluZWQobikpe2lmKCFmLmlzVW5kZWZpbmVkKHApKXJldHVybiBpKHZvaWQgMCxwLHMpfWVsc2UgcmV0dXJuIGkocCxuLHMpfWZ1bmN0aW9uIHIocCxuKXtpZighZi5pc1VuZGVmaW5lZChuKSlyZXR1cm4gaSh2b2lkIDAsbil9ZnVuY3Rpb24gYShwLG4pe2lmKGYuaXNVbmRlZmluZWQobikpe2lmKCFmLmlzVW5kZWZpbmVkKHApKXJldHVybiBpKHZvaWQgMCxwKX1lbHNlIHJldHVybiBpKHZvaWQgMCxuKX1mdW5jdGlvbiBnKHAsbixzKXtpZihzIGluIGUpcmV0dXJuIGkocCxuKTtpZihzIGluIEEpcmV0dXJuIGkodm9pZCAwLHApfWxldCBjPXt1cmw6cixtZXRob2Q6cixkYXRhOnIsYmFzZVVSTDphLHRyYW5zZm9ybVJlcXVlc3Q6YSx0cmFuc2Zvcm1SZXNwb25zZTphLHBhcmFtc1NlcmlhbGl6ZXI6YSx0aW1lb3V0OmEsdGltZW91dE1lc3NhZ2U6YSx3aXRoQ3JlZGVudGlhbHM6YSx3aXRoWFNSRlRva2VuOmEsYWRhcHRlcjphLHJlc3BvbnNlVHlwZTphLHhzcmZDb29raWVOYW1lOmEseHNyZkhlYWRlck5hbWU6YSxvblVwbG9hZFByb2dyZXNzOmEsb25Eb3dubG9hZFByb2dyZXNzOmEsZGVjb21wcmVzczphLG1heENvbnRlbnRMZW5ndGg6YSxtYXhCb2R5TGVuZ3RoOmEsYmVmb3JlUmVkaXJlY3Q6YSx0cmFuc3BvcnQ6YSxodHRwQWdlbnQ6YSxodHRwc0FnZW50OmEsY2FuY2VsVG9rZW46YSxzb2NrZXRQYXRoOmEscmVzcG9uc2VFbmNvZGluZzphLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczoocCxuKT0+byhTdChwKSxTdChuKSwhMCl9O3JldHVybiBmLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihuKXtsZXQgcz1jW25dfHxvLEI9cyhBW25dLGVbbl0sbik7Zi5pc1VuZGVmaW5lZChCKSYmcyE9PWd8fCh0W25dPUIpfSksdH12YXIgRkE9IjEuNi44Ijt2YXIgcmU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57cmVbQV09ZnVuY3Rpb24oaSl7cmV0dXJuIHR5cGVvZiBpPT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIGJ0PXt9O3JlLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQsaSl7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiJbQXhpb3MgdiIrRkErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIityKyInIithKyhpPyIuICIraToiIil9cmV0dXJuKHIsYSxnKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgaChvKGEsIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLGguRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhYnRbYV0mJihidFthXT0hMCxjb25zb2xlLndhcm4obyhhLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShyLGEsZyk6ITB9fTtmdW5jdGlvbiBCaShBLGUsdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBoKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixoLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgaT1PYmplY3Qua2V5cyhBKSxvPWkubGVuZ3RoO2Zvcig7by0tID4wOyl7bGV0IHI9aVtvXSxhPWVbcl07aWYoYSl7bGV0IGc9QVtyXSxjPWc9PT12b2lkIDB8fGEoZyxyLEEpO2lmKGMhPT0hMCl0aHJvdyBuZXcgaCgib3B0aW9uICIrcisiIG11c3QgYmUgIitjLGguRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgaCgiVW5rbm93biBvcHRpb24gIityLGguRVJSX0JBRF9PUFRJT04pfX12YXIgUEE9e2Fzc2VydE9wdGlvbnM6QmksdmFsaWRhdG9yczpyZX07dmFyIEw9UEEudmFsaWRhdG9ycyxaPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgakEscmVzcG9uc2U6bmV3IGpBfX1hc3luYyByZXF1ZXN0KGUsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUsdCl9Y2F0Y2goaSl7aWYoaSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvPXt9KTpvPW5ldyBFcnJvcjtsZXQgcj1vLnN0YWNrP28uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtpLnN0YWNrP3ImJiFTdHJpbmcoaS5zdGFjaykuZW5kc1dpdGgoci5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihpLnN0YWNrKz1gCmArcik6aS5zdGFjaz1yfXRocm93IGl9fV9yZXF1ZXN0KGUsdCl7dHlwZW9mIGU9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPWUpOnQ9ZXx8e30sdD14KHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDppLHBhcmFtc1NlcmlhbGl6ZXI6byxoZWFkZXJzOnJ9PXQ7aSE9PXZvaWQgMCYmUEEuYXNzZXJ0T3B0aW9ucyhpLHtzaWxlbnRKU09OUGFyc2luZzpMLnRyYW5zaXRpb25hbChMLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkwudHJhbnNpdGlvbmFsKEwuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpMLnRyYW5zaXRpb25hbChMLmJvb2xlYW4pfSwhMSksbyE9bnVsbCYmKGYuaXNGdW5jdGlvbihvKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpvfTpQQS5hc3NlcnRPcHRpb25zKG8se2VuY29kZTpMLmZ1bmN0aW9uLHNlcmlhbGl6ZTpMLmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBhPXImJmYubWVyZ2Uoci5jb21tb24sclt0Lm1ldGhvZF0pO3ImJmYuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxsPT57ZGVsZXRlIHJbbF19KSx0LmhlYWRlcnM9ay5jb25jYXQoYSxyKTtsZXQgZz1bXSxjPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihDKXt0eXBlb2YgQy5ydW5XaGVuPT0iZnVuY3Rpb24iJiZDLnJ1bldoZW4odCk9PT0hMXx8KGM9YyYmQy5zeW5jaHJvbm91cyxnLnVuc2hpZnQoQy5mdWxmaWxsZWQsQy5yZWplY3RlZCkpfSk7bGV0IHA9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihDKXtwLnB1c2goQy5mdWxmaWxsZWQsQy5yZWplY3RlZCl9KTtsZXQgbixzPTAsQjtpZighYyl7bGV0IGw9W1JBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IobC51bnNoaWZ0LmFwcGx5KGwsZyksbC5wdXNoLmFwcGx5KGwscCksQj1sLmxlbmd0aCxuPVByb21pc2UucmVzb2x2ZSh0KTtzPEI7KW49bi50aGVuKGxbcysrXSxsW3MrK10pO3JldHVybiBufUI9Zy5sZW5ndGg7bGV0IEk9dDtmb3Iocz0wO3M8Qjspe2xldCBsPWdbcysrXSxDPWdbcysrXTt0cnl7ST1sKEkpfWNhdGNoKG0pe0MuY2FsbCh0aGlzLG0pO2JyZWFrfX10cnl7bj1SQS5jYWxsKHRoaXMsSSl9Y2F0Y2gobCl7cmV0dXJuIFByb21pc2UucmVqZWN0KGwpfWZvcihzPTAsQj1wLmxlbmd0aDtzPEI7KW49bi50aGVuKHBbcysrXSxwW3MrK10pO3JldHVybiBufWdldFVyaShlKXtlPXgodGhpcy5kZWZhdWx0cyxlKTtsZXQgdD1nQShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBhQSh0LGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTtmLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe1oucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMucmVxdWVzdCh4KGl8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihpfHx7fSkuZGF0YX0pKX19KTtmLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGkpe3JldHVybiBmdW5jdGlvbihyLGEsZyl7cmV0dXJuIHRoaXMucmVxdWVzdCh4KGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOmk/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTphfSkpfX1aLnByb3RvdHlwZVtlXT10KCksWi5wcm90b3R5cGVbZSsiRm9ybSJdPXQoITApfSk7dmFyIHBBPVo7dmFyIGllPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihyKXt0PXJ9KTtsZXQgaT10aGlzO3RoaXMucHJvbWlzZS50aGVuKG89PntpZighaS5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj1pLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7ci0tID4wOylpLl9saXN0ZW5lcnNbcl0obyk7aS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1vPT57bGV0IHIsYT1uZXcgUHJvbWlzZShnPT57aS5zdWJzY3JpYmUoZykscj1nfSkudGhlbihvKTtyZXR1cm4gYS5jYW5jZWw9ZnVuY3Rpb24oKXtpLnVuc3Vic2NyaWJlKHIpfSxhfSxlKGZ1bmN0aW9uKHIsYSxnKXtpLnJlYXNvbnx8KGkucmVhc29uPW5ldyBHKHIsYSxnKSx0KGkucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihvKXtlPW99KSxjYW5jZWw6ZX19fSxrdD1pZTtmdW5jdGlvbiBvZShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gbmUoQSl7cmV0dXJuIGYuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIGFlPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhhZSkuZm9yRWFjaCgoW0EsZV0pPT57YWVbZV09QX0pO3ZhciBSdD1hZTtmdW5jdGlvbiBGdChBKXtsZXQgZT1uZXcgcEEoQSksdD1pQShwQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gZi5leHRlbmQodCxwQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLGYuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obyl7cmV0dXJuIEZ0KHgoQSxvKSl9LHR9dmFyIEQ9RnQoVik7RC5BeGlvcz1wQTtELkNhbmNlbGVkRXJyb3I9RztELkNhbmNlbFRva2VuPWt0O0QuaXNDYW5jZWw9bEE7RC5WRVJTSU9OPUZBO0QudG9Gb3JtRGF0YT1UO0QuQXhpb3NFcnJvcj1oO0QuQ2FuY2VsPUQuQ2FuY2VsZWRFcnJvcjtELmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O0Quc3ByZWFkPW9lO0QuaXNBeGlvc0Vycm9yPW5lO0QubWVyZ2VDb25maWc9eDtELkF4aW9zSGVhZGVycz1rO0QuZm9ybVRvSlNPTj1BPT5TQShmLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO0QuZ2V0QWRhcHRlcj1rQS5nZXRBZGFwdGVyO0QuSHR0cFN0YXR1c0NvZGU9UnQ7RC5kZWZhdWx0PUQ7dmFyIFg9RDt2YXJ7QXhpb3M6aHMsQXhpb3NFcnJvcjp3cyxDYW5jZWxlZEVycm9yOkRzLGlzQ2FuY2VsOlNzLENhbmNlbFRva2VuOmJzLFZFUlNJT046a3MsYWxsOlJzLENhbmNlbDpGcyxpc0F4aW9zRXJyb3I6UHMsc3ByZWFkOldzLHRvRm9ybURhdGE6VXMsQXhpb3NIZWFkZXJzOk5zLEh0dHBTdGF0dXNDb2RlOk9zLGZvcm1Ub0pTT046TXMsZ2V0QWRhcHRlcjp4cyxtZXJnZUNvbmZpZzpUc309WDthc3luYyBmdW5jdGlvbiBjaShBLGUpe2xldCB0PUEsaT1udWxsO2lmKHQ9PW51bGwpaT1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG89YXdhaXQgWC5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLHI9VVJMLmNyZWF0ZU9iamVjdFVSTChvLmRhdGEpO2k9bmV3IFdvcmtlcihyLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSBpPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiBpfXZhciB1QT1jaTtmdW5jdGlvbiBQdChBKXtsZXQgZT1HQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W1RBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIENpKEEsZSx0KXtsZXQgaTtpZihBIT1udWxsKXtsZXQgcj1BO3JldHVybiByLndvcmtlclByb3h5IT09dm9pZCAwPyhpPXIud29ya2VyUHJveHkse3dvcmtlclByb3h5Omksd29ya2VyOnJ9KTpQdChBKX1sZXQgbz1hd2FpdCB1QShlLHQpO3JldHVybiBQdChvKX12YXIgV3Q9Q2k7YXN5bmMgZnVuY3Rpb24gbWkoQSxlLHQpe2xldCBpPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/aT1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/aT1BOmk9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsaS5lbmRzV2l0aCgiLmpzIikmJihpPWkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtMykpLGkuZW5kc1dpdGgoIi53YXNtIikmJihpPWkuc3Vic3RyaW5nKDAsaS5sZW5ndGgtNSkpO2xldCBvPWAke2l9Lndhc21gLGE9KGF3YWl0IFguZ2V0KG8se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtpfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OmF9KX12YXIgVXQ9bWk7dmFyIE50PWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciB4dD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixPdD1uZXcgVGV4dEVuY29kZXIsTXQ9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIEVpKEEsZSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0saT1BLmZzX29wZW4oZSx0LmZsYWdzKSxyPUEuZnNfc3RhdChlKS5zaXplLGE9bnVsbDt4dD9hPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTphPW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgZz1uZXcgVWludDhBcnJheShhKTtyZXR1cm4gQS5mc19yZWFkKGksZywwLHIsMCksQS5mc19jbG9zZShpKSxnfWZ1bmN0aW9uIFR0KEEsZSx0KXtsZXQgaT1udWxsO3h0P2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOmk9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBvPW5ldyBVaW50OEFycmF5KGkpLHI9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUsdCk7cmV0dXJuIG8uc2V0KHIpLG99ZnVuY3Rpb24gUyhBLGUsdCxpKXtsZXQgbz0wO3JldHVybiBlIT09bnVsbCYmKG89QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxpLGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG8pKSxvfWZ1bmN0aW9uIHEoQSxlLHQpe2xldCBpPUpTT04uc3RyaW5naWZ5KGUpLG89QS5sZW5ndGhCeXRlc1VURjgoaSkrMSxyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxvXSk7QS5zdHJpbmdUb1VURjgoaSxyLG8pfWZ1bmN0aW9uIFIoQSxlLHQsaSl7bGV0IG89QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSkscj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxhPVR0KEEsbyxyKTtyZXR1cm4gTihpLGEuYnVmZmVyKX1mdW5jdGlvbiBXQShBLGUpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLGk9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2UoaSl9ZnVuY3Rpb24gZGkoQSxlLHQsaSl7aSE9bnVsbCYmaS5sZW5ndGg+MCYmaS5mb3JFYWNoKGZ1bmN0aW9uKHAsbil7c3dpdGNoKHAudHlwZSl7Y2FzZSB1LlRleHRTdHJlYW06e2xldCBzPU90LmVuY29kZShwLmRhdGEuZGF0YSksQj1TKEEscyxuLDApLEk9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gfTtxKEEsSSxuKTticmVha31jYXNlIHUuSnNvbkNvbXBhdGlibGU6e2xldCBzPU90LmVuY29kZShKU09OLnN0cmluZ2lmeShwLmRhdGEpKSxCPVMoQSxzLG4sMCksST17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWB9O3EoQSxJLG4pO2JyZWFrfWNhc2UgdS5CaW5hcnlTdHJlYW06e2xldCBzPXAuZGF0YS5kYXRhLEI9UyhBLHMsbiwwKSxJPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07cShBLEksbik7YnJlYWt9Y2FzZSB1LlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShwLmRhdGEucGF0aCxwLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSB1LkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKHAuZGF0YS5wYXRoLHAuZGF0YS5kYXRhKTticmVha31jYXNlIHUuSW1hZ2U6e2xldCBzPXAuZGF0YSxCPVMoQSxzLmRhdGEsbiwwKSxJPVMoQSxzLmRpcmVjdGlvbixuLDEpLGw9dHlwZW9mIHMubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20ocy5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLEM9e2ltYWdlVHlwZTpzLmltYWdlVHlwZSxuYW1lOnMubmFtZSxvcmlnaW46cy5vcmlnaW4sc3BhY2luZzpzLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7SX1gLHNpemU6cy5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbWV0YWRhdGE6bH07cShBLEMsbik7YnJlYWt9Y2FzZSB1Lk1lc2g6e2xldCBzPXAuZGF0YSxCPVMoQSxzLnBvaW50cyxuLDApLEk9UyhBLHMuY2VsbHMsbiwxKSxsPVMoQSxzLnBvaW50RGF0YSxuLDIpLEM9UyhBLHMuY2VsbERhdGEsbiwzKSxtPXttZXNoVHlwZTpzLm1lc2hUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLG51bWJlck9mQ2VsbHM6cy5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7SX1gLGNlbGxCdWZmZXJTaXplOnMuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YH07cShBLG0sbik7YnJlYWt9Y2FzZSB1LlBvaW50U2V0OntsZXQgcz1wLmRhdGEsQj1TKEEscy5wb2ludHMsbiwwKSxJPVMoQSxzLnBvaW50RGF0YSxuLDEpLGw9e3BvaW50U2V0VHlwZTpzLnBvaW50U2V0VHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtJfWB9O3EoQSxsLG4pO2JyZWFrfWNhc2UgdS5Qb2x5RGF0YTp7bGV0IHM9cC5kYXRhLEI9UyhBLHMucG9pbnRzLG4sMCksST1TKEEscy52ZXJ0aWNlcyxuLDEpLGw9UyhBLHMubGluZXMsbiwyKSxDPVMoQSxzLnBvbHlnb25zLG4sMyksbT1TKEEscy50cmlhbmdsZVN0cmlwcyxuLDQpLHc9UyhBLHMucG9pbnREYXRhLG4sNSksVz1TKEEscy5wb2ludERhdGEsbiw2KSxVPXtwb2x5RGF0YVR5cGU6cy5wb2x5RGF0YVR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsdmVydGljZXNCdWZmZXJTaXplOnMudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7SX1gLGxpbmVzQnVmZmVyU2l6ZTpzLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxwb2x5Z29uc0J1ZmZlclNpemU6cy5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOnMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bX1gLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3d9YCxudW1iZXJPZkNlbGxQaXhlbHM6cy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtXfWB9O3EoQSxVLG4pO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBvPUEuc3RhY2tTYXZlKCkscj0wO3RyeXtyPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChwKXt0aHJvdyB0eXBlb2YgcD09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShwKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxwfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobyl9bGV0IGE9QS5nZXRNb2R1bGVTdGRvdXQoKSxnPUEuZ2V0TW9kdWxlU3RkZXJyKCksYz1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmcj09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihwLG4pe2xldCBzPW51bGw7c3dpdGNoKHAudHlwZSl7Y2FzZSB1LlRleHRTdHJlYW06e2xldCBJPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLGw9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksQz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsSSxsKTtzPXtkYXRhOk10LmRlY29kZShDKX07YnJlYWt9Y2FzZSB1Lkpzb25Db21wYXRpYmxlOntsZXQgST1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxsPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEksbCk7cz1KU09OLnBhcnNlKE10LmRlY29kZShDKSk7YnJlYWt9Y2FzZSB1LkJpbmFyeVN0cmVhbTp7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksbD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKTtzPXtkYXRhOlR0KEEsSSxsKX07YnJlYWt9Y2FzZSB1LlRleHRGaWxlOntzPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShwLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgdS5CaW5hcnlGaWxlOntzPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6RWkoQSxwLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgdS5JbWFnZTp7bGV0IEk9V0EoQSxuKTtJLmRhdGE9UihBLG4sMCxJLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxJLmRpcmVjdGlvbj1SKEEsbiwxLEsuRmxvYXQ2NCksSS5tZXRhZGF0YT1uZXcgTWFwKEkubWV0YWRhdGEpLHM9STticmVha31jYXNlIHUuTWVzaDp7bGV0IEk9V0EoQSxuKTtJLm51bWJlck9mUG9pbnRzPjA/SS5wb2ludHM9UihBLG4sMCxJLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6SS5wb2ludHM9TihJLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEkubnVtYmVyT2ZDZWxscz4wP0kuY2VsbHM9UihBLG4sMSxJLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpJLmNlbGxzPU4oSS5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEkubnVtYmVyT2ZQb2ludFBpeGVscz4wP0kucG9pbnREYXRhPVIoQSxuLDIsSS5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6SS5wb2ludERhdGE9TihJLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksSS5udW1iZXJPZkNlbGxQaXhlbHM+MD9JLmNlbGxEYXRhPVIoQSxuLDMsSS5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpJLmNlbGxEYXRhPU4oSS5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1JO2JyZWFrfWNhc2UgdS5Qb2ludFNldDp7bGV0IEk9V0EoQSxuKTtJLm51bWJlck9mUG9pbnRzPjA/SS5wb2ludHM9UihBLG4sMCxJLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOkkucG9pbnRzPU4oSS5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksSS5udW1iZXJPZlBvaW50UGl4ZWxzPjA/SS5wb2ludERhdGE9UihBLG4sMSxJLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6SS5wb2ludERhdGE9TihJLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9STticmVha31jYXNlIHUuUG9seURhdGE6e2xldCBJPVdBKEEsbik7SS5udW1iZXJPZlBvaW50cz4wP0kucG9pbnRzPVIoQSxuLDAsSy5GbG9hdDMyKTpJLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LEkudmVydGljZXNCdWZmZXJTaXplPjA/SS52ZXJ0aWNlcz1SKEEsbiwxLEYuVUludDMyKTpJLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxJLmxpbmVzQnVmZmVyU2l6ZT4wP0kubGluZXM9UihBLG4sMixGLlVJbnQzMik6SS5saW5lcz1uZXcgVWludDMyQXJyYXksSS5wb2x5Z29uc0J1ZmZlclNpemU+MD9JLnBvbHlnb25zPVIoQSxuLDMsRi5VSW50MzIpOkkucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LEkudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/SS50cmlhbmdsZVN0cmlwcz1SKEEsbiw0LEYuVUludDMyKTpJLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxJLm51bWJlck9mUG9pbnRQaXhlbHM+MD9JLnBvaW50RGF0YT1SKEEsbiw1LEkucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpJLnBvaW50RGF0YT1OKEkucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksSS5udW1iZXJPZkNlbGxQaXhlbHM+MD9JLmNlbGxEYXRhPVIoQSxuLDYsSS5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6SS5jZWxsRGF0YT1OKEkucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgQj17dHlwZTpwLnR5cGUsZGF0YTpzfTtjLnB1c2goQil9KSx7cmV0dXJuVmFsdWU6cixzdGRvdXQ6YSxzdGRlcnI6ZyxvdXRwdXRzOmN9fXZhciBHdD1kaTt2YXIgUWk9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIHlpKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IGk9MDtpPEEubGVuZ3RoO2krKyl7bGV0IG89aGkoQVtpXSxlKTtvIT09bnVsbCYmdC5wdXNoKG8pfXJldHVybiB0fWZ1bmN0aW9uIGhpKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksUWkmJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBMdD15aTtmdW5jdGlvbiB3aShBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgSnQ9d2k7ZnVuY3Rpb24gRGkoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIEh0PURpO2Z1bmN0aW9uIFNpKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBZdD1TaTt2YXIgYmk7ZnVuY3Rpb24gVUEoKXtyZXR1cm4gYml9dmFyIGtpO2Z1bmN0aW9uIHF0KCl7cmV0dXJuIGtpfXZhciBSaTtmdW5jdGlvbiBOQSgpe3JldHVybiBSaX12YXIgc2U9bmV3IE1hcDtmdW5jdGlvbiBGaSgpe2xldCBBPU5BKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBLdCgpe2xldCBBPVVBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIE9BKCl7bGV0IEE9cXQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBQaShBLGUsdCl7bGV0IGk9QSxvPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYoaT1uZXcgVVJMKEEuaHJlZiksbz1pLmhyZWYpLHNlLmhhcyhvKSlyZXR1cm4gc2UuZ2V0KG8pO3tsZXQgcj1hd2FpdCBVdChBLGU/LnRvU3RyaW5nKCk/P0t0KCksdD8/T0EoKSk7cmV0dXJuIHNlLnNldChvLHIpLHJ9fWFzeW5jIGZ1bmN0aW9uIFdpKEEsZSx0LGksbyl7aWYoIWF3YWl0IE50KCkpe2xldCBtPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChtKSxuZXcgRXJyb3IobSl9bGV0IHI9bz8ud2ViV29ya2VyPz9udWxsO2lmKHI9PT0hMSl7bGV0IG09YXdhaXQgUGkoQS50b1N0cmluZygpLG8/LnBpcGVsaW5lQmFzZVVybCxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9PQSgpKTtyZXR1cm4gR3QobSxlLHQsaSl9bGV0IGE9cixnPW8/LnBpcGVsaW5lV29ya2VyVXJsPz9GaSgpLGM9dHlwZW9mIGchPSJzdHJpbmciJiZ0eXBlb2YgZz8uaHJlZjwidSI/Zy5ocmVmOmcse3dvcmtlclByb3h5OnAsd29ya2VyOm59PWF3YWl0IFd0KGEsYyxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9PQSgpKTthPW47bGV0IHM9W107aSE9bnVsbCYmaS5sZW5ndGg+MCYmaS5mb3JFYWNoKGZ1bmN0aW9uKG0pe2lmKG0udHlwZT09PXUuQmluYXJ5U3RyZWFtKXtsZXQgdz1tLmRhdGEuZGF0YTtzLnB1c2godyl9ZWxzZSBpZihtLnR5cGU9PT11LkJpbmFyeUZpbGUpe2xldCB3PW0uZGF0YS5kYXRhO3MucHVzaCh3KX1lbHNlIGlmKG0udHlwZT09PXUuSW1hZ2Upe2xldCB3PW0uZGF0YTt3LmRhdGEhPT1udWxsJiZzLnB1c2goLi4uSnQodykpfWVsc2UgaWYobS50eXBlPT09dS5NZXNoKXtsZXQgdz1tLmRhdGE7cy5wdXNoKC4uLkh0KHcpKX1lbHNlIGlmKG0udHlwZT09PXUuUG9seURhdGEpe2xldCB3PW0uZGF0YTtzLnB1c2goLi4uWXQodykpfX0pO2xldCBCPW8/LnBpcGVsaW5lQmFzZVVybD8/S3QoKSxJPXR5cGVvZiBCIT0ic3RyaW5nIiYmdHlwZW9mIEI/LmhyZWY8InUiP0IuaHJlZjpCLGw9aSE9bnVsbD9MQShpLEx0KHMsbz8ubm9Db3B5KSk6bnVsbCxDPWF3YWl0IHAucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLEksZSx0LGwsbz8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/T0EoKSk7cmV0dXJue3JldHVyblZhbHVlOkMucmV0dXJuVmFsdWUsc3Rkb3V0OkMuc3Rkb3V0LHN0ZGVycjpDLnN0ZGVycixvdXRwdXRzOkMub3V0cHV0cyx3ZWJXb3JrZXI6YX19dmFyIGQ9V2k7dmFyIFVpPW51bGw7ZnVuY3Rpb24ganQoKXtyZXR1cm4gVWl9dmFyIE5pPW5ldyBNYXAoW10pLCQ9Tmk7dmFyIE9pPSIxLjQuMiIsdnQ9T2k7dmFyIEllLE1pPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9tZXNoLWlvQCR7dnR9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBGSShBKXtJZT1BfWZ1bmN0aW9uIFEoKXtpZih0eXBlb2YgSWU8InUiKXJldHVybiBJZTtsZXQgQT1VQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpNaX12YXIgbGUseGk9bnVsbDtmdW5jdGlvbiBfdChBKXtsZT1BfWZ1bmN0aW9uIEUoKXtpZih0eXBlb2YgbGU8InUiKXJldHVybiBsZTtsZXQgQT1OQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTp4aX12YXIgQUE9bnVsbDthc3luYyBmdW5jdGlvbiBWdCgpe2xldCBBPUUoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO0FBPWF3YWl0IHVBKGUpfWZ1bmN0aW9uIHhJKEEpe0FBPUF9YXN5bmMgZnVuY3Rpb24geSgpe2lmKEFBIT09bnVsbClyZXR1cm4gQUEudGVybWluYXRlZCYmYXdhaXQgVnQoKSxBQTtsZXQgQT1qdCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCBWdCgpLEFBKX1hc3luYyBmdW5jdGlvbiBUaShBLGU9e30pe2xldCB0PVt7dHlwZTp1Lkpzb25Db21wYXRpYmxlfSx7dHlwZTp1Lk1lc2h9XSxpPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBtPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtpPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KG0pfX1sZXQgbz1be3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6aX1dLHI9W10sYT1pLnBhdGg7ci5wdXNoKGEpLHIucHVzaCgiMCIpLHIucHVzaCgiMSIpLHIucHVzaCgiLS1tZW1vcnktaW8iKSxlLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJnIucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9InZ0ay1wb2x5LWRhdGEtcmVhZC1tZXNoIixuPWU/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsdCxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLG1lc2g6bFsxXT8uZGF0YX19dmFyIGdlPVRpO2FzeW5jIGZ1bmN0aW9uIEdpKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuTWVzaCxkYXRhOkF9XSxyPVtdO3IucHVzaCgiMCIpLHIucHVzaCgiMCIpO2xldCBjPWU7ci5wdXNoKGMpLHIucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJnIucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmci5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJnIucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHA9InZ0ay1wb2x5LWRhdGEtd3JpdGUtbWVzaCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6bFsxXT8uZGF0YX19dmFyIHBlPUdpO2FzeW5jIGZ1bmN0aW9uIExpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuTWVzaH1dLGk9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2k9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fWxldCBvPVt7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTppfV0scj1bXSxhPWkucGF0aDtyLnB1c2goYSksci5wdXNoKCIwIiksci5wdXNoKCIxIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ib2JqLXJlYWQtbWVzaCIsbj1lPy53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLHQsbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxtZXNoOmxbMV0/LmRhdGF9fXZhciB1ZT1MaTthc3luYyBmdW5jdGlvbiBKaShBLGUsdD17fSl7bGV0IGk9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTp1Lk1lc2gsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJvYmotd3JpdGUtbWVzaCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6bFsxXT8uZGF0YX19dmFyIGZlPUppO2FzeW5jIGZ1bmN0aW9uIEhpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuTWVzaH1dLGk9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2k9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fWxldCBvPVt7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTppfV0scj1bXSxhPWkucGF0aDtyLnB1c2goYSksci5wdXNoKCIwIiksci5wdXNoKCIxIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ic3RsLXJlYWQtbWVzaCIsbj1lPy53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLHQsbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxtZXNoOmxbMV0/LmRhdGF9fXZhciBCZT1IaTthc3luYyBmdW5jdGlvbiBZaShBLGUsdD17fSl7bGV0IGk9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTp1Lk1lc2gsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJzdGwtd3JpdGUtbWVzaCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6bFsxXT8uZGF0YX19dmFyIGNlPVlpO2FzeW5jIGZ1bmN0aW9uIHFpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuTWVzaH1dLGk9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2k9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fWxldCBvPVt7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTppfV0scj1bXSxhPWkucGF0aDtyLnB1c2goYSksci5wdXNoKCIwIiksci5wdXNoKCIxIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ib2ZmLXJlYWQtbWVzaCIsbj1lPy53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLHQsbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxtZXNoOmxbMV0/LmRhdGF9fXZhciBDZT1xaTthc3luYyBmdW5jdGlvbiBLaShBLGUsdD17fSl7bGV0IGk9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTp1Lk1lc2gsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJvZmYtd3JpdGUtbWVzaCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6bFsxXT8uZGF0YX19dmFyIG1lPUtpO2FzeW5jIGZ1bmN0aW9uIGppKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuTWVzaH1dLGk9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2k9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fWxldCBvPVt7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTppfV0scj1bXSxhPWkucGF0aDtyLnB1c2goYSksci5wdXNoKCIwIiksci5wdXNoKCIxIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0id2FzbS1yZWFkLW1lc2giLG49ZT8ud2ViV29ya2VyO249PT12b2lkIDAmJihuPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkIsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBkKHAscix0LG8se3BpcGVsaW5lQmFzZVVybDpRKCkscGlwZWxpbmVXb3JrZXJVcmw6RSgpLHdlYldvcmtlcjpuLG5vQ29weTplPy5ub0NvcHl9KTtpZihCIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsbWVzaDpsWzFdPy5kYXRhfX12YXIgRWU9amk7YXN5bmMgZnVuY3Rpb24gdmkoQSxlLHQ9e30pe2xldCBpPVt7dHlwZTp1Lkpzb25Db21wYXRpYmxlfSx7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6dS5NZXNoLGRhdGE6QX1dLHI9W107ci5wdXNoKCIwIiksci5wdXNoKCIwIik7bGV0IGM9ZTtyLnB1c2goYyksci5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZyLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmci5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgcD0id2FzbS13cml0ZS1tZXNoIixuPXQ/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsaSxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6dD8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpsWzFdPy5kYXRhfX12YXIgZGU9dmk7YXN5bmMgZnVuY3Rpb24gX2koQSxlPXt9KXtsZXQgdD1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5NZXNofV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJ3YXNtLXpzdGQtcmVhZC1tZXNoIixuPWU/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsdCxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLG1lc2g6bFsxXT8uZGF0YX19dmFyIFFlPV9pO2FzeW5jIGZ1bmN0aW9uIFZpKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuTWVzaCxkYXRhOkF9XSxyPVtdO3IucHVzaCgiMCIpLHIucHVzaCgiMCIpO2xldCBjPWU7ci5wdXNoKGMpLHIucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJnIucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmci5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJnIucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHA9Indhc20tenN0ZC13cml0ZS1tZXNoIixuPXQ/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsaSxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6dD8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpsWzFdPy5kYXRhfX12YXIgeWU9Vmk7YXN5bmMgZnVuY3Rpb24gemkoQSxlPXt9KXtsZXQgdD1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5NZXNofV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJzd2MtcmVhZC1tZXNoIixuPWU/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsdCxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLG1lc2g6bFsxXT8uZGF0YX19dmFyIGhlPXppO2FzeW5jIGZ1bmN0aW9uIFppKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuTWVzaCxkYXRhOkF9XSxyPVtdO3IucHVzaCgiMCIpLHIucHVzaCgiMCIpO2xldCBjPWU7ci5wdXNoKGMpLHIucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJnIucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmci5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJnIucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHA9InN3Yy13cml0ZS1tZXNoIixuPXQ/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsaSxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6dD8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpsWzFdPy5kYXRhfX12YXIgd2U9Wmk7YXN5bmMgZnVuY3Rpb24gWGkoQSxlPXt9KXtsZXQgdD1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5NZXNofV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJieXUtcmVhZC1tZXNoIixuPWU/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsdCxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLG1lc2g6bFsxXT8uZGF0YX19dmFyIERlPVhpO2FzeW5jIGZ1bmN0aW9uICRpKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuTWVzaCxkYXRhOkF9XSxyPVtdO3IucHVzaCgiMCIpLHIucHVzaCgiMCIpO2xldCBjPWU7ci5wdXNoKGMpLHIucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJnIucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmci5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJnIucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHA9ImJ5dS13cml0ZS1tZXNoIixuPXQ/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsaSxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6dD8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpsWzFdPy5kYXRhfX12YXIgU2U9JGk7YXN5bmMgZnVuY3Rpb24gQW8oQSxlPXt9KXtsZXQgdD1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5NZXNofV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJmcmVlLXN1cmZlci1hc2NpaS1yZWFkLW1lc2giLG49ZT8ud2ViV29ya2VyO249PT12b2lkIDAmJihuPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkIsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBkKHAscix0LG8se3BpcGVsaW5lQmFzZVVybDpRKCkscGlwZWxpbmVXb3JrZXJVcmw6RSgpLHdlYldvcmtlcjpuLG5vQ29weTplPy5ub0NvcHl9KTtpZihCIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsbWVzaDpsWzFdPy5kYXRhfX12YXIgYmU9QW87YXN5bmMgZnVuY3Rpb24gZW8oQSxlLHQ9e30pe2xldCBpPVt7dHlwZTp1Lkpzb25Db21wYXRpYmxlfSx7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6dS5NZXNoLGRhdGE6QX1dLHI9W107ci5wdXNoKCIwIiksci5wdXNoKCIwIik7bGV0IGM9ZTtyLnB1c2goYyksci5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZyLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmci5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgcD0iZnJlZS1zdXJmZXItYXNjaWktd3JpdGUtbWVzaCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6bFsxXT8uZGF0YX19dmFyIGtlPWVvO2FzeW5jIGZ1bmN0aW9uIHRvKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuTWVzaH1dLGk9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2k9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fWxldCBvPVt7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTppfV0scj1bXSxhPWkucGF0aDtyLnB1c2goYSksci5wdXNoKCIwIiksci5wdXNoKCIxIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iZnJlZS1zdXJmZXItYmluYXJ5LXJlYWQtbWVzaCIsbj1lPy53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLHQsbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxtZXNoOmxbMV0/LmRhdGF9fXZhciBSZT10bzthc3luYyBmdW5jdGlvbiBybyhBLGUsdD17fSl7bGV0IGk9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTp1Lk1lc2gsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJmcmVlLXN1cmZlci1iaW5hcnktd3JpdGUtbWVzaCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6bFsxXT8uZGF0YX19dmFyIEZlPXJvO3ZhciBpbz1uZXcgTWFwKFtbInZ0ayIsW2dlLHBlXV0sWyJvYmoiLFt1ZSxmZV1dLFsic3RsIixbQmUsY2VdXSxbIm9mZiIsW0NlLG1lXV0sWyJ3YXNtIixbRWUsZGVdXSxbIndhc20tenN0IixbUWUseWVdXSxbInN3YyIsW2hlLHdlXV0sWyJieXUiLFtEZSxTZV1dLFsiZnJlZS1zdXJmZXItYXNjaWkiLFtiZSxrZV1dLFsiZnJlZS1zdXJmZXItYmluYXJ5IixbUmUsRmVdXV0pLGVBPWlvO2FzeW5jIGZ1bmN0aW9uIG9vKEEsZT17fSl7bGV0IHQ9QS50eXBlPz8iIixpPUEubmFtZT8/QS5wYXRoPz8iZmlsZU5hbWUiLG89TShpKS50b0xvd2VyQ2FzZSgpLHI9ZT8ud2ViV29ya2VyLGE9QTtpZihBIGluc3RhbmNlb2YgQmxvYil7bGV0IEk9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2E9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoSSl9fWxldCBnPW51bGw7aWYodCYmJC5oYXModCkpZz0kLmdldCh0KTtlbHNlIGlmKEouaGFzKG8pKWc9Si5nZXQobyk7ZWxzZSBmb3IobGV0IEkgb2YgZUEudmFsdWVzKCkpaWYoSVswXSE9PW51bGwpe2xldHt3ZWJXb3JrZXI6bCxjb3VsZFJlYWQ6QyxtZXNoOm19PWF3YWl0IElbMF0oe3BhdGg6YS5wYXRoLGRhdGE6YS5kYXRhLnNsaWNlKCl9LHtpbmZvcm1hdGlvbk9ubHk6ZS5pbmZvcm1hdGlvbk9ubHksd2ViV29ya2VyOnIsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKHI9bCxDKXJldHVybnt3ZWJXb3JrZXI6cixtZXNoOm19fWlmKCFnKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIraSk7bGV0IHA9ZUEuZ2V0KGcpWzBdLHt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6cyxtZXNoOkJ9PWF3YWl0IHAoYSx7aW5mb3JtYXRpb25Pbmx5OmUuaW5mb3JtYXRpb25Pbmx5LHdlYldvcmtlcjpyLG5vQ29weTplPy5ub0NvcHl9KTtpZihyPW4sIXMpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCByZWFkOiAiK2kpO3JldHVybnt3ZWJXb3JrZXI6cixtZXNoOkJ9fXZhciBubz1vbzthc3luYyBmdW5jdGlvbiBhbyhBLGUsdD17fSl7bGV0IGk9QSxvPXQubWltZVR5cGUscj1NKGUpLnRvTG93ZXJDYXNlKCksYT10LndlYldvcmtlcixnPW51bGw7aWYodHlwZW9mIG88InUiJiYkLmhhcyhvKSlnPSQuZ2V0KG8pO2Vsc2UgaWYoSi5oYXMocikpZz1KLmdldChyKTtlbHNlIGZvcihsZXQgbCBvZiBlQS52YWx1ZXMoKSlpZihsWzFdIT09bnVsbCl7bGV0e3dlYldvcmtlcjpDLGNvdWxkV3JpdGU6bSxzZXJpYWxpemVkTWVzaDp3fT1hd2FpdCBsWzFdKGksZSx0KTtpZihhPUMsbSlyZXR1cm57d2ViV29ya2VyOmEsc2VyaWFsaXplZE1lc2g6d319aWYoIWcpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIElPIGZvcjogIitlKTtsZXQgcD1lQS5nZXQoZylbMV0se3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6cyxzZXJpYWxpemVkTWVzaDpCfT1hd2FpdCBwKGksZSx0KTtpZihhPW4sIXMpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCB3cml0ZTogIitlKTtyZXR1cm57d2ViV29ya2VyOmEsc2VyaWFsaXplZE1lc2g6Qn19dmFyIHNvPWFvO3ZhciBJbz1uZXcgTWFwKFtdKSx0QT1Jbzthc3luYyBmdW5jdGlvbiBsbyhBLGU9e30pe2xldCB0PVt7dHlwZTp1Lkpzb25Db21wYXRpYmxlfSx7dHlwZTp1LlBvaW50U2V0fV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJ2dGstcG9seS1kYXRhLXJlYWQtcG9pbnQtc2V0IixuPWU/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsdCxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLHBvaW50U2V0OmxbMV0/LmRhdGF9fXZhciBQZT1sbzthc3luYyBmdW5jdGlvbiBnbyhBLGUsdD17fSl7bGV0IGk9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTp1LlBvaW50U2V0LGRhdGE6QX1dLHI9W107ci5wdXNoKCIwIiksci5wdXNoKCIwIik7bGV0IGM9ZTtyLnB1c2goYyksci5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZyLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmci5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgcD0idnRrLXBvbHktZGF0YS13cml0ZS1wb2ludC1zZXQiLG49dD8ud2ViV29ya2VyO249PT12b2lkIDAmJihuPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkIsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBkKHAscixpLG8se3BpcGVsaW5lQmFzZVVybDpRKCkscGlwZWxpbmVXb3JrZXJVcmw6RSgpLHdlYldvcmtlcjpuLG5vQ29weTp0Py5ub0NvcHl9KTtpZihCIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRQb2ludFNldDpsWzFdPy5kYXRhfX12YXIgV2U9Z287YXN5bmMgZnVuY3Rpb24gcG8oQSxlPXt9KXtsZXQgdD1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5Qb2ludFNldH1dLGk9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IG09YXdhaXQgQS5hcnJheUJ1ZmZlcigpO2k9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkobSl9fWxldCBvPVt7dHlwZTp1LkJpbmFyeUZpbGUsZGF0YTppfV0scj1bXSxhPWkucGF0aDtyLnB1c2goYSksci5wdXNoKCIwIiksci5wdXNoKCIxIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ib2JqLXJlYWQtcG9pbnQtc2V0IixuPWU/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsdCxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6ZT8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLHBvaW50U2V0OmxbMV0/LmRhdGF9fXZhciBVZT1wbzthc3luYyBmdW5jdGlvbiB1byhBLGUsdD17fSl7bGV0IGk9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTp1LlBvaW50U2V0LGRhdGE6QX1dLHI9W107ci5wdXNoKCIwIiksci5wdXNoKCIwIik7bGV0IGM9ZTtyLnB1c2goYyksci5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmci5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZyLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmci5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgcD0ib2JqLXdyaXRlLXBvaW50LXNldCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZFBvaW50U2V0OmxbMV0/LmRhdGF9fXZhciBOZT11bzthc3luYyBmdW5jdGlvbiBmbyhBLGU9e30pe2xldCB0PVt7dHlwZTp1Lkpzb25Db21wYXRpYmxlfSx7dHlwZTp1LlBvaW50U2V0fV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJvZmYtcmVhZC1wb2ludC1zZXQiLG49ZT8ud2ViV29ya2VyO249PT12b2lkIDAmJihuPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkIsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBkKHAscix0LG8se3BpcGVsaW5lQmFzZVVybDpRKCkscGlwZWxpbmVXb3JrZXJVcmw6RSgpLHdlYldvcmtlcjpuLG5vQ29weTplPy5ub0NvcHl9KTtpZihCIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEscG9pbnRTZXQ6bFsxXT8uZGF0YX19dmFyIE9lPWZvO2FzeW5jIGZ1bmN0aW9uIEJvKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuUG9pbnRTZXQsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJvZmYtd3JpdGUtcG9pbnQtc2V0IixuPXQ/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsaSxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6dD8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkUG9pbnRTZXQ6bFsxXT8uZGF0YX19dmFyIE1lPUJvO2FzeW5jIGZ1bmN0aW9uIGNvKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnUuUG9pbnRTZXR9XSxpPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBtPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtpPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KG0pfX1sZXQgbz1be3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6aX1dLHI9W10sYT1pLnBhdGg7ci5wdXNoKGEpLHIucHVzaCgiMCIpLHIucHVzaCgiMSIpLHIucHVzaCgiLS1tZW1vcnktaW8iKSxlLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJnIucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Indhc20tcmVhZC1wb2ludC1zZXQiLG49ZT8ud2ViV29ya2VyO249PT12b2lkIDAmJihuPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkIsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBkKHAscix0LG8se3BpcGVsaW5lQmFzZVVybDpRKCkscGlwZWxpbmVXb3JrZXJVcmw6RSgpLHdlYldvcmtlcjpuLG5vQ29weTplPy5ub0NvcHl9KTtpZihCIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEscG9pbnRTZXQ6bFsxXT8uZGF0YX19dmFyIHhlPWNvO2FzeW5jIGZ1bmN0aW9uIENvKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuUG9pbnRTZXQsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJ3YXNtLXdyaXRlLXBvaW50LXNldCIsbj10Py53ZWJXb3JrZXI7bj09PXZvaWQgMCYmKG49YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6QixzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IGQocCxyLGksbyx7cGlwZWxpbmVCYXNlVXJsOlEoKSxwaXBlbGluZVdvcmtlclVybDpFKCksd2ViV29ya2VyOm4sbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEIhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZFBvaW50U2V0OmxbMV0/LmRhdGF9fXZhciBUZT1Dbzthc3luYyBmdW5jdGlvbiBtbyhBLGU9e30pe2xldCB0PVt7dHlwZTp1Lkpzb25Db21wYXRpYmxlfSx7dHlwZTp1LlBvaW50U2V0fV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgbT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShtKX19bGV0IG89W3t0eXBlOnUuQmluYXJ5RmlsZSxkYXRhOml9XSxyPVtdLGE9aS5wYXRoO3IucHVzaChhKSxyLnB1c2goIjAiKSxyLnB1c2goIjEiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJ3YXNtLXpzdGQtcmVhZC1wb2ludC1zZXQiLG49ZT8ud2ViV29ya2VyO249PT12b2lkIDAmJihuPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkIsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBkKHAscix0LG8se3BpcGVsaW5lQmFzZVVybDpRKCkscGlwZWxpbmVXb3JrZXJVcmw6RSgpLHdlYldvcmtlcjpuLG5vQ29weTplPy5ub0NvcHl9KTtpZihCIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEscG9pbnRTZXQ6bFsxXT8uZGF0YX19dmFyIEdlPW1vO2FzeW5jIGZ1bmN0aW9uIEVvKEEsZSx0PXt9KXtsZXQgaT1be3R5cGU6dS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6dS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnUuUG9pbnRTZXQsZGF0YTpBfV0scj1bXTtyLnB1c2goIjAiKSxyLnB1c2goIjAiKTtsZXQgYz1lO3IucHVzaChjKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZyLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJnIucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZyLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCBwPSJ3YXNtLXpzdGQtd3JpdGUtcG9pbnQtc2V0IixuPXQ/LndlYldvcmtlcjtuPT09dm9pZCAwJiYobj1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgZChwLHIsaSxvLHtwaXBlbGluZUJhc2VVcmw6USgpLHBpcGVsaW5lV29ya2VyVXJsOkUoKSx3ZWJXb3JrZXI6bixub0NvcHk6dD8ubm9Db3B5fSk7aWYoQiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkUG9pbnRTZXQ6bFsxXT8uZGF0YX19dmFyIExlPUVvO3ZhciBRbz1uZXcgTWFwKFtbInZ0ayIsW1BlLFdlXV0sWyJvYmoiLFtVZSxOZV1dLFsib2ZmIixbT2UsTWVdXSxbIndhc20iLFt4ZSxUZV1dLFsid2FzbS16c3QiLFtHZSxMZV1dXSksckE9UW87YXN5bmMgZnVuY3Rpb24geW8oQSxlPXt9KXtsZXQgdD1BLnR5cGU/PyIiLGk9QS5uYW1lPz9BLnBhdGg/PyJmaWxlTmFtZSIsbz1NKGkpLnRvTG93ZXJDYXNlKCkscj1lPy53ZWJXb3JrZXIsYT1BO2lmKEEgaW5zdGFuY2VvZiBCbG9iKXtsZXQgST1hd2FpdCBBLmFycmF5QnVmZmVyKCk7YT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShJKX19bGV0IGc9bnVsbDtpZih0JiZ0QS5oYXModCkpZz10QS5nZXQodCk7ZWxzZSBpZihILmhhcyhvKSlnPUguZ2V0KG8pO2Vsc2UgZm9yKGxldCBJIG9mIHJBLnZhbHVlcygpKWlmKElbMF0hPT1udWxsKXtsZXR7d2ViV29ya2VyOmwsY291bGRSZWFkOkMscG9pbnRTZXQ6bX09YXdhaXQgSVswXSh7cGF0aDphLnBhdGgsZGF0YTphLmRhdGEuc2xpY2UoKX0se2luZm9ybWF0aW9uT25seTplLmluZm9ybWF0aW9uT25seSx3ZWJXb3JrZXI6cixub0NvcHk6ZT8ubm9Db3B5fSk7aWYocj1sLEMpcmV0dXJue3dlYldvcmtlcjpyLHBvaW50U2V0Om19fWlmKCFnKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIraSk7bGV0IHA9ckEuZ2V0KGcpWzBdLHt3ZWJXb3JrZXI6bixjb3VsZFJlYWQ6cyxwb2ludFNldDpCfT1hd2FpdCBwKGEse2luZm9ybWF0aW9uT25seTplLmluZm9ybWF0aW9uT25seSx3ZWJXb3JrZXI6cixub0NvcHk6ZT8ubm9Db3B5fSk7aWYocj1uLCFzKXRocm93IEVycm9yKCJDb3VsZCBub3QgcmVhZDogIitpKTtyZXR1cm57d2ViV29ya2VyOnIscG9pbnRTZXQ6Qn19dmFyIGhvPXlvO2FzeW5jIGZ1bmN0aW9uIHdvKEEsZSx0PXt9KXtsZXQgaT1BLG89dC5taW1lVHlwZSxyPU0oZSkudG9Mb3dlckNhc2UoKSxhPXQud2ViV29ya2VyLGc9bnVsbDtpZih0eXBlb2YgbzwidSImJnRBLmhhcyhvKSlnPXRBLmdldChvKTtlbHNlIGlmKEguaGFzKHIpKWc9SC5nZXQocik7ZWxzZSBmb3IobGV0IGwgb2YgckEudmFsdWVzKCkpaWYobFsxXSE9PW51bGwpe2xldHt3ZWJXb3JrZXI6Qyxjb3VsZFdyaXRlOm0sc2VyaWFsaXplZFBvaW50U2V0Ond9PWF3YWl0IGxbMV0oaSxlLHQpO2lmKGE9QyxtKXJldHVybnt3ZWJXb3JrZXI6YSxzZXJpYWxpemVkUG9pbnRTZXQ6d319aWYoIWcpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIElPIGZvcjogIitlKTtsZXQgcD1yQS5nZXQoZylbMV0se3dlYldvcmtlcjpuLGNvdWxkV3JpdGU6cyxzZXJpYWxpemVkUG9pbnRTZXQ6Qn09YXdhaXQgcChpLGUsdCk7aWYoYT1uLCFzKXRocm93IEVycm9yKCJDb3VsZCBub3Qgd3JpdGU6ICIrZSk7cmV0dXJue3dlYldvcmtlcjphLHNlcmlhbGl6ZWRQb2ludFNldDpCfX12YXIgRG89d287dmFyIHp0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciBJST1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGVJPShBLHQpPT57Zm9yKHZhciBJIGluIHQpSUkoQSxJLHtnZXQ6dFtJXSxlbnVtZXJhYmxlOiEwfSl9O3ZhciB2QT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxnST1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxyST1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IikscEE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGVBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSwkQT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixvST17Y2FuSGFuZGxlOkE9PiRBKEEpJiZBW3ZBXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOnQscG9ydDI6SX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBpQShBLHQpLFtJLFtJXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksbkkoQSl9fSxpST17Y2FuSGFuZGxlOkE9PiRBKEEpJiZlQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCB0O3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/dD17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OnQ9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW3QsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sQXQ9bmV3IE1hcChbWyJwcm94eSIsb0ldLFsidGhyb3ciLGlJXV0pO2Z1bmN0aW9uIENJKEEsdCl7Zm9yKGxldCBJIG9mIEEpaWYodD09PUl8fEk9PT0iKiJ8fEkgaW5zdGFuY2VvZiBSZWdFeHAmJkkudGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpQShBLHQ9Z2xvYmFsVGhpcyxJPVsiKiJdKXt0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGUoZyl7aWYoIWd8fCFnLmRhdGEpcmV0dXJuO2lmKCFDSShJLGcub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7Zy5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOnIsdHlwZTpvLHBhdGg6bn09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sZy5kYXRhKSxhPShnLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKGIpLFE7dHJ5e2xldCBCPW4uc2xpY2UoMCwtMSkucmVkdWNlKChmLHMpPT5mW3NdLEEpLGk9bi5yZWR1Y2UoKGYscyk9PmZbc10sQSk7c3dpdGNoKG8pe2Nhc2UiR0VUIjpRPWk7YnJlYWs7Y2FzZSJTRVQiOkJbbi5zbGljZSgtMSlbMF1dPWIoZy5kYXRhLnZhbHVlKSxRPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOlE9aS5hcHBseShCLGEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IGkoLi4uYSk7UT1hSShmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6c309bmV3IE1lc3NhZ2VDaGFubmVsO2lBKEEscyksUT1GQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpRPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goQil7UT17dmFsdWU6QixbZUFdOjB9fVByb21pc2UucmVzb2x2ZShRKS5jYXRjaChCPT4oe3ZhbHVlOkIsW2VBXTowfSkpLnRoZW4oQj0+e2xldFtpLGZdPW9BKEIpO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGkpLHtpZDpyfSksZiksbz09PSJSRUxFQVNFIiYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZSksdHQodCkscEEgaW4gQSYmdHlwZW9mIEFbcEFdPT0iZnVuY3Rpb24iJiZBW3BBXSgpKX0pLmNhdGNoKEI9PntsZXRbaSxmXT1vQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2VBXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saSkse2lkOnJ9KSxmKX0pfSksdC5zdGFydCYmdC5zdGFydCgpfWZ1bmN0aW9uIEJJKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIHR0KEEpe0JJKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gbkkoQSx0KXtyZXR1cm4gU0EoQSxbXSx0KX1mdW5jdGlvbiBJQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gSXQoQSl7cmV0dXJuIHEoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57dHQoQSl9KX12YXIgZ0E9bmV3IFdlYWtNYXAsckE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IHQ9KGdBLmdldChBKXx8MCktMTtnQS5zZXQoQSx0KSx0PT09MCYmSXQoQSl9KTtmdW5jdGlvbiBzSShBLHQpe2xldCBJPShnQS5nZXQodCl8fDApKzE7Z0Euc2V0KHQsSSksckEmJnJBLnJlZ2lzdGVyKEEsdCxBKX1mdW5jdGlvbiBRSShBKXtyQSYmckEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBTQShBLHQ9W10sST1mdW5jdGlvbigpe30pe2xldCBlPSExLGc9bmV3IFByb3h5KEkse2dldChyLG8pe2lmKElBKGUpLG89PT1ySSlyZXR1cm4oKT0+e1FJKGcpLEl0KEEpLGU9ITB9O2lmKG89PT0idGhlbiIpe2lmKHQubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+Z307bGV0IG49cShBLHt0eXBlOiJHRVQiLHBhdGg6dC5tYXAoYT0+YS50b1N0cmluZygpKX0pLnRoZW4oYik7cmV0dXJuIG4udGhlbi5iaW5kKG4pfXJldHVybiBTQShBLFsuLi50LG9dKX0sc2V0KHIsbyxuKXtJQShlKTtsZXRbYSxRXT1vQShuKTtyZXR1cm4gcShBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnQsb10ubWFwKEI9PkIudG9TdHJpbmcoKSksdmFsdWU6YX0sUSkudGhlbihiKX0sYXBwbHkocixvLG4pe0lBKGUpO2xldCBhPXRbdC5sZW5ndGgtMV07aWYoYT09PWdJKXJldHVybiBxKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oYik7aWYoYT09PSJiaW5kIilyZXR1cm4gU0EoQSx0LnNsaWNlKDAsLTEpKTtsZXRbUSxCXT1fQShuKTtyZXR1cm4gcShBLHt0eXBlOiJBUFBMWSIscGF0aDp0Lm1hcChpPT5pLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpRfSxCKS50aGVuKGIpfSxjb25zdHJ1Y3QocixvKXtJQShlKTtsZXRbbixhXT1fQShvKTtyZXR1cm4gcShBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6dC5tYXAoUT0+US50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6bn0sYSkudGhlbihiKX19KTtyZXR1cm4gc0koZyxBKSxnfWZ1bmN0aW9uIEVJKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIF9BKEEpe2xldCB0PUEubWFwKG9BKTtyZXR1cm5bdC5tYXAoST0+SVswXSksRUkodC5tYXAoST0+SVsxXSkpXX12YXIgZXQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRkEoQSx0KXtyZXR1cm4gZXQuc2V0KEEsdCksQX1mdW5jdGlvbiBhSShBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbdkFdOiEwfSl9ZnVuY3Rpb24gb0EoQSl7Zm9yKGxldFt0LEldb2YgQXQpaWYoSS5jYW5IYW5kbGUoQSkpe2xldFtlLGddPUkuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTp0LHZhbHVlOmV9LGddfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxldC5nZXQoQSl8fFtdXX1mdW5jdGlvbiBiKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEF0LmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gcShBLHQsSSl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntsZXQgZz1jSSgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihvKXshby5kYXRhfHwhby5kYXRhLmlkfHxvLmRhdGEuaWQhPT1nfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxlKG8uZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6Z30sdCksSSl9KX1mdW5jdGlvbiBjSSgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gVyhBLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOmZJfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpVQX09T2JqZWN0LEJBPShBPT50PT57bGV0IEk9ZkkuY2FsbCh0KTtyZXR1cm4gQVtJXXx8KEFbSV09SS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLFU9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLHQ9PkJBKHQpPT09QSksbkE9QT0+dD0+dHlwZW9mIHQ9PT1BLHtpc0FycmF5Okt9PUFycmF5LFo9bkEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGxJKEEpe3JldHVybiBBIT09bnVsbCYmIVooQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWihBLmNvbnN0cnVjdG9yKSYmRihBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgaXQ9VSgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBESShBKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOnQ9QSYmQS5idWZmZXImJml0KEEuYnVmZmVyKSx0fXZhciB1ST1uQSgic3RyaW5nIiksRj1uQSgiZnVuY3Rpb24iKSxDdD1uQSgibnVtYmVyIiksc0E9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixoST1BPT5BPT09ITB8fEE9PT0hMSxDQT1BPT57aWYoQkEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1VQShBKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxkST1VKCJEYXRlIikseUk9VSgiRmlsZSIpLHdJPVUoIkJsb2IiKSxtST1VKCJGaWxlTGlzdCIpLHBJPUE9PnNBKEEpJiZGKEEucGlwZSksU0k9QT0+e2xldCB0O3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fEYoQS5hcHBlbmQpJiYoKHQ9QkEoQSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZGKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LEZJPVUoIlVSTFNlYXJjaFBhcmFtcyIpLFJJPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBWKEEsdCx7YWxsT3duS2V5czpJPSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IGUsZztpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSksSyhBKSlmb3IoZT0wLGc9QS5sZW5ndGg7ZTxnO2UrKyl0LmNhbGwobnVsbCxBW2VdLGUsQSk7ZWxzZXtsZXQgcj1JP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG89ci5sZW5ndGgsbjtmb3IoZT0wO2U8bztlKyspbj1yW2VdLHQuY2FsbChudWxsLEFbbl0sbixBKX19ZnVuY3Rpb24gQnQoQSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgST1PYmplY3Qua2V5cyhBKSxlPUkubGVuZ3RoLGc7Zm9yKDtlLS0gPjA7KWlmKGc9SVtlXSx0PT09Zy50b0xvd2VyQ2FzZSgpKXJldHVybiBnO3JldHVybiBudWxsfXZhciBudD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLHN0PUE9PiFaKEEpJiZBIT09bnQ7ZnVuY3Rpb24gTkEoKXtsZXR7Y2FzZWxlc3M6QX09c3QodGhpcykmJnRoaXN8fHt9LHQ9e30sST0oZSxnKT0+e2xldCByPUEmJkJ0KHQsZyl8fGc7Q0EodFtyXSkmJkNBKGUpP3Rbcl09TkEodFtyXSxlKTpDQShlKT90W3JdPU5BKHt9LGUpOksoZSk/dFtyXT1lLnNsaWNlKCk6dFtyXT1lfTtmb3IobGV0IGU9MCxnPWFyZ3VtZW50cy5sZW5ndGg7ZTxnO2UrKylhcmd1bWVudHNbZV0mJlYoYXJndW1lbnRzW2VdLEkpO3JldHVybiB0fXZhciBOST0oQSx0LEkse2FsbE93bktleXM6ZX09e30pPT4oVih0LChnLHIpPT57SSYmRihnKT9BW3JdPVcoZyxJKTpBW3JdPWd9LHthbGxPd25LZXlzOmV9KSxBKSxVST1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLEdJPShBLHQsSSxlKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsZSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTp0LnByb3RvdHlwZX0pLEkmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsSSl9LGtJPShBLHQsSSxlKT0+e2xldCBnLHIsbyxuPXt9O2lmKHQ9dHx8e30sQT09bnVsbClyZXR1cm4gdDtkb3tmb3IoZz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxyPWcubGVuZ3RoO3ItLSA+MDspbz1nW3JdLCghZXx8ZShvLEEsdCkpJiYhbltvXSYmKHRbb109QVtvXSxuW29dPSEwKTtBPUkhPT0hMSYmVUEoQSl9d2hpbGUoQSYmKCFJfHxJKEEsdCkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LExJPShBLHQsSSk9PntBPVN0cmluZyhBKSwoST09PXZvaWQgMHx8ST5BLmxlbmd0aCkmJihJPUEubGVuZ3RoKSxJLT10Lmxlbmd0aDtsZXQgZT1BLmluZGV4T2YodCxJKTtyZXR1cm4gZSE9PS0xJiZlPT09SX0sSkk9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKEsoQSkpcmV0dXJuIEE7bGV0IHQ9QS5sZW5ndGg7aWYoIUN0KHQpKXJldHVybiBudWxsO2xldCBJPW5ldyBBcnJheSh0KTtmb3IoO3QtLSA+MDspSVt0XT1BW3RdO3JldHVybiBJfSxIST0oQT0+dD0+QSYmdCBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmVUEoVWludDhBcnJheSkpLFlJPShBLHQpPT57bGV0IGU9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxnO2Zvcig7KGc9ZS5uZXh0KCkpJiYhZy5kb25lOyl7bGV0IHI9Zy52YWx1ZTt0LmNhbGwoQSxyWzBdLHJbMV0pfX0sYkk9KEEsdCk9PntsZXQgSSxlPVtdO2Zvcig7KEk9QS5leGVjKHQpKSE9PW51bGw7KWUucHVzaChJKTtyZXR1cm4gZX0sTUk9VSgiSFRNTEZvcm1FbGVtZW50IikscUk9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24oSSxlLGcpe3JldHVybiBlLnRvVXBwZXJDYXNlKCkrZ30pLHJ0PSgoe2hhc093blByb3BlcnR5OkF9KT0+KHQsSSk9PkEuY2FsbCh0LEkpKShPYmplY3QucHJvdG90eXBlKSxLST1VKCJSZWdFeHAiKSxRdD0oQSx0KT0+e2xldCBJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLGU9e307VihJLChnLHIpPT57bGV0IG87KG89dChnLHIsQSkpIT09ITEmJihlW3JdPW98fGcpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxlKX0sT0k9QT0+e1F0KEEsKHQsSSk9PntpZihGKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoSSkhPT0tMSlyZXR1cm4hMTtsZXQgZT1BW0ldO2lmKEYoZSkpe2lmKHQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdCl7dC53cml0YWJsZT0hMTtyZXR1cm59dC5zZXR8fCh0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrSSsiXCciKX0pfX0pfSxUST0oQSx0KT0+e2xldCBJPXt9LGU9Zz0+e2cuZm9yRWFjaChyPT57SVtyXT0hMH0pfTtyZXR1cm4gSyhBKT9lKEEpOmUoU3RyaW5nKEEpLnNwbGl0KHQpKSxJfSxQST0oKT0+e30seEk9KEEsdCk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOnQpLFJBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsb3Q9IjAxMjM0NTY3ODkiLEV0PXtESUdJVDpvdCxBTFBIQTpSQSxBTFBIQV9ESUdJVDpSQStSQS50b1VwcGVyQ2FzZSgpK290fSxqST0oQT0xNix0PUV0LkFMUEhBX0RJR0lUKT0+e2xldCBJPSIiLHtsZW5ndGg6ZX09dDtmb3IoO0EtLTspSSs9dFtNYXRoLnJhbmRvbSgpKmV8MF07cmV0dXJuIEl9O2Z1bmN0aW9uIFdJKEEpe3JldHVybiEhKEEmJkYoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBaST1BPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxJPShlLGcpPT57aWYoc0EoZSkpe2lmKHQuaW5kZXhPZihlKT49MClyZXR1cm47aWYoISgidG9KU09OImluIGUpKXt0W2ddPWU7bGV0IHI9SyhlKT9bXTp7fTtyZXR1cm4gVihlLChvLG4pPT57bGV0IGE9SShvLGcrMSk7IVooYSkmJihyW25dPWEpfSksdFtnXT12b2lkIDAscn19cmV0dXJuIGV9O3JldHVybiBJKEEsMCl9LFZJPVUoIkFzeW5jRnVuY3Rpb24iKSxYST1BPT5BJiYoc0EoQSl8fEYoQSkpJiZGKEEudGhlbikmJkYoQS5jYXRjaCksQz17aXNBcnJheTpLLGlzQXJyYXlCdWZmZXI6aXQsaXNCdWZmZXI6bEksaXNGb3JtRGF0YTpTSSxpc0FycmF5QnVmZmVyVmlldzpESSxpc1N0cmluZzp1SSxpc051bWJlcjpDdCxpc0Jvb2xlYW46aEksaXNPYmplY3Q6c0EsaXNQbGFpbk9iamVjdDpDQSxpc1VuZGVmaW5lZDpaLGlzRGF0ZTpkSSxpc0ZpbGU6eUksaXNCbG9iOndJLGlzUmVnRXhwOktJLGlzRnVuY3Rpb246Rixpc1N0cmVhbTpwSSxpc1VSTFNlYXJjaFBhcmFtczpGSSxpc1R5cGVkQXJyYXk6SEksaXNGaWxlTGlzdDptSSxmb3JFYWNoOlYsbWVyZ2U6TkEsZXh0ZW5kOk5JLHRyaW06Ukksc3RyaXBCT006VUksaW5oZXJpdHM6R0ksdG9GbGF0T2JqZWN0OmtJLGtpbmRPZjpCQSxraW5kT2ZUZXN0OlUsZW5kc1dpdGg6TEksdG9BcnJheTpKSSxmb3JFYWNoRW50cnk6WUksbWF0Y2hBbGw6YkksaXNIVE1MRm9ybTpNSSxoYXNPd25Qcm9wZXJ0eTpydCxoYXNPd25Qcm9wOnJ0LHJlZHVjZURlc2NyaXB0b3JzOlF0LGZyZWV6ZU1ldGhvZHM6T0ksdG9PYmplY3RTZXQ6VEksdG9DYW1lbENhc2U6cUksbm9vcDpQSSx0b0Zpbml0ZU51bWJlcjp4SSxmaW5kS2V5OkJ0LGdsb2JhbDpudCxpc0NvbnRleHREZWZpbmVkOnN0LEFMUEhBQkVUOkV0LGdlbmVyYXRlU3RyaW5nOmpJLGlzU3BlY0NvbXBsaWFudEZvcm06V0ksdG9KU09OT2JqZWN0OlpJLGlzQXN5bmNGbjpWSSxpc1RoZW5hYmxlOlhJfTtmdW5jdGlvbiBPKEEsdCxJLGUsZyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIix0JiYodGhpcy5jb2RlPXQpLEkmJih0aGlzLmNvbmZpZz1JKSxlJiYodGhpcy5yZXF1ZXN0PWUpLGcmJih0aGlzLnJlc3BvbnNlPWcpfUMuaW5oZXJpdHMoTyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGF0PU8ucHJvdG90eXBlLGN0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e2N0W0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sY3QpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtPLmZyb209KEEsdCxJLGUsZyxyKT0+e2xldCBvPU9iamVjdC5jcmVhdGUoYXQpO3JldHVybiBDLnRvRmxhdE9iamVjdChBLG8sZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1FcnJvci5wcm90b3R5cGV9LG49Pm4hPT0iaXNBeGlvc0Vycm9yIiksTy5jYWxsKG8sQS5tZXNzYWdlLHQsSSxlLGcpLG8uY2F1c2U9QSxvLm5hbWU9QS5uYW1lLHImJk9iamVjdC5hc3NpZ24obyxyKSxvfTt2YXIgbD1PO3ZhciBRQT1udWxsO2Z1bmN0aW9uIEdBKEEpe3JldHVybiBDLmlzUGxhaW5PYmplY3QoQSl8fEMuaXNBcnJheShBKX1mdW5jdGlvbiBsdChBKXtyZXR1cm4gQy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBmdChBLHQsSSl7cmV0dXJuIEE/QS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKGcscil7cmV0dXJuIGc9bHQoZyksIUkmJnI/IlsiK2crIl0iOmd9KS5qb2luKEk/Ii4iOiIiKTp0fWZ1bmN0aW9uIHpJKEEpe3JldHVybiBDLmlzQXJyYXkoQSkmJiFBLnNvbWUoR0EpfXZhciBfST1DLnRvRmxhdE9iamVjdChDLHt9LG51bGwsZnVuY3Rpb24odCl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KHQpfSk7ZnVuY3Rpb24gdkkoQSx0LEkpe2lmKCFDLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9dHx8bmV3KFFBfHxGb3JtRGF0YSksST1DLnRvRmxhdE9iamVjdChJLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyx1KXtyZXR1cm4hQy5pc1VuZGVmaW5lZCh1W2NdKX0pO2xldCBlPUkubWV0YVRva2VucyxnPUkudmlzaXRvcnx8QixyPUkuZG90cyxvPUkuaW5kZXhlcyxhPShJLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkMuaXNTcGVjQ29tcGxpYW50Rm9ybSh0KTtpZighQy5pc0Z1bmN0aW9uKGcpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gUShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihDLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFhJiZDLmlzQmxvYihFKSl0aHJvdyBuZXcgbCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gQy5pc0FycmF5QnVmZmVyKEUpfHxDLmlzVHlwZWRBcnJheShFKT9hJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gQihFLGMsdSl7bGV0IHk9RTtpZihFJiYhdSYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihDLmVuZHNXaXRoKGMsInt9IikpYz1lP2M6Yy5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoQy5pc0FycmF5KEUpJiZ6SShFKXx8KEMuaXNGaWxlTGlzdChFKXx8Qy5lbmRzV2l0aChjLCJbXSIpKSYmKHk9Qy50b0FycmF5KEUpKSlyZXR1cm4gYz1sdChjKSx5LmZvckVhY2goZnVuY3Rpb24oTix0SSl7IShDLmlzVW5kZWZpbmVkKE4pfHxOPT09bnVsbCkmJnQuYXBwZW5kKG89PT0hMD9mdChbY10sdEkscik6bz09PW51bGw/YzpjKyJbXSIsUShOKSl9KSwhMX1yZXR1cm4gR0EoRSk/ITA6KHQuYXBwZW5kKGZ0KHUsYyxyKSxRKEUpKSwhMSl9bGV0IGk9W10sZj1PYmplY3QuYXNzaWduKF9JLHtkZWZhdWx0VmlzaXRvcjpCLGNvbnZlcnRWYWx1ZTpRLGlzVmlzaXRhYmxlOkdBfSk7ZnVuY3Rpb24gcyhFLGMpe2lmKCFDLmlzVW5kZWZpbmVkKEUpKXtpZihpLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO2kucHVzaChFKSxDLmZvckVhY2goRSxmdW5jdGlvbih5LFIpeyghKEMuaXNVbmRlZmluZWQoeSl8fHk9PT1udWxsKSYmZy5jYWxsKHQseSxDLmlzU3RyaW5nKFIpP1IudHJpbSgpOlIsYyxmKSk9PT0hMCYmcyh5LGM/Yy5jb25jYXQoUik6W1JdKX0pLGkucG9wKCl9fWlmKCFDLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gcyhBKSx0fXZhciBKPXZJO2Z1bmN0aW9uIER0KEEpe2xldCB0PXsiISI6IiUyNTIxIiwiXCciOiIlMjUyNyIsIigiOiIlMjUyOCIsIikiOiIlMjUyOSIsIn4iOiIlMjU3RSIsIiUyNTIwIjoiKyIsIiUyNTAwIjoiXFwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIVwnKCl+XXwlMjUyMHwlMjUwMC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gdXQoQSx0KXt0aGlzLl9wYWlycz1bXSxBJiZKKEEsdGhpcyx0KX12YXIgaHQ9dXQucHJvdG90eXBlO2h0LmFwcGVuZD1mdW5jdGlvbih0LEkpe3RoaXMuX3BhaXJzLnB1c2goW3QsSV0pfTtodC50b1N0cmluZz1mdW5jdGlvbih0KXtsZXQgST10P2Z1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcyxlLER0KX06RHQ7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihnKXtyZXR1cm4gSShnWzBdKSsiPSIrSShnWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIEVBPXV0O2Z1bmN0aW9uICRJKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTI1M0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjUyNC9nLCIkIikucmVwbGFjZSgvJTI1MkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjUyMC9nLCIrIikucmVwbGFjZSgvJTI1NUIvZ2ksIlsiKS5yZXBsYWNlKC8lMjU1RC9naSwiXSIpfWZ1bmN0aW9uIFgoQSx0LEkpe2lmKCF0KXJldHVybiBBO2xldCBlPUkmJkkuZW5jb2RlfHwkSSxnPUkmJkkuc2VyaWFsaXplLHI7aWYoZz9yPWcodCxJKTpyPUMuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyBFQSh0LEkpLnRvU3RyaW5nKGUpLHIpe2xldCBvPUEuaW5kZXhPZigiJTIzIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK3J9cmV0dXJuIEF9dmFyIGtBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UodCxJLGUpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDp0LHJlamVjdGVkOkksc3luY2hyb25vdXM6ZT9lLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ZT9lLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QodCl7dGhpcy5oYW5kbGVyc1t0XSYmKHRoaXMuaGFuZGxlcnNbdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh0KXtDLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihlKXtlIT09bnVsbCYmdChlKX0pfX0sTEE9a0E7dmFyIGFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgZHQ9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOkVBO3ZhciB5dD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIHd0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIG10PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOmR0LEZvcm1EYXRhOnl0LEJsb2I6d3R9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgSkE9e307ZUkoSkEse2hhc0Jyb3dzZXJFbnY6KCk9PnB0LGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+QWUsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT50ZX0pO3ZhciBwdD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixBZT0oQT0+cHQmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSx0ZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHc9ey4uLkpBLC4uLm10fTtmdW5jdGlvbiBIQShBLHQpe3JldHVybiBKKEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihJLGUsZyxyKXtyZXR1cm4gdy5pc05vZGUmJkMuaXNCdWZmZXIoSSk/KHRoaXMuYXBwZW5kKGUsSS50b1N0cmluZygiYmFzZTY0IikpLCExKTpyLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHQpKX1mdW5jdGlvbiBJZShBKXtyZXR1cm4gQy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csQSkubWFwKHQ9PnRbMF09PT0iW10iPyIiOnRbMV18fHRbMF0pfWZ1bmN0aW9uIGVlKEEpe2xldCB0PXt9LEk9T2JqZWN0LmtleXMoQSksZSxnPUkubGVuZ3RoLHI7Zm9yKGU9MDtlPGc7ZSsrKXI9SVtlXSx0W3JdPUFbcl07cmV0dXJuIHR9ZnVuY3Rpb24gZ2UoQSl7ZnVuY3Rpb24gdChJLGUsZyxyKXtsZXQgbz1JW3IrK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBuPU51bWJlci5pc0Zpbml0ZSgrbyksYT1yPj1JLmxlbmd0aDtyZXR1cm4gbz0hbyYmQy5pc0FycmF5KGcpP2cubGVuZ3RoOm8sYT8oQy5oYXNPd25Qcm9wKGcsbyk/Z1tvXT1bZ1tvXSxlXTpnW29dPWUsIW4pOigoIWdbb118fCFDLmlzT2JqZWN0KGdbb10pKSYmKGdbb109W10pLHQoSSxlLGdbb10scikmJkMuaXNBcnJheShnW29dKSYmKGdbb109ZWUoZ1tvXSkpLCFuKX1pZihDLmlzRm9ybURhdGEoQSkmJkMuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgST17fTtyZXR1cm4gQy5mb3JFYWNoRW50cnkoQSwoZSxnKT0+e3QoSWUoZSksZyxJLDApfSksSX1yZXR1cm4gbnVsbH12YXIgY0E9Z2U7ZnVuY3Rpb24gcmUoQSx0LEkpe2lmKEMuaXNTdHJpbmcoQSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShBKSxDLnRyaW0oQSl9Y2F0Y2goZSl7aWYoZS5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBlfXJldHVybihJfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIFlBPXt0cmFuc2l0aW9uYWw6YUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbih0LEkpe2xldCBlPUkuZ2V0Q29udGVudFR5cGUoKXx8IiIsZz1lLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxyPUMuaXNPYmplY3QodCk7aWYociYmQy5pc0hUTUxGb3JtKHQpJiYodD1uZXcgRm9ybURhdGEodCkpLEMuaXNGb3JtRGF0YSh0KSlyZXR1cm4gZz9KU09OLnN0cmluZ2lmeShjQSh0KSk6dDtpZihDLmlzQXJyYXlCdWZmZXIodCl8fEMuaXNCdWZmZXIodCl8fEMuaXNTdHJlYW0odCl8fEMuaXNGaWxlKHQpfHxDLmlzQmxvYih0KSlyZXR1cm4gdDtpZihDLmlzQXJyYXlCdWZmZXJWaWV3KHQpKXJldHVybiB0LmJ1ZmZlcjtpZihDLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBJLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLHQudG9TdHJpbmcoKTtsZXQgbjtpZihyKXtpZihlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBIQSh0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKG49Qy5pc0ZpbGVMaXN0KHQpKXx8ZS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBhPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gSihuP3siZmlsZXNbXSI6dH06dCxhJiZuZXcgYSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIHJ8fGc/KEkuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxyZSh0KSk6dH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbih0KXtsZXQgST10aGlzLnRyYW5zaXRpb25hbHx8WUEudHJhbnNpdGlvbmFsLGU9SSYmSS5mb3JjZWRKU09OUGFyc2luZyxnPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKHQmJkMuaXNTdHJpbmcodCkmJihlJiYhdGhpcy5yZXNwb25zZVR5cGV8fGcpKXtsZXQgbz0hKEkmJkkuc2lsZW50SlNPTlBhcnNpbmcpJiZnO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChuKXtpZihvKXRocm93IG4ubmFtZT09PSJTeW50YXhFcnJvciI/bC5mcm9tKG4sbC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpufX1yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Qy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntZQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFQ9WUE7dmFyIG9lPUMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksU3Q9QT0+e2xldCB0PXt9LEksZSxnO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2c9by5pbmRleE9mKCI6IiksST1vLnN1YnN0cmluZygwLGcpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGU9by5zdWJzdHJpbmcoZysxKS50cmltKCksISghSXx8dFtJXSYmb2VbSV0pJiYoST09PSJzZXQtY29va2llIj90W0ldP3RbSV0ucHVzaChlKTp0W0ldPVtlXTp0W0ldPXRbSV0/dFtJXSsiLCAiK2U6ZSl9KSx0fTt2YXIgRnQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiB6KEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOkMuaXNBcnJheShBKT9BLm1hcChmQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIGllKEEpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCksST0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLGU7Zm9yKDtlPUkuZXhlYyhBKTspdFtlWzFdXT1lWzJdO3JldHVybiB0fXZhciBDZT1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBiQShBLHQsSSxlLGcpe2lmKEMuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMsdCxJKTtpZihnJiYodD1JKSwhIUMuaXNTdHJpbmcodCkpe2lmKEMuaXNTdHJpbmcoZSkpcmV0dXJuIHQuaW5kZXhPZihlKSE9PS0xO2lmKEMuaXNSZWdFeHAoZSkpcmV0dXJuIGUudGVzdCh0KX19ZnVuY3Rpb24gQmUoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCh0LEksZSk9PkkudG9VcHBlckNhc2UoKStlKX1mdW5jdGlvbiBuZShBLHQpe2xldCBJPUMudG9DYW1lbENhc2UoIiAiK3QpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChlPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsZStJLHt2YWx1ZTpmdW5jdGlvbihnLHIsbyl7cmV0dXJuIHRoaXNbZV0uY2FsbCh0aGlzLHQsZyxyLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3QmJnRoaXMuc2V0KHQpfXNldCh0LEksZSl7bGV0IGc9dGhpcztmdW5jdGlvbiByKG4sYSxRKXtsZXQgQj16KGEpO2lmKCFCKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgaT1DLmZpbmRLZXkoZyxCKTsoIWl8fGdbaV09PT12b2lkIDB8fFE9PT0hMHx8UT09PXZvaWQgMCYmZ1tpXSE9PSExKSYmKGdbaXx8YV09ZkEobikpfWxldCBvPShuLGEpPT5DLmZvckVhY2gobiwoUSxCKT0+cihRLEIsYSkpO3JldHVybiBDLmlzUGxhaW5PYmplY3QodCl8fHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP28odCxJKTpDLmlzU3RyaW5nKHQpJiYodD10LnRyaW0oKSkmJiFDZSh0KT9vKFN0KHQpLEkpOnQhPW51bGwmJnIoSSx0LGUpLHRoaXN9Z2V0KHQsSSl7aWYodD16KHQpLHQpe2xldCBlPUMuZmluZEtleSh0aGlzLHQpO2lmKGUpe2xldCBnPXRoaXNbZV07aWYoIUkpcmV0dXJuIGc7aWYoST09PSEwKXJldHVybiBpZShnKTtpZihDLmlzRnVuY3Rpb24oSSkpcmV0dXJuIEkuY2FsbCh0aGlzLGcsZSk7aWYoQy5pc1JlZ0V4cChJKSlyZXR1cm4gSS5leGVjKGcpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXModCxJKXtpZih0PXoodCksdCl7bGV0IGU9Qy5maW5kS2V5KHRoaXMsdCk7cmV0dXJuISEoZSYmdGhpc1tlXSE9PXZvaWQgMCYmKCFJfHxiQSh0aGlzLHRoaXNbZV0sZSxJKSkpfXJldHVybiExfWRlbGV0ZSh0LEkpe2xldCBlPXRoaXMsZz0hMTtmdW5jdGlvbiByKG8pe2lmKG89eihvKSxvKXtsZXQgbj1DLmZpbmRLZXkoZSxvKTtuJiYoIUl8fGJBKGUsZVtuXSxuLEkpKSYmKGRlbGV0ZSBlW25dLGc9ITApfX1yZXR1cm4gQy5pc0FycmF5KHQpP3QuZm9yRWFjaChyKTpyKHQpLGd9Y2xlYXIodCl7bGV0IEk9T2JqZWN0LmtleXModGhpcyksZT1JLmxlbmd0aCxnPSExO2Zvcig7ZS0tOyl7bGV0IHI9SVtlXTsoIXR8fGJBKHRoaXMsdGhpc1tyXSxyLHQsITApKSYmKGRlbGV0ZSB0aGlzW3JdLGc9ITApfXJldHVybiBnfW5vcm1hbGl6ZSh0KXtsZXQgST10aGlzLGU9e307cmV0dXJuIEMuZm9yRWFjaCh0aGlzLChnLHIpPT57bGV0IG89Qy5maW5kS2V5KGUscik7aWYobyl7SVtvXT1mQShnKSxkZWxldGUgSVtyXTtyZXR1cm59bGV0IG49dD9CZShyKTpTdHJpbmcocikudHJpbSgpO24hPT1yJiZkZWxldGUgSVtyXSxJW25dPWZBKGcpLGVbbl09ITB9KSx0aGlzfWNvbmNhdCguLi50KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi50KX10b0pTT04odCl7bGV0IEk9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gQy5mb3JFYWNoKHRoaXMsKGUsZyk9PntlIT1udWxsJiZlIT09ITEmJihJW2ddPXQmJkMuaXNBcnJheShlKT9lLmpvaW4oIiwgIik6ZSl9KSxJfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFt0LEldKT0+dCsiOiAiK0kpLmpvaW4oYCUwQWApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzP3Q6bmV3IHRoaXModCl9c3RhdGljIGNvbmNhdCh0LC4uLkkpe2xldCBlPW5ldyB0aGlzKHQpO3JldHVybiBJLmZvckVhY2goZz0+ZS5zZXQoZykpLGV9c3RhdGljIGFjY2Vzc29yKHQpe2xldCBlPSh0aGlzW0Z0XT10aGlzW0Z0XT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLGc9dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gcihvKXtsZXQgbj16KG8pO2Vbbl18fChuZShnLG8pLGVbbl09ITApfXJldHVybiBDLmlzQXJyYXkodCk/dC5mb3JFYWNoKHIpOnIodCksdGhpc319O1AuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO0MucmVkdWNlRGVzY3JpcHRvcnMoUC5wcm90b3R5cGUsKHt2YWx1ZTpBfSx0KT0+e2xldCBJPXRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KGUpe3RoaXNbSV09ZX19fSk7Qy5mcmVlemVNZXRob2RzKFApO3ZhciBtPVA7ZnVuY3Rpb24gXyhBLHQpe2xldCBJPXRoaXN8fFQsZT10fHxJLGc9bS5mcm9tKGUuaGVhZGVycykscj1lLmRhdGE7cmV0dXJuIEMuZm9yRWFjaChBLGZ1bmN0aW9uKG4pe3I9bi5jYWxsKEkscixnLm5vcm1hbGl6ZSgpLHQ/dC5zdGF0dXM6dm9pZCAwKX0pLGcubm9ybWFsaXplKCkscn1mdW5jdGlvbiB2KEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gUnQoQSx0LEkpe2wuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsbC5FUlJfQ0FOQ0VMRUQsdCxJKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifUMuaW5oZXJpdHMoUnQsbCx7X19DQU5DRUxfXzohMH0pO3ZhciBIPVJ0O2Z1bmN0aW9uIE1BKEEsdCxJKXtsZXQgZT1JLmNvbmZpZy52YWxpZGF0ZVN0YXR1czshSS5zdGF0dXN8fCFlfHxlKEkuc3RhdHVzKT9BKEkpOnQobmV3IGwoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIitJLnN0YXR1cyxbbC5FUlJfQkFEX1JFUVVFU1QsbC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKEkuc3RhdHVzLzEwMCktNF0sSS5jb25maWcsSS5yZXF1ZXN0LEkpKX12YXIgTnQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsdCxJLGUsZyxyKXtsZXQgbz1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpXTtDLmlzTnVtYmVyKEkpJiZvLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShJKS50b0dNVFN0cmluZygpKSxDLmlzU3RyaW5nKGUpJiZvLnB1c2goInBhdGg9IitlKSxDLmlzU3RyaW5nKGcpJiZvLnB1c2goImRvbWFpbj0iK2cpLHI9PT0hMCYmby5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9by5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBxQShBKXtyZXR1cm4vXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdChBKX1mdW5jdGlvbiBLQShBLHQpe3JldHVybiB0P0EucmVwbGFjZSgvXFwvP1xcLyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXFwvKy8sIiIpOkF9ZnVuY3Rpb24gJChBLHQpe3JldHVybiBBJiYhcUEodCk/S0EoQSx0KTp0fXZhciBVdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksST1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksZTtmdW5jdGlvbiBnKHIpe2xldCBvPXI7cmV0dXJuIHQmJihJLnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz1JLmhyZWYpLEkuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjpJLmhyZWYscHJvdG9jb2w6SS5wcm90b2NvbD9JLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpJLmhvc3Qsc2VhcmNoOkkuc2VhcmNoP0kuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOkkuaGFzaD9JLmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOkkuaG9zdG5hbWUscG9ydDpJLnBvcnQscGF0aG5hbWU6SS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/SS5wYXRobmFtZToiLyIrSS5wYXRobmFtZX19cmV0dXJuIGU9Zyh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IG49Qy5pc1N0cmluZyhvKT9nKG8pOm87cmV0dXJuIG4ucHJvdG9jb2w9PT1lLnByb3RvY29sJiZuLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIE9BKEEpe2xldCB0PS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiB0JiZ0WzFdfHwiIn1mdW5jdGlvbiBzZShBLHQpe0E9QXx8MTA7bGV0IEk9bmV3IEFycmF5KEEpLGU9bmV3IEFycmF5KEEpLGc9MCxyPTAsbztyZXR1cm4gdD10IT09dm9pZCAwP3Q6MWUzLGZ1bmN0aW9uKGEpe2xldCBRPURhdGUubm93KCksQj1lW3JdO298fChvPVEpLElbZ109YSxlW2ddPVE7bGV0IGk9cixmPTA7Zm9yKDtpIT09ZzspZis9SVtpKytdLGk9aSVBO2lmKGc9KGcrMSklQSxnPT09ciYmKHI9KHIrMSklQSksUS1vPHQpcmV0dXJuO2xldCBzPUImJlEtQjtyZXR1cm4gcz9NYXRoLnJvdW5kKGYqMWUzL3MpOnZvaWQgMH19dmFyIEd0PXNlO2Z1bmN0aW9uIGt0KEEsdCl7bGV0IEk9MCxlPUd0KDUwLDI1MCk7cmV0dXJuIGc9PntsZXQgcj1nLmxvYWRlZCxvPWcubGVuZ3RoQ29tcHV0YWJsZT9nLnRvdGFsOnZvaWQgMCxuPXItSSxhPWUobiksUT1yPD1vO0k9cjtsZXQgQj17bG9hZGVkOnIsdG90YWw6byxwcm9ncmVzczpvP3Ivbzp2b2lkIDAsYnl0ZXM6bixyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmbyYmUT8oby1yKS9hOnZvaWQgMCxldmVudDpnfTtCW3Q/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShCKX19dmFyIFFlPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsTHQ9UWUmJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihJLGUpe2xldCBnPUEuZGF0YSxyPW0uZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOm59PUEsYTtmdW5jdGlvbiBRKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpfWxldCBCO2lmKEMuaXNGb3JtRGF0YShnKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXIuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEI9ci5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1CP0Iuc3BsaXQoIjsiKS5tYXAoeT0+eS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtyLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO3Iuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgZj0kKEEuYmFzZVVSTCxBLnVybCk7aS5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksWChmLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksITApLGkudGltZW91dD1BLnRpbWVvdXQ7ZnVuY3Rpb24gcygpe2lmKCFpKXJldHVybjtsZXQgYz1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBpJiZpLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSx5PXtkYXRhOiFvfHxvPT09InRleHQifHxvPT09Impzb24iP2kucmVzcG9uc2VUZXh0OmkucmVzcG9uc2Usc3RhdHVzOmkuc3RhdHVzLHN0YXR1c1RleHQ6aS5zdGF0dXNUZXh0LGhlYWRlcnM6Yyxjb25maWc6QSxyZXF1ZXN0Oml9O01BKGZ1bmN0aW9uKE4pe0koTiksUSgpfSxmdW5jdGlvbihOKXtlKE4pLFEoKX0seSksaT1udWxsfWlmKCJvbmxvYWRlbmQiaW4gaT9pLm9ubG9hZGVuZD1zOmkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWl8fGkucmVhZHlTdGF0ZSE9PTR8fGkuc3RhdHVzPT09MCYmIShpLnJlc3BvbnNlVVJMJiZpLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChzKX0saS5vbmFib3J0PWZ1bmN0aW9uKCl7aSYmKGUobmV3IGwoIlJlcXVlc3QgYWJvcnRlZCIsbC5FQ09OTkFCT1JURUQsQSxpKSksaT1udWxsKX0saS5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgbCgiTmV0d29yayBFcnJvciIsbC5FUlJfTkVUV09SSyxBLGkpKSxpPW51bGx9LGkub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IHU9QS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrQS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHk9QS50cmFuc2l0aW9uYWx8fGFBO0EudGltZW91dEVycm9yTWVzc2FnZSYmKHU9QS50aW1lb3V0RXJyb3JNZXNzYWdlKSxlKG5ldyBsKHUseS5jbGFyaWZ5VGltZW91dEVycm9yP2wuRVRJTUVET1VUOmwuRUNPTk5BQk9SVEVELEEsaSkpLGk9bnVsbH0sdy5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihuJiZDLmlzRnVuY3Rpb24obikmJihuPW4oQSkpLG58fG4hPT0hMSYmVXQoZikpKXtsZXQgYz1BLnhzcmZIZWFkZXJOYW1lJiZBLnhzcmZDb29raWVOYW1lJiZOdC5yZWFkKEEueHNyZkNvb2tpZU5hbWUpO2MmJnIuc2V0KEEueHNyZkhlYWRlck5hbWUsYyl9Zz09PXZvaWQgMCYmci5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBpJiZDLmZvckVhY2goci50b0pTT04oKSxmdW5jdGlvbih1LHkpe2kuc2V0UmVxdWVzdEhlYWRlcih5LHUpfSksQy5pc1VuZGVmaW5lZChBLndpdGhDcmVkZW50aWFscyl8fChpLndpdGhDcmVkZW50aWFscz0hIUEud2l0aENyZWRlbnRpYWxzKSxvJiZvIT09Impzb24iJiYoaS5yZXNwb25zZVR5cGU9QS5yZXNwb25zZVR5cGUpLHR5cGVvZiBBLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmaS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa3QoQS5vbkRvd25sb2FkUHJvZ3Jlc3MsITApKSx0eXBlb2YgQS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZpLnVwbG9hZCYmaS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGt0KEEub25VcGxvYWRQcm9ncmVzcykpLChBLmNhbmNlbFRva2VufHxBLnNpZ25hbCkmJihhPWM9PntpJiYoZSghY3x8Yy50eXBlP25ldyBIKG51bGwsQSxpKTpjKSxpLmFib3J0KCksaT1udWxsKX0sQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYSksQS5zaWduYWwmJihBLnNpZ25hbC5hYm9ydGVkP2EoKTpBLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYSkpKTtsZXQgRT1PQShmKTtpZihFJiZ3LnByb3RvY29scy5pbmRleE9mKEUpPT09LTEpe2UobmV3IGwoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrRSsiOiIsbC5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1pLnNlbmQoZ3x8bnVsbCl9KX07dmFyIFRBPXtodHRwOlFBLHhocjpMdH07Qy5mb3JFYWNoKFRBLChBLHQpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6dH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTp0fSl9fSk7dmFyIEp0PUE9PmAtICR7QX1gLEVlPUE9PkMuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxsQT17Z2V0QWRhcHRlcjpBPT57QT1DLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDp0fT1BLEksZSxnPXt9O2ZvcihsZXQgcj0wO3I8dDtyKyspe0k9QVtyXTtsZXQgbztpZihlPUksIUVlKEkpJiYoZT1UQVsobz1TdHJpbmcoSSkpLnRvTG93ZXJDYXNlKCldLGU9PT12b2lkIDApKXRocm93IG5ldyBsKGBVbmtub3duIGFkYXB0ZXIgXCcke299XCdgKTtpZihlKWJyZWFrO2dbb3x8IiUyMyIrcl09ZX1pZighZSl7bGV0IHI9T2JqZWN0LmVudHJpZXMoZykubWFwKChbbixhXSk9PmBhZGFwdGVyICR7bn0gYCsoYT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLG89dD9yLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtyLm1hcChKdCkuam9pbihgJTBBYCk6IiAiK0p0KHJbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IGwoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gZX0sYWRhcHRlcnM6VEF9O2Z1bmN0aW9uIFBBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBIKG51bGwsQSl9ZnVuY3Rpb24gREEoQSl7cmV0dXJuIFBBKEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFQuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gUEEoQSksZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZSksZS5oZWFkZXJzPW0uZnJvbShlLmhlYWRlcnMpLGV9LGZ1bmN0aW9uKGUpe3JldHVybiB2KGUpfHwoUEEoQSksZSYmZS5yZXNwb25zZSYmKGUucmVzcG9uc2UuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUucmVzcG9uc2UpLGUucmVzcG9uc2UuaGVhZGVycz1tLmZyb20oZS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KGUpfSl9dmFyIEh0PUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIGsoQSx0KXt0PXR8fHt9O2xldCBJPXt9O2Z1bmN0aW9uIGUoUSxCLGkpe3JldHVybiBDLmlzUGxhaW5PYmplY3QoUSkmJkMuaXNQbGFpbk9iamVjdChCKT9DLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOml9LFEsQik6Qy5pc1BsYWluT2JqZWN0KEIpP0MubWVyZ2Uoe30sQik6Qy5pc0FycmF5KEIpP0Iuc2xpY2UoKTpCfWZ1bmN0aW9uIGcoUSxCLGkpe2lmKEMuaXNVbmRlZmluZWQoQikpe2lmKCFDLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRLGkpfWVsc2UgcmV0dXJuIGUoUSxCLGkpfWZ1bmN0aW9uIHIoUSxCKXtpZighQy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gZSh2b2lkIDAsQil9ZnVuY3Rpb24gbyhRLEIpe2lmKEMuaXNVbmRlZmluZWQoQikpe2lmKCFDLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRKX1lbHNlIHJldHVybiBlKHZvaWQgMCxCKX1mdW5jdGlvbiBuKFEsQixpKXtpZihpIGluIHQpcmV0dXJuIGUoUSxCKTtpZihpIGluIEEpcmV0dXJuIGUodm9pZCAwLFEpfWxldCBhPXt1cmw6cixtZXRob2Q6cixkYXRhOnIsYmFzZVVSTDpvLHRyYW5zZm9ybVJlcXVlc3Q6byx0cmFuc2Zvcm1SZXNwb25zZTpvLHBhcmFtc1NlcmlhbGl6ZXI6byx0aW1lb3V0Om8sdGltZW91dE1lc3NhZ2U6byx3aXRoQ3JlZGVudGlhbHM6byx3aXRoWFNSRlRva2VuOm8sYWRhcHRlcjpvLHJlc3BvbnNlVHlwZTpvLHhzcmZDb29raWVOYW1lOm8seHNyZkhlYWRlck5hbWU6byxvblVwbG9hZFByb2dyZXNzOm8sb25Eb3dubG9hZFByb2dyZXNzOm8sZGVjb21wcmVzczpvLG1heENvbnRlbnRMZW5ndGg6byxtYXhCb2R5TGVuZ3RoOm8sYmVmb3JlUmVkaXJlY3Q6byx0cmFuc3BvcnQ6byxodHRwQWdlbnQ6byxodHRwc0FnZW50Om8sY2FuY2VsVG9rZW46byxzb2NrZXRQYXRoOm8scmVzcG9uc2VFbmNvZGluZzpvLHZhbGlkYXRlU3RhdHVzOm4saGVhZGVyczooUSxCKT0+ZyhIdChRKSxIdChCKSwhMCl9O3JldHVybiBDLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLHQpKSxmdW5jdGlvbihCKXtsZXQgaT1hW0JdfHxnLGY9aShBW0JdLHRbQl0sQik7Qy5pc1VuZGVmaW5lZChmKSYmaSE9PW58fChJW0JdPWYpfSksSX12YXIgdUE9IjEuNi44Ijt2YXIgeEE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLHQpPT57eEFbQV09ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT09QXx8ImEiKyh0PDE/Im4gIjoiICIpK0F9fSk7dmFyIFl0PXt9O3hBLnRyYW5zaXRpb25hbD1mdW5jdGlvbih0LEksZSl7ZnVuY3Rpb24gZyhyLG8pe3JldHVybiJbQXhpb3MgdiIrdUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrcisiXCciK28rKGU/Ii4gIitlOiIiKX1yZXR1cm4ocixvLG4pPT57aWYodD09PSExKXRocm93IG5ldyBsKGcobywiIGhhcyBiZWVuIHJlbW92ZWQiKyhJPyIgaW4gIitJOiIiKSksbC5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIEkmJiFZdFtvXSYmKFl0W29dPSEwLGNvbnNvbGUud2FybihnKG8sIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK0krIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksdD90KHIsbyxuKTohMH19O2Z1bmN0aW9uIGFlKEEsdCxJKXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IGwoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBlPU9iamVjdC5rZXlzKEEpLGc9ZS5sZW5ndGg7Zm9yKDtnLS0gPjA7KXtsZXQgcj1lW2ddLG89dFtyXTtpZihvKXtsZXQgbj1BW3JdLGE9bj09PXZvaWQgMHx8byhuLHIsQSk7aWYoYSE9PSEwKXRocm93IG5ldyBsKCJvcHRpb24gIityKyIgbXVzdCBiZSAiK2EsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYoSSE9PSEwKXRocm93IG5ldyBsKCJVbmtub3duIG9wdGlvbiAiK3IsbC5FUlJfQkFEX09QVElPTil9fXZhciBoQT17YXNzZXJ0T3B0aW9uczphZSx2YWxpZGF0b3JzOnhBfTt2YXIgWT1oQS52YWxpZGF0b3JzLHg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBMQSxyZXNwb25zZTpuZXcgTEF9fWFzeW5jIHJlcXVlc3QodCxJKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxJKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBnO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGc9e30pOmc9bmV3IEVycm9yO2xldCByPWcuc3RhY2s/Zy5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjtlLnN0YWNrP3ImJiFTdHJpbmcoZS5zdGFjaykuZW5kc1dpdGgoci5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKGUuc3RhY2srPWAlMEFgK3IpOmUuc3RhY2s9cn10aHJvdyBlfX1fcmVxdWVzdCh0LEkpe3R5cGVvZiB0PT0ic3RyaW5nIj8oST1JfHx7fSxJLnVybD10KTpJPXR8fHt9LEk9ayh0aGlzLmRlZmF1bHRzLEkpO2xldHt0cmFuc2l0aW9uYWw6ZSxwYXJhbXNTZXJpYWxpemVyOmcsaGVhZGVyczpyfT1JO2UhPT12b2lkIDAmJmhBLmFzc2VydE9wdGlvbnMoZSx7c2lsZW50SlNPTlBhcnNpbmc6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpZLnRyYW5zaXRpb25hbChZLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6WS50cmFuc2l0aW9uYWwoWS5ib29sZWFuKX0sITEpLGchPW51bGwmJihDLmlzRnVuY3Rpb24oZyk/SS5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6Z306aEEuYXNzZXJ0T3B0aW9ucyhnLHtlbmNvZGU6WS5mdW5jdGlvbixzZXJpYWxpemU6WS5mdW5jdGlvbn0sITApKSxJLm1ldGhvZD0oSS5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1yJiZDLm1lcmdlKHIuY29tbW9uLHJbSS5tZXRob2RdKTtyJiZDLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSByW0VdfSksSS5oZWFkZXJzPW0uY29uY2F0KG8scik7bGV0IG49W10sYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKEkpPT09ITF8fChhPWEmJmMuc3luY2hyb25vdXMsbi51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBRPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7US5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IEIsaT0wLGY7aWYoIWEpe2xldCBFPVtEQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLG4pLEUucHVzaC5hcHBseShFLFEpLGY9RS5sZW5ndGgsQj1Qcm9taXNlLnJlc29sdmUoSSk7aTxmOylCPUIudGhlbihFW2krK10sRVtpKytdKTtyZXR1cm4gQn1mPW4ubGVuZ3RoO2xldCBzPUk7Zm9yKGk9MDtpPGY7KXtsZXQgRT1uW2krK10sYz1uW2krK107dHJ5e3M9RShzKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e0I9REEuY2FsbCh0aGlzLHMpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3IoaT0wLGY9US5sZW5ndGg7aTxmOylCPUIudGhlbihRW2krK10sUVtpKytdKTtyZXR1cm4gQn1nZXRVcmkodCl7dD1rKHRoaXMuZGVmYXVsdHMsdCk7bGV0IEk9JCh0LmJhc2VVUkwsdC51cmwpO3JldHVybiBYKEksdC5wYXJhbXMsdC5wYXJhbXNTZXJpYWxpemVyKX19O0MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24odCl7eC5wcm90b3R5cGVbdF09ZnVuY3Rpb24oSSxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsoZXx8e30se21ldGhvZDp0LHVybDpJLGRhdGE6KGV8fHt9KS5kYXRhfSkpfX0pO0MuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIEkoZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbyxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsobnx8e30se21ldGhvZDp0LGhlYWRlcnM6ZT97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6cixkYXRhOm99KSl9fXgucHJvdG90eXBlW3RdPUkoKSx4LnByb3RvdHlwZVt0KyJGb3JtIl09SSghMCl9KTt2YXIgQUE9eDt2YXIgakE9Y2xhc3MgQXtjb25zdHJ1Y3Rvcih0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IEk7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe0k9cn0pO2xldCBlPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZz0+e2lmKCFlLl9saXN0ZW5lcnMpcmV0dXJuO2xldCByPWUuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtyLS0gPjA7KWUuX2xpc3RlbmVyc1tyXShnKTtlLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPWc9PntsZXQgcixvPW5ldyBQcm9taXNlKG49PntlLnN1YnNjcmliZShuKSxyPW59KS50aGVuKGcpO3JldHVybiBvLmNhbmNlbD1mdW5jdGlvbigpe2UudW5zdWJzY3JpYmUocil9LG99LHQoZnVuY3Rpb24ocixvLG4pe2UucmVhc29ufHwoZS5yZWFzb249bmV3IEgocixvLG4pLEkoZS5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUodCl7aWYodGhpcy5yZWFzb24pe3QodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2godCk6dGhpcy5fbGlzdGVuZXJzPVt0XX11bnN1YnNjcmliZSh0KXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgST10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZih0KTtJIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoSSwxKX1zdGF0aWMgc291cmNlKCl7bGV0IHQ7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKGcpe3Q9Z30pLGNhbmNlbDp0fX19LGJ0PWpBO2Z1bmN0aW9uIFdBKEEpe3JldHVybiBmdW5jdGlvbihJKXtyZXR1cm4gQS5hcHBseShudWxsLEkpfX1mdW5jdGlvbiBaQShBKXtyZXR1cm4gQy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgVkE9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKFZBKS5mb3JFYWNoKChbQSx0XSk9PntWQVt0XT1BfSk7dmFyIE10PVZBO2Z1bmN0aW9uIHF0KEEpe2xldCB0PW5ldyBBQShBKSxJPVcoQUEucHJvdG90eXBlLnJlcXVlc3QsdCk7cmV0dXJuIEMuZXh0ZW5kKEksQUEucHJvdG90eXBlLHQse2FsbE93bktleXM6ITB9KSxDLmV4dGVuZChJLHQsbnVsbCx7YWxsT3duS2V5czohMH0pLEkuY3JlYXRlPWZ1bmN0aW9uKGcpe3JldHVybiBxdChrKEEsZykpfSxJfXZhciBoPXF0KFQpO2guQXhpb3M9QUE7aC5DYW5jZWxlZEVycm9yPUg7aC5DYW5jZWxUb2tlbj1idDtoLmlzQ2FuY2VsPXY7aC5WRVJTSU9OPXVBO2gudG9Gb3JtRGF0YT1KO2guQXhpb3NFcnJvcj1sO2guQ2FuY2VsPWguQ2FuY2VsZWRFcnJvcjtoLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodCl9O2guc3ByZWFkPVdBO2guaXNBeGlvc0Vycm9yPVpBO2gubWVyZ2VDb25maWc9aztoLkF4aW9zSGVhZGVycz1tO2guZm9ybVRvSlNPTj1BPT5jQShDLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2guZ2V0QWRhcHRlcj1sQS5nZXRBZGFwdGVyO2guSHR0cFN0YXR1c0NvZGU9TXQ7aC5kZWZhdWx0PWg7dmFyIGRBPWg7dmFye0F4aW9zOmlvLEF4aW9zRXJyb3I6Q28sQ2FuY2VsZWRFcnJvcjpCbyxpc0NhbmNlbDpubyxDYW5jZWxUb2tlbjpzbyxWRVJTSU9OOlFvLGFsbDpFbyxDYW5jZWw6YW8saXNBeGlvc0Vycm9yOmNvLHNwcmVhZDpmbyx0b0Zvcm1EYXRhOmxvLEF4aW9zSGVhZGVyczpEbyxIdHRwU3RhdHVzQ29kZTp1byxmb3JtVG9KU09OOmhvLGdldEFkYXB0ZXI6eW8sbWVyZ2VDb25maWc6d299PWRBO3ZhciB0QSxMLHpBLFhBPXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7ekE9bmV3IFVpbnQ4QXJyYXkoTC5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LHlBPWNsYXNze2luaXQoKXtyZXR1cm4gdEF8fCh0eXBlb2YgZmV0Y2g8InUiP3RBPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrS3QpLnRoZW4odD0+dC5hcnJheUJ1ZmZlcigpKS50aGVuKHQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsWEEpKS50aGVuKHRoaXMuX2luaXQpOnRBPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKEt0LCJiYXNlNjQiKSxYQSkudGhlbih0aGlzLl9pbml0KSx0QSl9X2luaXQodCl7TD10Lmluc3RhbmNlLFhBLmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZSh0LEk9MCl7aWYoIUwpdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IGU9dC5ieXRlTGVuZ3RoLGc9TC5leHBvcnRzLm1hbGxvYyhlKTt6QS5zZXQodCxnKSxJPUl8fE51bWJlcihMLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShnLGUpKTtsZXQgcj1MLmV4cG9ydHMubWFsbG9jKEkpLG89TC5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhyLEksZyxlKSxuPXpBLnNsaWNlKHIscitvKTtyZXR1cm4gTC5leHBvcnRzLmZyZWUoZyksTC5leHBvcnRzLmZyZWUociksbn19LEt0PSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIE90PW5ldyB5QSxUdD0hMTthc3luYyBmdW5jdGlvbiBjZShBLHQsSSl7bGV0IGU9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ZT1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ZT1BOmU9YCR7dH0vJHtBfWAsZS5lbmRzV2l0aCgiLmpzIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMykpLGUuZW5kc1dpdGgoIi53YXNtIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtNSkpO2xldCBnPWAke2V9Lndhc21gLHI9YXdhaXQgZEEuZ2V0KGAke2d9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczpJfSk7VHR8fChhd2FpdCBPdC5pbml0KCksVHQ9ITApO2xldCBuPU90LmRlY29kZShuZXcgVWludDhBcnJheShyLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtlfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om59KX12YXIgUHQ9Y2U7dmFyIHdBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gZmUoQSx0LEkpe2xldCBlPUEsZz1BLHI9bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoZT1uZXcgVVJMKEEuaHJlZiksZz1lLmhyZWYpLHdBLmhhcyhnKT9yPWF3YWl0IHdBLmdldChnKTood0Euc2V0KGcsUHQoZSx0LEkpKSxyPWF3YWl0IHdBLmdldChnKSkscn12YXIgeHQ9ZmU7dmFyIGxlPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sRD1sZTt2YXIgRGU9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxTPURlO3ZhciB1ZT17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0saj11ZTtmdW5jdGlvbiBoZShBLHQpe2xldCBJPW51bGw7c3dpdGNoKEEpe2Nhc2UgUy5VSW50ODp7ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFMuSW50ODp7ST1uZXcgSW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUy5VSW50MTY6e0k9bmV3IFVpbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUy5JbnQxNjp7ST1uZXcgSW50MTZBcnJheSh0KTticmVha31jYXNlIFMuVUludDMyOntJPW5ldyBVaW50MzJBcnJheSh0KTticmVha31jYXNlIFMuSW50MzI6e0k9bmV3IEludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBTLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/ST1uZXcgQmlnVWludDY0QXJyYXkodCk6ST1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFMuSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/ST1uZXcgQmlnSW50NjRBcnJheSh0KTpJPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2Ugai5GbG9hdDMyOntJPW5ldyBGbG9hdDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBqLkZsb2F0NjQ6e0k9bmV3IEZsb2F0NjRBcnJheSh0KTticmVha31jYXNlIm51bGwiOntJPW51bGw7YnJlYWt9Y2FzZSBudWxsOntJPW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gSX12YXIgRz1oZTt2YXIgWnQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsanQ9bmV3IFRleHRFbmNvZGVyLFd0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBkZShBLHQpe2xldCBJPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LGU9QS5mc19vcGVuKHQsSS5mbGFncykscj1BLmZzX3N0YXQodCkuc2l6ZSxvPW51bGw7WnQ/bz1uZXcgU2hhcmVkQXJyYXlCdWZmZXIocik6bz1uZXcgQXJyYXlCdWZmZXIocik7bGV0IG49bmV3IFVpbnQ4QXJyYXkobyk7cmV0dXJuIEEuZnNfcmVhZChlLG4sMCxyLDApLEEuZnNfY2xvc2UoZSksbn1mdW5jdGlvbiBWdChBLHQsSSl7bGV0IGU9bnVsbDtadD9lPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihJKTplPW5ldyBBcnJheUJ1ZmZlcihJKTtsZXQgZz1uZXcgVWludDhBcnJheShlKSxyPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcix0LEkpO3JldHVybiBnLnNldChyKSxnfWZ1bmN0aW9uIGQoQSx0LEksZSl7bGV0IGc9MDtyZXR1cm4gdCE9PW51bGwmJihnPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksZSx0LmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxnKSksZ31mdW5jdGlvbiBNKEEsdCxJKXtsZXQgZT1KU09OLnN0cmluZ2lmeSh0KSxnPUEubGVuZ3RoQnl0ZXNVVEY4KGUpKzEscj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksZ10pO0Euc3RyaW5nVG9VVEY4KGUscixnKX1mdW5jdGlvbiBwKEEsdCxJLGUpe2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsSV0pLHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxJXSksbz1WdChBLGcscik7cmV0dXJuIEcoZSxvLmJ1ZmZlcil9ZnVuY3Rpb24gbUEoQSx0KXtsZXQgST1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLHRdKSxlPUEuVVRGOFRvU3RyaW5nKEkpO3JldHVybiBKU09OLnBhcnNlKGUpfWZ1bmN0aW9uIHllKEEsdCxJLGUpe2UhPW51bGwmJmUubGVuZ3RoPjAmJmUuZm9yRWFjaChmdW5jdGlvbihRLEIpe3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgaT1qdC5lbmNvZGUoUS5kYXRhLmRhdGEpLGY9ZChBLGksQiwwKSxzPXtzaXplOmkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07TShBLHMsQik7YnJlYWt9Y2FzZSBELkpzb25Db21wYXRpYmxlOntsZXQgaT1qdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoUS5kYXRhKSksZj1kKEEsaSxCLDApLHM9e3NpemU6aS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtNKEEscyxCKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgaT1RLmRhdGEuZGF0YSxmPWQoQSxpLEIsMCkscz17c2l6ZTppLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O00oQSxzLEIpO2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5kYXRhLEIsMCkscz1kKEEsaS5kaXJlY3Rpb24sQiwxKSxFPXR5cGVvZiBpLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGkubWV0YWRhdGEuZW50cmllcygpKTpbXSxjPXtpbWFnZVR5cGU6aS5pbWFnZVR5cGUsbmFtZTppLm5hbWUsb3JpZ2luOmkub3JpZ2luLHNwYWNpbmc6aS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxzaXplOmkuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOkV9O00oQSxjLEIpO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgaT1RLmRhdGEsZj1kKEEsaS5wb2ludHMsQiwwKSxzPWQoQSxpLmNlbGxzLEIsMSksRT1kKEEsaS5wb2ludERhdGEsQiwyKSxjPWQoQSxpLmNlbGxEYXRhLEIsMyksdT17bWVzaFR5cGU6aS5tZXNoVHlwZSxuYW1lOmkubmFtZSxudW1iZXJPZlBvaW50czppLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOmkubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxjZWxsQnVmZmVyU2l6ZTppLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6aS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZkNlbGxQaXhlbHM6aS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O00oQSx1LEIpO2JyZWFrfWNhc2UgRC5Qb2ludFNldDp7bGV0IGk9US5kYXRhLGY9ZChBLGkucG9pbnRzLEIsMCkscz1kKEEsaS5wb2ludERhdGEsQiwxKSxFPXtwb2ludFNldFR5cGU6aS5wb2ludFNldFR5cGUsbmFtZTppLm5hbWUsbnVtYmVyT2ZQb2ludHM6aS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczppLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gfTtNKEEsRSxCKTticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBpPVEuZGF0YSxmPWQoQSxpLnBvaW50cyxCLDApLHM9ZChBLGkudmVydGljZXMsQiwxKSxFPWQoQSxpLmxpbmVzLEIsMiksYz1kKEEsaS5wb2x5Z29ucyxCLDMpLHU9ZChBLGkudHJpYW5nbGVTdHJpcHMsQiw0KSx5PWQoQSxpLnBvaW50RGF0YSxCLDUpLFI9ZChBLGkucG9pbnREYXRhLEIsNiksTj17cG9seURhdGFUeXBlOmkucG9seURhdGFUeXBlLG5hbWU6aS5uYW1lLG51bWJlck9mUG9pbnRzOmkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTppLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxsaW5lc0J1ZmZlclNpemU6aS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOmkucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTppLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5fWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmkubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtNKEEsTixCKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgZz1BLnN0YWNrU2F2ZSgpLHI9MDt0cnl7cj1BLmNhbGxNYWluKHQuc2xpY2UoKSl9Y2F0Y2goUSl7dGhyb3cgdHlwZW9mIFE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoUSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksUX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKGcpfWxldCBvPUEuZ2V0TW9kdWxlU3Rkb3V0KCksbj1BLmdldE1vZHVsZVN0ZGVycigpLGE9W107cmV0dXJuIEkhPW51bGwmJkkubGVuZ3RoPjAmJnI9PT0wJiZJLmZvckVhY2goZnVuY3Rpb24oUSxCKXtsZXQgaT1udWxsO3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHMsRSk7aT17ZGF0YTpXdC5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxCLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEUpO2k9SlNPTi5wYXJzZShXdC5kZWNvZGUoYykpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEIsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQiwwXSk7aT17ZGF0YTpWdChBLHMsRSl9O2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7aT17cGF0aDpRLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoUS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7aT17cGF0aDpRLmRhdGEucGF0aCxkYXRhOmRlKEEsUS5kYXRhLnBhdGgpfTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBzPW1BKEEsQik7cy5kYXRhPXAoQSxCLDAscy5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSkscy5kaXJlY3Rpb249cChBLEIsMSxqLkZsb2F0NjQpLHMubWV0YWRhdGE9bmV3IE1hcChzLm1ldGFkYXRhKSxpPXM7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAscy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOnMucG9pbnRzPUcocy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbHM+MD9zLmNlbGxzPXAoQSxCLDEscy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6cy5jZWxscz1HKHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1wKEEsQiwyLHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/cy5jZWxsRGF0YT1wKEEsQiwzLHMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6cy5jZWxsRGF0YT1HKHMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGk9czticmVha31jYXNlIEQuUG9pbnRTZXQ6e2xldCBzPW1BKEEsQik7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPXAoQSxCLDAscy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1HKHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPXAoQSxCLDEscy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPUcocy5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxpPXM7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgcz1tQShBLEIpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1wKEEsQiwwLGouRmxvYXQzMik6cy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxzLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP3MudmVydGljZXM9cChBLEIsMSxTLlVJbnQzMik6cy52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXkscy5saW5lc0J1ZmZlclNpemU+MD9zLmxpbmVzPXAoQSxCLDIsUy5VSW50MzIpOnMubGluZXM9bmV3IFVpbnQzMkFycmF5LHMucG9seWdvbnNCdWZmZXJTaXplPjA/cy5wb2x5Z29ucz1wKEEsQiwzLFMuVUludDMyKTpzLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP3MudHJpYW5nbGVTdHJpcHM9cChBLEIsNCxTLlVJbnQzMik6cy50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9cChBLEIsNSxzLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9RyhzLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/cy5jZWxsRGF0YT1wKEEsQiw2LHMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9RyhzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksaT1zO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6US50eXBlLGRhdGE6aX07YS5wdXNoKGYpfSkse3JldHVyblZhbHVlOnIsc3Rkb3V0Om8sc3RkZXJyOm4sb3V0cHV0czphfX12YXIgWHQ9eWU7dmFyIHdlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBtZShBLHQpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IEk9W107Zm9yKGxldCBlPTA7ZTxBLmxlbmd0aDtlKyspe2xldCBnPXBlKEFbZV0sdCk7ZyE9PW51bGwmJkkucHVzaChnKX1yZXR1cm4gSX1mdW5jdGlvbiBwZShBLHQpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IEk9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/ST1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihJPUEpLHdlJiZJIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDp0P0k6SS5zbGljZSgwKX12YXIgenQ9bWU7ZnVuY3Rpb24gU2UoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIF90PVNlO2Z1bmN0aW9uIEZlKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciB2dD1GZTtmdW5jdGlvbiBSZShBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgJHQ9UmU7YXN5bmMgZnVuY3Rpb24gTmUoQSx0LEksZSl7bGV0IGc9WHQoQSx0LEksZSkscj1bXTtyZXR1cm4gZy5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24obyl7aWYoby50eXBlPT09RC5CaW5hcnlTdHJlYW18fG8udHlwZT09PUQuQmluYXJ5RmlsZSl7bGV0IG49by5kYXRhO3IucHVzaChuKX1lbHNlIGlmKG8udHlwZT09PUQuSW1hZ2Upe2xldCBuPW8uZGF0YTtyLnB1c2goLi4uX3QobikpfWVsc2UgaWYoby50eXBlPT09RC5NZXNoKXtsZXQgbj1vLmRhdGE7ci5wdXNoKC4uLnZ0KG4pKX1lbHNlIGlmKG8udHlwZT09PUQuUG9seURhdGEpe2xldCBuPW8uZGF0YTtyLnB1c2goLi4uJHQobikpfX0pLEZBKGcsenQociwhMCkpfXZhciBBST1OZTt2YXIgVWU9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsdCxJLGUsZyxyKXtsZXQgbz1hd2FpdCB4dChBLHQscik7cmV0dXJuIGF3YWl0IEFJKG8sSSxlLGcpfX07aUEoVWUpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7X3QoenQpO2V4cG9ydHtEZSBhcyBieXVSZWFkTWVzaCxTZSBhcyBieXVXcml0ZU1lc2gsSiBhcyBleHRlbnNpb25Ub01lc2hJbyxIIGFzIGV4dGVuc2lvblRvUG9pbnRTZXRJbyxiZSBhcyBmcmVlU3VyZmVyQXNjaWlSZWFkTWVzaCxrZSBhcyBmcmVlU3VyZmVyQXNjaWlXcml0ZU1lc2gsUmUgYXMgZnJlZVN1cmZlckJpbmFyeVJlYWRNZXNoLEZlIGFzIGZyZWVTdXJmZXJCaW5hcnlXcml0ZU1lc2gseSBhcyBnZXREZWZhdWx0V2ViV29ya2VyLEUgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsUSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLHVlIGFzIG9ialJlYWRNZXNoLFVlIGFzIG9ialJlYWRQb2ludFNldCxmZSBhcyBvYmpXcml0ZU1lc2gsTmUgYXMgb2JqV3JpdGVQb2ludFNldCxDZSBhcyBvZmZSZWFkTWVzaCxPZSBhcyBvZmZSZWFkUG9pbnRTZXQsbWUgYXMgb2ZmV3JpdGVNZXNoLE1lIGFzIG9mZldyaXRlUG9pbnRTZXQsbm8gYXMgcmVhZE1lc2gsaG8gYXMgcmVhZFBvaW50U2V0LHhJIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsX3QgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsRkkgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCxCZSBhcyBzdGxSZWFkTWVzaCxjZSBhcyBzdGxXcml0ZU1lc2gsaGUgYXMgc3djUmVhZE1lc2gsd2UgYXMgc3djV3JpdGVNZXNoLGdlIGFzIHZ0a1BvbHlEYXRhUmVhZE1lc2gsUGUgYXMgdnRrUG9seURhdGFSZWFkUG9pbnRTZXQscGUgYXMgdnRrUG9seURhdGFXcml0ZU1lc2gsV2UgYXMgdnRrUG9seURhdGFXcml0ZVBvaW50U2V0LEVlIGFzIHdhc21SZWFkTWVzaCx4ZSBhcyB3YXNtUmVhZFBvaW50U2V0LGRlIGFzIHdhc21Xcml0ZU1lc2gsVGUgYXMgd2FzbVdyaXRlUG9pbnRTZXQsUWUgYXMgd2FzbVpzdGRSZWFkTWVzaCxHZSBhcyB3YXNtWnN0ZFJlYWRQb2ludFNldCx5ZSBhcyB3YXNtWnN0ZFdyaXRlTWVzaCxMZSBhcyB3YXNtWnN0ZFdyaXRlUG9pbnRTZXQsc28gYXMgd3JpdGVNZXNoLERvIGFzIHdyaXRlUG9pbnRTZXR9OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/mesh-io/python/itkwasm-mesh-io-wasi/itkwasm_mesh_io_wasi/_version.py b/packages/mesh-io/python/itkwasm-mesh-io-wasi/itkwasm_mesh_io_wasi/_version.py index bf2561596..daa50c7cf 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io-wasi/itkwasm_mesh_io_wasi/_version.py +++ b/packages/mesh-io/python/itkwasm-mesh-io-wasi/itkwasm_mesh_io_wasi/_version.py @@ -1 +1 @@ -__version__ = "1.4.1" +__version__ = "1.4.2" diff --git a/packages/mesh-io/python/itkwasm-mesh-io/itkwasm_mesh_io/_version.py b/packages/mesh-io/python/itkwasm-mesh-io/itkwasm_mesh_io/_version.py index bf2561596..daa50c7cf 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io/itkwasm_mesh_io/_version.py +++ b/packages/mesh-io/python/itkwasm-mesh-io/itkwasm_mesh_io/_version.py @@ -1 +1 @@ -__version__ = "1.4.1" +__version__ = "1.4.2" diff --git a/packages/mesh-io/typescript/package.json b/packages/mesh-io/typescript/package.json index 3d48a6902..8c613a2a1 100644 --- a/packages/mesh-io/typescript/package.json +++ b/packages/mesh-io/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/mesh-io", - "version": "1.4.1", + "version": "1.4.2", "description": "Input and output for scientific and medical image file formats.", "type": "module", "module": "./dist/index.js", From ea082074b691def3747b5d8f6efc6152fa54e553 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Thu, 24 Oct 2024 16:32:57 -0400 Subject: [PATCH 31/39] build(transform-io): add pixi configuration --- packages/transform-io/.gitignore | 2 +- packages/transform-io/.npmrc | 1 + packages/transform-io/environment.yml | 9 - packages/transform-io/package.json | 16 +- packages/transform-io/pixi.lock | 9250 +++++++++++++++++++++++++ packages/transform-io/pixi.toml | 139 + pnpm-lock.yaml | 3 - 7 files changed, 9397 insertions(+), 23 deletions(-) create mode 100644 packages/transform-io/.npmrc delete mode 100644 packages/transform-io/environment.yml create mode 100644 packages/transform-io/pixi.lock create mode 100644 packages/transform-io/pixi.toml diff --git a/packages/transform-io/.gitignore b/packages/transform-io/.gitignore index 0a15d0024..f0bb03c7f 100644 --- a/packages/transform-io/.gitignore +++ b/packages/transform-io/.gitignore @@ -1,6 +1,6 @@ test/ emscripten-build/ -micromamba/ python/ wasi-build/ typescript/dist +pyodide/ diff --git a/packages/transform-io/.npmrc b/packages/transform-io/.npmrc new file mode 100644 index 000000000..a4be22c92 --- /dev/null +++ b/packages/transform-io/.npmrc @@ -0,0 +1 @@ +git-checks=false diff --git a/packages/transform-io/environment.yml b/packages/transform-io/environment.yml deleted file mode 100644 index e538e3dfc..000000000 --- a/packages/transform-io/environment.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: transform-io -channels: - - conda-forge -dependencies: - - pytest - - python=3.11 - - pip - - pip: - - hatch diff --git a/packages/transform-io/package.json b/packages/transform-io/package.json index 3de9ab414..79731c44c 100644 --- a/packages/transform-io/package.json +++ b/packages/transform-io/package.json @@ -1,8 +1,7 @@ { "name": "@itk-wasm/transform-io-build", - "version": "1.0.0", + "version": "0.1.1", "private": true, - "packageManager": "pnpm@9.4.0", "description": "scripts to generate @itk-wasm/transform-io itk-wasm artifacts.", "type": "module", "itk-wasm": { @@ -19,27 +18,24 @@ "build:emscripten:debug": "itk-wasm pnpm-script build:emscripten:debug", "build:wasi": "itk-wasm pnpm-script build:wasi", "build:wasi:debug": "itk-wasm pnpm-script build:wasi:debug", - "build:python:wasi": "itk-wasm pnpm-script build:python:wasi", + "build:python:wasi": "echo 'No build:python:wasi script required with pixi'", "bindgen:typescript": "itk-wasm pnpm-script bindgen:typescript", "bindgen:python": "itk-wasm pnpm-script bindgen:python", "build:gen:typescript": "itk-wasm pnpm-script build:gen:typescript", - "build:gen:python": "itk-wasm pnpm-script build:gen:python", - "build:micromamba": "itk-wasm pnpm-script build:micromamba", - "build:python:versionSync": "itk-wasm pnpm-script build:python:versionSync", + "build:gen:python": "pnpm build:wasi && pnpm bindgen:python", "publish:python": "itk-wasm pnpm-script publish:python", "test": "pnpm test:data:download && pnpm build:gen:python && pnpm test:python", "test:data:download": "dam download test/data test/data.tar.gz bafkreihranpzszz3q5bwgzsw6olqwh2e726wfnh4qblkjbng44yhqbfin4 https://bafybeihn3n52vhja45ds3d4wsch3i77rej2oylorjgevt55w3aqirgxzme.ipfs.w3s.link/ipfs/bafybeihn3n52vhja45ds3d4wsch3i77rej2oylorjgevt55w3aqirgxzme/data.tar.gz", "test:data:pack": "dam pack test/data test/data.tar.gz", - "test:python:wasi": "itk-wasm pnpm-script test:python:wasi", - "test:python:emscripten": "itk-wasm pnpm-script test:python:emscripten", - "test:python:dispatch": "itk-wasm pnpm-script test:python:emscripten", + "test:python:wasi": "pnpm test:data:download && pixi run test-wasi", + "test:python:emscripten": "pnpm test:data:download && pixi run test-emscripten", + "test:python:dispatch": "pnpm test:data:download && pixi run test-dispatch", "test:python": "itk-wasm pnpm-script test:python", "test:wasi": "itk-wasm pnpm-script test:wasi" }, "license": "Apache-2.0", "devDependencies": { "@itk-wasm/dam": "^1.1.1", - "@thewtex/setup-micromamba": "^1.9.7", "itk-wasm": "workspace:^" } } diff --git a/packages/transform-io/pixi.lock b/packages/transform-io/pixi.lock new file mode 100644 index 000000000..e9138399d --- /dev/null +++ b/packages/transform-io/pixi.lock @@ -0,0 +1,9250 @@ +version: 5 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + python: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.12.1-hf0a5ef3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.16-h922389a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.22-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.0.0-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.44-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-hec21d91_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.4.0-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.2-h0d9d63b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.0.0-py312h5ab5af3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.11-h86ecc28_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-hfce79cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.2-h9f1df11_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.0.0-py312haf37ca6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.22-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.0-hfc51747_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py312h381445a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl +packages: +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + size: 23621 + timestamp: 1650670423406 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23621 + timestamp: 1650670423406 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + size: 23712 + timestamp: 1650670790230 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23712 + timestamp: 1650670790230 +- kind: conda + name: anyio + version: 4.6.2.post1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - uvloop >=0.21.0b1 + - trio >=0.26.1 + license: MIT + license_family: MIT + size: 109864 + timestamp: 1728935803440 +- kind: conda + name: anyio + version: 4.6.2.post1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - uvloop >=0.21.0b1 + - trio >=0.26.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/anyio?source=compressed-mapping + size: 109864 + timestamp: 1728935803440 +- kind: pypi + name: attrs + version: 24.2.0 + url: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + sha256: 81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'benchmark' + - hypothesis ; extra == 'benchmark' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pympler ; extra == 'benchmark' + - pytest-codspeed ; extra == 'benchmark' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pytest-xdist[psutil] ; extra == 'benchmark' + - pytest>=4.3.0 ; extra == 'benchmark' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'cov' + - coverage[toml]>=5.3 ; extra == 'cov' + - hypothesis ; extra == 'cov' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'cov' + - pympler ; extra == 'cov' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'cov' + - pytest-xdist[psutil] ; extra == 'cov' + - pytest>=4.3.0 ; extra == 'cov' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'dev' + - hypothesis ; extra == 'dev' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'dev' + - pre-commit ; extra == 'dev' + - pympler ; extra == 'dev' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'dev' + - pytest-xdist[psutil] ; extra == 'dev' + - pytest>=4.3.0 ; extra == 'dev' + - cogapp ; extra == 'docs' + - furo ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-notfound-page ; extra == 'docs' + - sphinxcontrib-towncrier ; extra == 'docs' + - towncrier<24.7 ; extra == 'docs' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'tests' + - hypothesis ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests' + - pympler ; extra == 'tests' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests' + - pytest-xdist[psutil] ; extra == 'tests' + - pytest>=4.3.0 ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + requires_python: '>=3.7' +- kind: conda + name: backports + version: '1.0' + build: pyhd8ed1ab_4 + build_number: 4 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + sha256: 31b51537ce7d2ba8b5b3d0095f1813711884304ac1701bc55938ca75f6c82e19 + md5: 67bdebbc334513034826e9b63f769d4c + depends: + - python >=3 + license: BSD-3-Clause + license_family: BSD + size: 6989 + timestamp: 1722295637981 +- kind: conda + name: backports + version: '1.0' + build: pyhd8ed1ab_4 + build_number: 4 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_4.conda + sha256: 31b51537ce7d2ba8b5b3d0095f1813711884304ac1701bc55938ca75f6c82e19 + md5: 67bdebbc334513034826e9b63f769d4c + depends: + - python >=3 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6989 + timestamp: 1722295637981 +- kind: conda + name: backports.tarfile + version: 1.0.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + sha256: 7ba30f32daad2e7ca251508525185ba170eedc14123572611c2acf261c7956b3 + md5: c747b1d79f136013c3b7ebcba876afa6 + depends: + - backports + - python >=3.8 + license: MIT + license_family: MIT + size: 31951 + timestamp: 1712700751335 +- kind: conda + name: backports.tarfile + version: 1.0.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/backports.tarfile-1.0.0-pyhd8ed1ab_1.conda + sha256: 7ba30f32daad2e7ca251508525185ba170eedc14123572611c2acf261c7956b3 + md5: c747b1d79f136013c3b7ebcba876afa6 + depends: + - backports + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/backports-tarfile?source=hash-mapping + size: 31951 + timestamp: 1712700751335 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h2466b09_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: bzip2-1.0.6 + license_family: BSD + size: 54927 + timestamp: 1720974860185 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h2466b09_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 54927 + timestamp: 1720974860185 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h68df207_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb + md5: 56398c28220513b9ea13d7b450acfb20 + depends: + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + size: 189884 + timestamp: 1720974504976 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h68df207_7 + build_number: 7 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb + md5: 56398c28220513b9ea13d7b450acfb20 + depends: + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 189884 + timestamp: 1720974504976 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + size: 122909 + timestamp: 1720974522888 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 122909 + timestamp: 1720974522888 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: h56e8100_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 + md5: 4c4fd67c18619be5aa65dc5b6c72e490 + license: ISC + size: 158773 + timestamp: 1725019107649 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: h56e8100_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 + md5: 4c4fd67c18619be5aa65dc5b6c72e490 + license: ISC + purls: [] + size: 158773 + timestamp: 1725019107649 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 + license: ISC + size: 159003 + timestamp: 1725018903918 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 + license: ISC + purls: [] + size: 159003 + timestamp: 1725018903918 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hcefe29a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + sha256: 2a2d827bee3775a85f0f1b2f2089291475c4416336d1b3a8cbce2964db547af8 + md5: 70e57e8f59d2c98f86b49c69e5074be5 + license: ISC + size: 159106 + timestamp: 1725020043153 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hcefe29a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.8.30-hcefe29a_0.conda + sha256: 2a2d827bee3775a85f0f1b2f2089291475c4416336d1b3a8cbce2964db547af8 + md5: 70e57e8f59d2c98f86b49c69e5074be5 + license: ISC + purls: [] + size: 159106 + timestamp: 1725020043153 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + size: 158482 + timestamp: 1725019034582 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + purls: [] + size: 158482 + timestamp: 1725019034582 +- kind: conda + name: certifi + version: 2024.8.30 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + size: 163752 + timestamp: 1725278204397 +- kind: conda + name: certifi + version: 2024.8.30 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping + size: 163752 + timestamp: 1725278204397 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h06ac9bb_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 + md5: a861504bbea4161a9170b85d4d2be840 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 294403 + timestamp: 1725560714366 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h06ac9bb_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 + md5: a861504bbea4161a9170b85d4d2be840 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 294403 + timestamp: 1725560714366 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 281206 + timestamp: 1725560813378 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h0fad829_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 281206 + timestamp: 1725560813378 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h4389bb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + sha256: ac007bf5fd56d13e16d95eea036433012f2e079dc015505c8a79efebbad1fcbc + md5: 08310c1a22ef957d537e547f8d484f92 + depends: + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 288142 + timestamp: 1725560896359 +- kind: conda + name: cffi + version: 1.17.1 + build: py312h4389bb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py312h4389bb4_0.conda + sha256: ac007bf5fd56d13e16d95eea036433012f2e079dc015505c8a79efebbad1fcbc + md5: 08310c1a22ef957d537e547f8d484f92 + depends: + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 288142 + timestamp: 1725560896359 +- kind: conda + name: cffi + version: 1.17.1 + build: py312hac81daf_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + sha256: 1162e3ca039e7ca7c0e78f0a020ed1bde968096841b663e3f393c966eb82f0f0 + md5: 1a256e5581b1099e9295cb84d53db3ea + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + size: 312892 + timestamp: 1725561779888 +- kind: conda + name: cffi + version: 1.17.1 + build: py312hac81daf_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + sha256: 1162e3ca039e7ca7c0e78f0a020ed1bde968096841b663e3f393c966eb82f0f0 + md5: 1a256e5581b1099e9295cb84d53db3ea + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 312892 + timestamp: 1725561779888 +- kind: conda + name: click + version: 8.1.7 + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 84437 + timestamp: 1692311973840 +- kind: conda + name: click + version: 8.1.7 + build: unix_pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda + sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec + md5: f3ad426304898027fc619827ff428eca + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 84437 + timestamp: 1692311973840 +- kind: conda + name: click + version: 8.1.7 + build: win_pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 + md5: 3549ecbceb6cd77b91a105511b7d0786 + depends: + - __win + - colorama + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 85051 + timestamp: 1692312207348 +- kind: conda + name: click + version: 8.1.7 + build: win_pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-win_pyh7428d3b_0.conda + sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0 + md5: 3549ecbceb6cd77b91a105511b7d0786 + depends: + - __win + - colorama + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 85051 + timestamp: 1692312207348 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + sha256: ba9e5aced2e7dc0bbc48f60bf38f514839424a01975fb2aed30e9246c2f82c7c + md5: 2abada8c216dd6e32514535a3fa245d4 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + size: 1488388 + timestamp: 1729286882127 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312hda17c39_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cryptography-43.0.3-py312hda17c39_0.conda + sha256: ba9e5aced2e7dc0bbc48f60bf38f514839424a01975fb2aed30e9246c2f82c7c + md5: 2abada8c216dd6e32514535a3fa245d4 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1488388 + timestamp: 1729286882127 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312he723553_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + sha256: bd9cc8410bf31ac8b90d63dda92d5810af16c3841ca6dd09be9b7f9c5c7688ba + md5: bfacbf2e4560c7d6416d40f573961918 + depends: + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + size: 1480456 + timestamp: 1729287055014 +- kind: conda + name: cryptography + version: 43.0.3 + build: py312he723553_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-43.0.3-py312he723553_0.conda + sha256: bd9cc8410bf31ac8b90d63dda92d5810af16c3841ca6dd09be9b7f9c5c7688ba + md5: bfacbf2e4560c7d6416d40f573961918 + depends: + - cffi >=1.12 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1480456 + timestamp: 1729287055014 +- kind: conda + name: dbus + version: 1.13.6 + build: h12b9eeb_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + sha256: 5fe76bdf27a142cfb9da0fb3197c562e528d2622b573765bee5c9904cf5e6b6b + md5: f3d63805602166bac09386741e00935e + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + size: 672759 + timestamp: 1640113663539 +- kind: conda + name: dbus + version: 1.13.6 + build: h12b9eeb_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.13.6-h12b9eeb_3.tar.bz2 + sha256: 5fe76bdf27a142cfb9da0fb3197c562e528d2622b573765bee5c9904cf5e6b6b + md5: f3d63805602166bac09386741e00935e + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 672759 + timestamp: 1640113663539 +- kind: conda + name: dbus + version: 1.13.6 + build: h5008d03_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 + md5: ecfff944ba3960ecb334b9a2663d708d + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + size: 618596 + timestamp: 1640112124844 +- kind: conda + name: dbus + version: 1.13.6 + build: h5008d03_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2 + sha256: 8f5f995699a2d9dbdd62c61385bfeeb57c82a681a7c8c5313c395aa0ccab68a5 + md5: ecfff944ba3960ecb334b9a2663d708d + depends: + - expat >=2.4.2,<3.0a0 + - libgcc-ng >=9.4.0 + - libglib >=2.70.2,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 618596 + timestamp: 1640112124844 +- kind: conda + name: distlib + version: 0.3.9 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb + md5: fe521c1608280cc2803ebd26dc252212 + depends: + - python 2.7|>=3.6 + license: Apache-2.0 + license_family: APACHE + size: 276214 + timestamp: 1728557312342 +- kind: conda + name: distlib + version: 0.3.9 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.9-pyhd8ed1ab_0.conda + sha256: 300b2e714f59403df0560174f5ef6c19db8b4a3b74a7244862cf771f07dee8fb + md5: fe521c1608280cc2803ebd26dc252212 + depends: + - python 2.7|>=3.6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/distlib?source=hash-mapping + size: 276214 + timestamp: 1728557312342 +- kind: conda + name: editables + version: '0.5' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + sha256: de160a7494e7bc72360eea6a29cbddf194d0a79f45ff417a4de20e6858cf79a9 + md5: 9873878e2a069bc358b69e9a29c1ecd5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 10988 + timestamp: 1705857085102 +- kind: conda + name: editables + version: '0.5' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/editables-0.5-pyhd8ed1ab_0.conda + sha256: de160a7494e7bc72360eea6a29cbddf194d0a79f45ff417a4de20e6858cf79a9 + md5: 9873878e2a069bc358b69e9a29c1ecd5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/editables?source=hash-mapping + size: 10988 + timestamp: 1705857085102 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: expat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + sha256: c827521e080d0f3395655924f1c364d48a1eac1ff3e193a12d0441e9c3b51e91 + md5: 901a44b341632b0c233756ed5abcd78b + depends: + - libexpat 2.6.3 h5ad3122_0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 130283 + timestamp: 1725568848182 +- kind: conda + name: expat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/expat-2.6.3-h5ad3122_0.conda + sha256: c827521e080d0f3395655924f1c364d48a1eac1ff3e193a12d0441e9c3b51e91 + md5: 901a44b341632b0c233756ed5abcd78b + depends: + - libexpat 2.6.3 h5ad3122_0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 130283 + timestamp: 1725568848182 +- kind: conda + name: filelock + version: 3.16.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + size: 17357 + timestamp: 1726613593584 +- kind: conda + name: filelock + version: 3.16.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_0.conda + sha256: 1da766da9dba05091af87977922fe60dc7464091a9ccffb3765d403189d39be4 + md5: 916f8ec5dd4128cd5f207a3c4c07b2c6 + depends: + - python >=3.7 + license: Unlicense + purls: + - pkg:pypi/filelock?source=hash-mapping + size: 17357 + timestamp: 1726613593584 +- kind: conda + name: freetype + version: 2.12.1 + build: h267a509_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 + md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 634972 + timestamp: 1694615932610 +- kind: conda + name: freetype + version: 2.12.1 + build: hadb7bae_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + sha256: 791673127e037a2dc0eebe122dc4f904cb3f6e635bb888f42cbe1a76b48748d9 + md5: e6085e516a3e304ce41a8ee08b9b89ad + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 596430 + timestamp: 1694616332835 +- kind: conda + name: freetype + version: 2.12.1 + build: hdaf720e_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda + sha256: 2c53ee8879e05e149a9e525481d36adfd660a6abda26fd731376fa64ff03e728 + md5: 3761b23693f768dc75a8fd0a73ca053f + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: GPL-2.0-only OR FTL + purls: [] + size: 510306 + timestamp: 1694616398888 +- kind: conda + name: freetype + version: 2.12.1 + build: hf0a5ef3_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.12.1-hf0a5ef3_2.conda + sha256: 7af93030f4407f076dce181062360efac2cd54dce863b5d7765287a6f5382537 + md5: a5ab74c5bd158c3d5532b66d8d83d907 + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 642092 + timestamp: 1694617858496 +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/43/21/a5d9df1d21514883333fc86584c07c2b49ba7c602e670b174bd73cfc9c7f/greenlet-3.1.1-cp312-cp312-win_amd64.whl + sha256: 7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/66/d4/c8c04958870f482459ab5956c2942c4ec35cac7fe245527f1039837c17a9/greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/7d/ec/bad1ac26764d26aa1353216fcbfa4670050f66d445448aafa227f8b16e80/greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl + sha256: 4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: greenlet + version: 3.1.1 + url: https://files.pythonhosted.org/packages/f1/66/033e58a50fd9ec9df00a8671c74f1f3a320564c6415a4ed82a1c651654ba/greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + sha256: 1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: conda + name: h11 + version: 0.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h11 + version: 0.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/h11?source=hash-mapping + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + size: 46754 + timestamp: 1634280590080 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + size: 46754 + timestamp: 1634280590080 +- kind: conda + name: hatch + version: 1.13.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + sha256: 675b0304b129a4dbc39b8e6f337cea51adebef20508a656f43b6e6b43d9cf458 + md5: b8a6437f94d29aef00decdbe1174be27 + depends: + - click >=8.0.6 + - hatchling >=1.24.2 + - httpx >=0.22.0 + - hyperlink >=21.0.0 + - keyring >=23.5.0 + - packaging >=23.2 + - pexpect >=4.8,<5 + - platformdirs >=2.5.0 + - python >=3.8 + - rich >=11.2.0 + - shellingham >=1.4.0 + - tomli-w >=1.0 + - tomlkit >=0.11.1 + - userpath >=1.7,<2 + - uv >=0.1.35 + - virtualenv >=20.26.1 + - zstandard <1.0 + license: MIT + license_family: MIT + size: 177173 + timestamp: 1728879212263 +- kind: conda + name: hatch + version: 1.13.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatch-1.13.0-pyhd8ed1ab_0.conda + sha256: 675b0304b129a4dbc39b8e6f337cea51adebef20508a656f43b6e6b43d9cf458 + md5: b8a6437f94d29aef00decdbe1174be27 + depends: + - click >=8.0.6 + - hatchling >=1.24.2 + - httpx >=0.22.0 + - hyperlink >=21.0.0 + - keyring >=23.5.0 + - packaging >=23.2 + - pexpect >=4.8,<5 + - platformdirs >=2.5.0 + - python >=3.8 + - rich >=11.2.0 + - shellingham >=1.4.0 + - tomli-w >=1.0 + - tomlkit >=0.11.1 + - userpath >=1.7,<2 + - uv >=0.1.35 + - virtualenv >=20.26.1 + - zstandard <1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatch?source=hash-mapping + size: 177173 + timestamp: 1728879212263 +- kind: conda + name: hatchling + version: 1.25.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + sha256: fb8a16a913f909d8f7d2ae95c18a1aeb7be3eebfb1b7a4246500c06d54498f89 + md5: 7571d6e5561b04aef679a11904dfcebf + depends: + - editables >=0.3 + - importlib-metadata + - packaging >=21.3 + - pathspec >=0.10.1 + - pluggy >=1.0.0 + - python >=3.7 + - tomli >=1.2.2 + - trove-classifiers + license: MIT + license_family: MIT + size: 64580 + timestamp: 1719090878694 +- kind: conda + name: hatchling + version: 1.25.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hatchling-1.25.0-pyhd8ed1ab_0.conda + sha256: fb8a16a913f909d8f7d2ae95c18a1aeb7be3eebfb1b7a4246500c06d54498f89 + md5: 7571d6e5561b04aef679a11904dfcebf + depends: + - editables >=0.3 + - importlib-metadata + - packaging >=21.3 + - pathspec >=0.10.1 + - pluggy >=1.0.0 + - python >=3.7 + - tomli >=1.2.2 + - trove-classifiers + license: MIT + license_family: MIT + purls: + - pkg:pypi/hatchling?source=hash-mapping + size: 64580 + timestamp: 1719090878694 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: httpcore + version: 1.0.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + sha256: 8952c3f1eb18bf4d7e813176c3b23e0af4e863e8b05087e73f74f371d73077ca + md5: b8e1901ef9a215fc41ecfb6bef7e0943 + depends: + - anyio >=3.0,<5.0 + - certifi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + size: 45711 + timestamp: 1727821031365 +- kind: conda + name: httpcore + version: 1.0.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + sha256: 8952c3f1eb18bf4d7e813176c3b23e0af4e863e8b05087e73f74f371d73077ca + md5: b8e1901ef9a215fc41ecfb6bef7e0943 + depends: + - anyio >=3.0,<5.0 + - certifi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + size: 45711 + timestamp: 1727821031365 +- kind: conda + name: httpx + version: 0.27.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: httpx + version: 0.27.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 14646 + timestamp: 1619110249723 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 14646 + timestamp: 1619110249723 +- kind: conda + name: hyperlink + version: 21.0.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + sha256: 026cb82ada41be9ee2836a2ace526e85c4603e77617887c41c6e62c9bde798b3 + md5: 1303beb57b40f8f4ff6fb1bb23bf0553 + depends: + - idna >=2.6 + - python + license: MIT + license_family: MIT + size: 72732 + timestamp: 1610092261086 +- kind: conda + name: hyperlink + version: 21.0.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperlink-21.0.0-pyhd3deb0d_0.tar.bz2 + sha256: 026cb82ada41be9ee2836a2ace526e85c4603e77617887c41c6e62c9bde798b3 + md5: 1303beb57b40f8f4ff6fb1bb23bf0553 + depends: + - idna >=2.6 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperlink?source=hash-mapping + size: 72732 + timestamp: 1610092261086 +- kind: pypi + name: hypothesis + version: 6.115.5 + url: https://files.pythonhosted.org/packages/4c/0b/682adf8c2455d68a3c08f14b20511b5513e810100b4f58dc50bd9bf85428/hypothesis-6.115.5-py3-none-any.whl + sha256: b7733459ae9a93020fac3b91b41473c9b85e975139a152a70d88f3a5caa3fa3f + requires_dist: + - attrs>=22.2.0 + - sortedcontainers<3.0.0,>=2.1.0 + - exceptiongroup>=1.0.0 ; python_full_version < '3.11' + - black>=19.10b0 ; extra == 'all' + - click>=7.0 ; extra == 'all' + - crosshair-tool>=0.0.74 ; extra == 'all' + - django>=4.2 ; extra == 'all' + - dpcontracts>=0.4 ; extra == 'all' + - hypothesis-crosshair>=0.0.16 ; extra == 'all' + - lark>=0.10.1 ; extra == 'all' + - libcst>=0.3.16 ; extra == 'all' + - numpy>=1.19.3 ; extra == 'all' + - pandas>=1.1 ; extra == 'all' + - pytest>=4.6 ; extra == 'all' + - python-dateutil>=1.4 ; extra == 'all' + - pytz>=2014.1 ; extra == 'all' + - redis>=3.0.0 ; extra == 'all' + - rich>=9.0.0 ; extra == 'all' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'all') or (sys_platform == 'win32' and extra == 'all') + - click>=7.0 ; extra == 'cli' + - black>=19.10b0 ; extra == 'cli' + - rich>=9.0.0 ; extra == 'cli' + - libcst>=0.3.16 ; extra == 'codemods' + - hypothesis-crosshair>=0.0.16 ; extra == 'crosshair' + - crosshair-tool>=0.0.74 ; extra == 'crosshair' + - python-dateutil>=1.4 ; extra == 'dateutil' + - django>=4.2 ; extra == 'django' + - dpcontracts>=0.4 ; extra == 'dpcontracts' + - black>=19.10b0 ; extra == 'ghostwriter' + - lark>=0.10.1 ; extra == 'lark' + - numpy>=1.19.3 ; extra == 'numpy' + - pandas>=1.1 ; extra == 'pandas' + - pytest>=4.6 ; extra == 'pytest' + - pytz>=2014.1 ; extra == 'pytz' + - redis>=3.0.0 ; extra == 'redis' + - tzdata>=2024.2 ; (sys_platform == 'emscripten' and extra == 'zoneinfo') or (sys_platform == 'win32' and extra == 'zoneinfo') + requires_python: '>=3.9' +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 12129203 + timestamp: 1720853576813 +- kind: conda + name: icu + version: '75.1' + build: he02047a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e + md5: 8b189310083baabfb622af68fd9d3ae3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12129203 + timestamp: 1720853576813 +- kind: conda + name: icu + version: '75.1' + build: hf9b3779_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 + md5: 268203e8b983fddb6412b36f2024e75c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 12282786 + timestamp: 1720853454991 +- kind: conda + name: icu + version: '75.1' + build: hf9b3779_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 + md5: 268203e8b983fddb6412b36f2024e75c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 12282786 + timestamp: 1720853454991 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 11857802 + timestamp: 1720853997952 +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 11857802 + timestamp: 1720853997952 +- kind: conda + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=hash-mapping + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: importlib_resources + version: 6.4.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + size: 32725 + timestamp: 1725921462405 +- kind: conda + name: importlib_resources + version: 6.4.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping + size: 32725 + timestamp: 1725921462405 +- kind: conda + name: iniconfig + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 + md5: f800d2da156d08e289b14e87e43c1ae5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=hash-mapping + size: 11101 + timestamp: 1673103208955 +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/0b/dc/c0c76414440ea1520b496801b9ee82f7cfbe5c4c1643e1e82c383897b3ae/itk-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: a1b4e5511c2274025bffe80d081ef79ee41de580df80311007af1ec05e2774db + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/7e/14/577a2a26c81ab6e2db821d7a5da3c6ff8dbf27ab3d8ebe74a3d4f203ab38/itk-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 0f0dcce9df862831e705eebf0ffa95de554b17027f69d67b31b30dcb8d838019 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/a0/732ddb5575a5be47d1088def8b1db91c799263a8d583181341271a4f6e6d/itk-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 88344f4c7e8a74dfdeb98e20232d1a9565eb7c381d8242534588ecc4e745ffb3 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e6/05/b876851fc885a3e3cb85f4167bcbc35020da23b98d50da3947041fc82224/itk-5.4.0-cp311-abi3-win_amd64.whl + sha256: e5ffacab2c8609979c78c2d2e02ee7e6abd611261aac0613289d98e7c277cd83 + requires_dist: + - itk-core==5.4.0 + - itk-numerics==5.4.0 + - itk-io==5.4.0 + - itk-filtering==5.4.0 + - itk-registration==5.4.0 + - itk-segmentation==5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/60/be/5e7d2f70bb03a8ef78ca076c22d0e3c633b330be1ca310a6dcebfefaaea3/itk_core-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 21c7b5c451f73c8073eb3b5dd85f7c654399cdc25dd51669bfbbafa611aa4649 + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/6e/5c/eeaa8d362f97ecbb832d6e88cab4d3c13afd602a01befb4d38712afacf4f/itk_core-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: b6af0e82dae0efa95ad87f36ccd55a955383b34a6bd8a036894fb96a3933615a + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/f3/8a/6388ca285140894109b17f8ae912ce7d13f69c8216af0b5c0e45adca6676/itk_core-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 8ca83de9c269e6b20648f2391aa2bf96903b8ed645c3d8cd40d90b939dda439e + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-core + version: 5.4.0 + url: https://files.pythonhosted.org/packages/fd/35/1fbc801f430858f1054c6b64e5d8316b9a319c2eaca2b6723c98ee7a0358/itk_core-5.4.0-cp311-abi3-win_amd64.whl + sha256: 6affe6986927fd176c176f5464d9ea9e737b85d8745f5c4129da910fd16235cb + requires_dist: + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/16/33/4d3617f48f853878750dc249d84bbfe4509469e82df58908a8612d469b2c/itk_filtering-5.4.0-cp311-abi3-win_amd64.whl + sha256: ad59e6066dba25d6b0803023e95c7633a80e7b9c1a9ff89a41c97eae5a60e06f + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8d/f0/0fb8ad41cddcd0580689450d304757211a19f8e3426ae42d30577d10ac19/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 6e8600df87c59233968013d162c5a353ca4c8f843c76117b52347aec20ff1620 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/bb/23/06d0a850a7e525ede537e3e37fd8efd7f5858e261d6170d6f0697cb663dd/itk_filtering-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 86026c853f1fd0b13e282f952cff7455df0ac131cc608df8669ce335633eef0a + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-filtering + version: 5.4.0 + url: https://files.pythonhosted.org/packages/cb/49/098970cb18aa7f84c6d41ece00c8dd2072d3a890973ae4e2a069fe9d8cc2/itk_filtering-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: e8d90842d703877c4ce777efece3db478c8ed5e3a18488e277a480f05d61ebb0 + requires_dist: + - itk-numerics==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/11/61/cfd1cc04d2cd6c603c0abcd1f4bc0d65bff6ee9b84ebcbd828277b807887/itk_io-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 393d711f9edb248aed402e7fc9613045536dbd6b45fc8db638a28d0a409fe974 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1d/5d/e542c16e7647a544fd51ced24c6ca8d8c154a4f62d42bcd6bfa65b5c1a12/itk_io-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8c0eacb3aa100e4b369a673bb0e65c3c48c411bc4b716069bce4cee8c3f9e1cc + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/51/61/45c8709b872d28bb37c0cdbf9f1cd87772f0a0198564d7af39f0d98438f6/itk_io-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: d969a2ab2775b2ace36edee274ffe4839b21c7ccd634844082028f9f373dfedb + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-io + version: 5.4.0 + url: https://files.pythonhosted.org/packages/d6/79/acd142f3052c408eb41f5e6934b954decb49b6129370262647cfda343208/itk_io-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 11a34ac45b960aa883e1758ead15c5394814964573c93d736fc04f021c18cd22 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/4a/a2/ef05890cd456cdb8d6d2e539f2f4c38392fa44155a1e35cedd05e4221b49/itk_meshtopolydata-0.11.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 3c10f157bddbdf86b596ec2742f17bcc35cd6ce7bd64bba712a2a0c0858c2dc7 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/d8/0f/15f4f1953ad4358fb9fc191a3432f3c521d209faf671ef13b386692c7ff8/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 914cae65049842affc820471e149b2cdd55d305ff1a740c34a47e1b1af567361 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/e6/55/01ab1b8f98e35f90fac200ed3aad19714c6d9058a43c68bbe3186cbfdc70/itk_meshtopolydata-0.11.0-cp311-abi3-win_amd64.whl + sha256: b8b746f6d5597687d0b50dd81d650da0293f2c3c90f31212baefdf46edb727d6 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-meshtopolydata + version: 0.11.0 + url: https://files.pythonhosted.org/packages/f4/94/424a2efabc1ae2c6f46cb250d21bf82cb791e113486d614b77b75788e8f5/itk_meshtopolydata-0.11.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 84bd859eeb17aed3de39f0b3357525a4bfac0db17263a8d36cd641e5f8c49b46 + requires_dist: + - itk-core~=5.4.0 + - numpy + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2b/3e/d1dfc24f22415a35c743fdd8dc8b8315454f4bcee6ecbb740aa9d440baa0/itk_numerics-5.4.0-cp311-abi3-win_amd64.whl + sha256: 31f24c218c763b2c15953453cc366c5ba09e7a5c7d47d432a24c0b6b12249206 + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/2d/7f/b28465e289ce6217b3e1fbebb9956e73e334a5c5f76a6426ba6843310943/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 5cd8ab0781e08a4022e36094bb60652d0ee2b7cd1912f325e8f32d8bd5501fcf + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3b/b8/5f1269e17191228c7702cd81fc6e83f1814ab49a235fcba62230bac81cb4/itk_numerics-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 583b665d6b8578ac93691afb796faf69e30b8db8a205754cdc746707f9589fcd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-numerics + version: 5.4.0 + url: https://files.pythonhosted.org/packages/8a/0b/46eaffa04ac7a15d2bea1f40e179df6152c00bf709f8d08b81c5514a9e12/itk_numerics-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: e2dcda0a07ccb6b9b518d3cc4413387a44c30a313c22e15bf818af06c7da8bfd + requires_dist: + - itk-core==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/88/99/3db052a349efaf1ddbb51252e7e4c7a6a10ed5b3b87e2076afb622b711fd/itk_registration-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: 15eab6a72bebeccfb8a0fb291b65c305e46776a18a8f3cb91f199fc8ecd137a1 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/89/f6/686c2d2650065495720889c2e6ebcf6af2e5c2692fc6d8768793b08c641a/itk_registration-5.4.0-cp311-abi3-win_amd64.whl + sha256: 8a2d3f2872375a9c2694bb34a2e061a4d2666f8c13390f03d94219ba8370649e + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/dc/58/ec1bf790ed9657fd8a651189d40eedd765bf1cd75355ffa3f8f9bd67f4df/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 3f41cff2136f69ae5c2ce6166191dff86e4722097411aaaba07a74884d36ff73 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-registration + version: 5.4.0 + url: https://files.pythonhosted.org/packages/e7/f0/a21ddf56263ad6c5f87164032aaeb2235ee2de688cb8a8eeec01a5f01bd7/itk_registration-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: dde112dbb9b695c1908692a0086f60da8d5a123f7e959ebc5aaec2825aaf9793 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/1a/e5/94a596fba3dbecdea33059b455294fbfea91fcfc0d6cfd92372e10a6da93/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: ff2ca7cdf42c8c32b20e1ecf7ee0a0be68e885ce673c565e72a4876b28d2e2f3 + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/3a/92/7d32413898fe4068f0b2da97ab783057e6af84123aa6c54af3706476fed9/itk_segmentation-5.4.0-cp311-abi3-macosx_11_0_arm64.whl + sha256: b3c154e7a92be2ad48e6bf8bd5a8a17610f890bb420abb54dd2bde15b1c9c52c + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/77/8d/916c078544ac29a5ac215d2e5a2b07c9314b515b63136be92d6856a41f55/itk_segmentation-5.4.0-cp311-abi3-win_amd64.whl + sha256: 45374d3c38884ed02e0dfebf73f363e265184a50f7c46d55d8c9217e690a571f + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-segmentation + version: 5.4.0 + url: https://files.pythonhosted.org/packages/79/b9/ba9598bb8b7ee3962980d481065a58f75569c5a2df1d01520083288894b0/itk_segmentation-5.4.0-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: 8dd071dbb1ba1c8fcf26a4011fc3b7069d444e10bc56279d7b26fd3193ac58aa + requires_dist: + - itk-filtering==5.4.0 + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/6c/cf/af6554bd0fd831ba2f8ed7840904a1b0828b1ea348b5000b78ad34c5688f/itk_webassemblyinterface-1.0b175-cp311-abi3-win_amd64.whl + sha256: 0b787ee92418a1f965c52eea1fd41a7aef4424eb6e07a290b0e1ddebf50a09e1 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/77/66/73fa21a0439eacae5156c73611b35eec2c9c3d83ae4f987754043fce1d67/itk_webassemblyinterface-1.0b175-cp311-abi3-macosx_11_0_arm64.whl + sha256: ee3defc13dc65f56127e468c145e9249265c275b63ea3c530c1b88f1df4a7033 + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/a6/3c/ac3bad4ff24fe2b07064be5e44db8f4ed32a4e3708dff084e3b58c5b608c/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_x86_64.whl + sha256: 72f82fab54c4ee4c6c579cfd5c963cba9a84ecc9909e61f3641caa9fef94b40c + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itk-webassemblyinterface + version: 1.0b175 + url: https://files.pythonhosted.org/packages/f2/f5/cd8ed297bd1b9f816d7492bfa857c53bd8fd68aefc2aa9bef7a0d5a61d85/itk_webassemblyinterface-1.0b175-cp311-abi3-manylinux_2_28_aarch64.whl + sha256: eff3cd27756e96ebd31500ef258d0cc4a56e48c2c25c4533300469246623d7aa + requires_dist: + - itk==5.4.* + - itk-meshtopolydata==0.11.* + requires_python: '>=3.8' +- kind: pypi + name: itkwasm + version: 1.0b179 + url: https://files.pythonhosted.org/packages/1b/81/6e07b81113d403ecc01599496351905531fa8d852a833952600db7a092ec/itkwasm-1.0b179-py3-none-any.whl + sha256: 43558ccd082f3dc3c9b3b2379cdb197635b33620d41dbc6c1fa9186d03c22a7e + requires_dist: + - importlib-metadata ; python_full_version < '3.10' + - numpy + - platformdirs ; sys_platform != 'emscripten' + - typing-extensions + - wasmtime>=13.0.2 ; sys_platform != 'emscripten' + requires_python: '>=3.8' +- kind: conda + name: jaraco.classes + version: 3.4.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + sha256: 538b1c6df537a36c63fd0ed83cb1c1c25b07d8d3b5e401991fdaff261a4b5b4d + md5: 7b756504d362cbad9b73a50a5455cafd + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + size: 12223 + timestamp: 1713939433204 +- kind: conda + name: jaraco.classes + version: 3.4.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhd8ed1ab_1.conda + sha256: 538b1c6df537a36c63fd0ed83cb1c1c25b07d8d3b5e401991fdaff261a4b5b4d + md5: 7b756504d362cbad9b73a50a5455cafd + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-classes?source=hash-mapping + size: 12223 + timestamp: 1713939433204 +- kind: conda + name: jaraco.context + version: 5.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + sha256: 9e2aeacb1aed3ab4fc5883a357e8a874e12f687af300f8708ec12de2995e17d2 + md5: 72d7ad2dcd0f37eccb2ee35a1c8f6aaa + depends: + - backports.tarfile + - python >=3.8 + license: MIT + license_family: MIT + size: 12456 + timestamp: 1714372284922 +- kind: conda + name: jaraco.context + version: 5.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.context-5.3.0-pyhd8ed1ab_1.conda + sha256: 9e2aeacb1aed3ab4fc5883a357e8a874e12f687af300f8708ec12de2995e17d2 + md5: 72d7ad2dcd0f37eccb2ee35a1c8f6aaa + depends: + - backports.tarfile + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-context?source=hash-mapping + size: 12456 + timestamp: 1714372284922 +- kind: conda + name: jaraco.functools + version: 4.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + sha256: d2e866fd22a48eaa2f795b6a3b0bf16f066293322ce04dd65cca36267160ead6 + md5: 547670a612fd335eaa5ffbf0fa75cb64 + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + size: 15192 + timestamp: 1701695329516 +- kind: conda + name: jaraco.functools + version: 4.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jaraco.functools-4.0.0-pyhd8ed1ab_0.conda + sha256: d2e866fd22a48eaa2f795b6a3b0bf16f066293322ce04dd65cca36267160ead6 + md5: 547670a612fd335eaa5ffbf0fa75cb64 + depends: + - more-itertools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-functools?source=hash-mapping + size: 15192 + timestamp: 1701695329516 +- kind: conda + name: jeepney + version: 0.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + sha256: 16639759b811866d63315fe1391f6fb45f5478b823972f4d3d9f0392b7dd80b8 + md5: 9800ad1699b42612478755a2d26c722d + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 36895 + timestamp: 1649085298891 +- kind: conda + name: jeepney + version: 0.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.8.0-pyhd8ed1ab_0.tar.bz2 + sha256: 16639759b811866d63315fe1391f6fb45f5478b823972f4d3d9f0392b7dd80b8 + md5: 9800ad1699b42612478755a2d26c722d + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jeepney?source=hash-mapping + size: 36895 + timestamp: 1649085298891 +- kind: conda + name: jq + version: 1.7.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + sha256: 53437ca79e28003faac8058f6c025c83a819e122d3a0fb70624e6da0f77ab126 + md5: 397702b2c1e53f0f0312d2b170d2e699 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + size: 334346 + timestamp: 1702502754422 +- kind: conda + name: jq + version: 1.7.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/jq-1.7.1-h31becfc_0.conda + sha256: 53437ca79e28003faac8058f6c025c83a819e122d3a0fb70624e6da0f77ab126 + md5: 397702b2c1e53f0f0312d2b170d2e699 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 334346 + timestamp: 1702502754422 +- kind: conda + name: jq + version: 1.7.1 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + sha256: e530cf5800e937bce7847a023a998db504e333a928b469c45a1752535593e762 + md5: dbf665694fb28d86d77cca18e5dd530c + depends: + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + size: 317604 + timestamp: 1702501287237 +- kind: conda + name: jq + version: 1.7.1 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jq-1.7.1-h93a5062_0.conda + sha256: e530cf5800e937bce7847a023a998db504e333a928b469c45a1752535593e762 + md5: dbf665694fb28d86d77cca18e5dd530c + depends: + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 317604 + timestamp: 1702501287237 +- kind: conda + name: jq + version: 1.7.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d + md5: 80814f94713e35df60aad6c4b235de87 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + size: 318956 + timestamp: 1702500793203 +- kind: conda + name: jq + version: 1.7.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.7.1-hd590300_0.conda + sha256: a04a1603e405ea9ae5c4a492a8e361086cb441a91ef7299bd4bf3eca0b485b6d + md5: 80814f94713e35df60aad6c4b235de87 + depends: + - libgcc-ng >=12 + - oniguruma 6.9.* + - oniguruma >=6.9.9,<6.10.0a0 + license: MIT + license_family: MIT + purls: [] + size: 318956 + timestamp: 1702500793203 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh534df25_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + sha256: 8d8fc7d67e9bd387403720447abb1b5539a6f6ca8e3aba8406e0987213bfa0ce + md5: 2099f34ea2f3534f7adc5c21cc199e1b + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + license: MIT + license_family: MIT + size: 37045 + timestamp: 1726971145252 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh534df25_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh534df25_0.conda + sha256: 8d8fc7d67e9bd387403720447abb1b5539a6f6ca8e3aba8406e0987213bfa0ce + md5: 2099f34ea2f3534f7adc5c21cc199e1b + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37045 + timestamp: 1726971145252 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + sha256: 69626899dfac975090032f7af782c143b569f7706e808a4eca67a9a5aa134a15 + md5: 1c74a03431815d5e091585bb04e86f12 + depends: + - __win + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + - pywin32-ctypes >=0.2.0 + license: MIT + license_family: MIT + size: 37407 + timestamp: 1726971355676 +- kind: conda + name: keyring + version: 25.4.1 + build: pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyh7428d3b_0.conda + sha256: 69626899dfac975090032f7af782c143b569f7706e808a4eca67a9a5aa134a15 + md5: 1c74a03431815d5e091585bb04e86f12 + depends: + - __win + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - python >=3.8 + - pywin32-ctypes >=0.2.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 37407 + timestamp: 1726971355676 +- kind: conda + name: keyring + version: 25.4.1 + build: pyha804496_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + sha256: 6deeb4fa0f01447a5e8bd7261044c45d139e27d36df769e5a3a16ce55607da14 + md5: ef6f2de3c8eef0ee9fd31f2267c27bf2 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.8 + - secretstorage >=3.2 + license: MIT + license_family: MIT + size: 36717 + timestamp: 1726971094601 +- kind: conda + name: keyring + version: 25.4.1 + build: pyha804496_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/keyring-25.4.1-pyha804496_0.conda + sha256: 6deeb4fa0f01447a5e8bd7261044c45d139e27d36df769e5a3a16ce55607da14 + md5: ef6f2de3c8eef0ee9fd31f2267c27bf2 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jaraco.context + - jaraco.functools + - jeepney >=0.4.2 + - python >=3.8 + - secretstorage >=3.2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 36717 + timestamp: 1726971094601 +- kind: conda + name: lcms2 + version: '2.16' + build: h67d730c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda + sha256: f9fd9e80e46358a57d9bb97b1e37a03da4022143b019aa3c4476d8a7795de290 + md5: d3592435917b62a8becff3a60db674f6 + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 507632 + timestamp: 1701648249706 +- kind: conda + name: lcms2 + version: '2.16' + build: h922389a_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.16-h922389a_0.conda + sha256: be4847b1014d3cbbc524a53bdbf66182f86125775020563e11d914c8468dd97d + md5: ffdd8267a04c515e7ce69c727b051414 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 296219 + timestamp: 1701647961116 +- kind: conda + name: lcms2 + version: '2.16' + build: ha0e7c42_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + sha256: 151e0c84feb7e0747fabcc85006b8973b22f5abbc3af76a9add0b0ef0320ebe4 + md5: 66f6c134e76fe13cce8a9ea5814b5dd5 + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 211959 + timestamp: 1701647962657 +- kind: conda + name: lcms2 + version: '2.16' + build: hb7c19ff_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 + md5: 51bb7010fc86f70eee639b4bb7a894f5 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 245247 + timestamp: 1701647787198 +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe + md5: 048b02e3962f066da18efe3a21b77672 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + size: 669211 + timestamp: 1729655358674 +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe + md5: 048b02e3962f066da18efe3a21b77672 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 669211 + timestamp: 1729655358674 +- kind: conda + name: ld_impl_linux-aarch64 + version: '2.43' + build: h80caac9_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + sha256: 80ec7e8f006196808fac5bd4b3773a652847f97bbf08044cd87731424ac64f8b + md5: fcbde5ea19d55468953bf588770c0501 + constrains: + - binutils_impl_linux-aarch64 2.43 + license: GPL-3.0-only + license_family: GPL + size: 698245 + timestamp: 1729655345825 +- kind: conda + name: ld_impl_linux-aarch64 + version: '2.43' + build: h80caac9_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + sha256: 80ec7e8f006196808fac5bd4b3773a652847f97bbf08044cd87731424ac64f8b + md5: fcbde5ea19d55468953bf588770c0501 + constrains: + - binutils_impl_linux-aarch64 2.43 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 698245 + timestamp: 1729655345825 +- kind: conda + name: lerc + version: 4.0.0 + build: h27087fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 + md5: 76bbff344f0134279f225174e9064c8f + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 281798 + timestamp: 1657977462600 +- kind: conda + name: lerc + version: 4.0.0 + build: h4de3ea5_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 + sha256: 2d09ef9b7796d83364957e420b41c32d94e628c3f0520b61c332518a7b5cd586 + md5: 1a0ffc65e03ce81559dbcb0695ad1476 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 262096 + timestamp: 1657978241894 +- kind: conda + name: lerc + version: 4.0.0 + build: h63175ca_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 + sha256: f4f39d7f6a2f9b407f8fb567a6c25755270421731d70f0ff331f5de4fa367488 + md5: 1900cb3cab5055833cfddb0ba233b074 + depends: + - vc >=14.2,<15 + - vs2015_runtime >=14.29.30037 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 194365 + timestamp: 1657977692274 +- kind: conda + name: lerc + version: 4.0.0 + build: h9a09cb3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + sha256: 6f068bb53dfb6147d3147d981bb851bb5477e769407ad4e6a68edf482fdcb958 + md5: de462d5aacda3b30721b512c5da4e742 + depends: + - libcxx >=13.0.1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 215721 + timestamp: 1657977558796 +- kind: conda + name: libcxx + version: 19.1.2 + build: ha82da77_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 + md5: ba89ad7c5477e6a9d020020fcdadd37d + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 521199 + timestamp: 1729038190391 +- kind: conda + name: libcxx + version: 19.1.2 + build: ha82da77_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 + md5: ba89ad7c5477e6a9d020020fcdadd37d + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 521199 + timestamp: 1729038190391 +- kind: conda + name: libdeflate + version: '1.22' + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.22-h2466b09_0.conda + sha256: 579c634b7de8869cb1d76eccd4c032dc275d5a017212128502ea4dc828a5b361 + md5: a3439ce12d4e3cd887270d9436f9a4c8 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 155506 + timestamp: 1728177485361 +- kind: conda + name: libdeflate + version: '1.22' + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.22-h86ecc28_0.conda + sha256: 986207f130703897300ddc3637c52e86a5b21c735fe384bf48554d9a6d91c56d + md5: ff6a44e8b1707d02be2fe9a36ea88d4a + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 69601 + timestamp: 1728177137503 +- kind: conda + name: libdeflate + version: '1.22' + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.22-hb9d3cd8_0.conda + sha256: 780f0530a3adfc1497ba49d626931c6afc978c540e1abfde6ccd57128ded6ad6 + md5: b422943d5d772b7cc858b36ad2a92db5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 72242 + timestamp: 1728177071251 +- kind: conda + name: libdeflate + version: '1.22' + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.22-hd74edd7_0.conda + sha256: 3552894ca62bebc33d05982937cda25a4fa19e56a82af2ff20944ff4c2532fda + md5: 2d3e3f3d8ab315748420ef58d5a3ae0f + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 54089 + timestamp: 1728177149927 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + sha256: 4bb47bb2cd09898737a5211e2992d63c555d63715a07ba56eae0aff31fb89c22 + md5: 59f4c43bb1b5ef1c71946ff2cbf59524 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 73616 + timestamp: 1725568742634 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + sha256: 4bb47bb2cd09898737a5211e2992d63c555d63715a07ba56eae0aff31fb89c22 + md5: 59f4c43bb1b5ef1c71946ff2cbf59524 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 73616 + timestamp: 1725568742634 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + sha256: 02341c9c35128055fd404dfe675832b80f2bf9dbb99539457652c11c06e52757 + md5: 1d2b842bb76e268625e8ee8d0a9fe8c3 + depends: + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 72342 + timestamp: 1725568840022 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5ad3122_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.3-h5ad3122_0.conda + sha256: 02341c9c35128055fd404dfe675832b80f2bf9dbb99539457652c11c06e52757 + md5: 1d2b842bb76e268625e8ee8d0a9fe8c3 + depends: + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 72342 + timestamp: 1725568840022 +- kind: conda + name: libexpat + version: 2.6.3 + build: he0c23c2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + sha256: 9543965d155b8da96fc67dd81705fe5c2571c7c00becc8de5534c850393d4e3c + md5: 21415fbf4d0de6767a621160b43e5dea + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 138992 + timestamp: 1725569106114 +- kind: conda + name: libexpat + version: 2.6.3 + build: he0c23c2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda + sha256: 9543965d155b8da96fc67dd81705fe5c2571c7c00becc8de5534c850393d4e3c + md5: 21415fbf4d0de6767a621160b43e5dea + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 138992 + timestamp: 1725569106114 +- kind: conda + name: libexpat + version: 2.6.3 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a + md5: 5f22f07c2ab2dea8c66fe9585a062c96 + depends: + - __osx >=11.0 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 63895 + timestamp: 1725568783033 +- kind: conda + name: libexpat + version: 2.6.3 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda + sha256: 5cbe5a199fba14ade55457a468ce663aac0b54832c39aa54470b3889b4c75c4a + md5: 5f22f07c2ab2dea8c66fe9585a062c96 + depends: + - __osx >=11.0 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + purls: [] + size: 63895 + timestamp: 1725568783033 +- kind: conda + name: libffi + version: 3.4.2 + build: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + size: 39020 + timestamp: 1636488587153 +- kind: conda + name: libffi + version: 3.4.2 + build: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + purls: [] + size: 39020 + timestamp: 1636488587153 +- kind: conda + name: libffi + version: 3.4.2 + build: h3557bc0_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + size: 59450 + timestamp: 1636488255090 +- kind: conda + name: libffi + version: 3.4.2 + build: h3557bc0_5 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 59450 + timestamp: 1636488255090 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libffi + version: 3.4.2 + build: h8ffe710_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 + md5: 2c96d1b6915b408893f9472569dee135 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: MIT + license_family: MIT + size: 42063 + timestamp: 1636489106777 +- kind: conda + name: libffi + version: 3.4.2 + build: h8ffe710_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5 + md5: 2c96d1b6915b408893f9472569dee135 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: MIT + license_family: MIT + purls: [] + size: 42063 + timestamp: 1636489106777 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 848745 + timestamp: 1729027721139 +- kind: conda + name: libgcc + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 + md5: 511b511c5445e324066c3377481bcab8 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==14.2.0=*_1 + - libgomp 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 535243 + timestamp: 1729089435134 +- kind: conda + name: libgcc + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 + md5: 511b511c5445e324066c3377481bcab8 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==14.2.0=*_1 + - libgomp 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 535243 + timestamp: 1729089435134 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: he9431aa_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 + md5: 0694c249c61469f2c0f7e2990782af21 + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54104 + timestamp: 1729089444587 +- kind: conda + name: libgcc-ng + version: 14.2.0 + build: he9431aa_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 + md5: 0694c249c61469f2c0f7e2990782af21 + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54104 + timestamp: 1729089444587 +- kind: conda + name: libglib + version: 2.82.2 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + size: 3931898 + timestamp: 1729191404130 +- kind: conda + name: libglib + version: 2.82.2 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 3931898 + timestamp: 1729191404130 +- kind: conda + name: libglib + version: 2.82.2 + build: hc486b8e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + sha256: 6797d24de7acd298f81a86078c64e4f3fea6d551a3e8892205c9e72a37a7cc3c + md5: 47f6d85fe47b865e56c539f2ba5f4dad + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + size: 4020802 + timestamp: 1729191545578 +- kind: conda + name: libglib + version: 2.82.2 + build: hc486b8e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + sha256: 6797d24de7acd298f81a86078c64e4f3fea6d551a3e8892205c9e72a37a7cc3c + md5: 47f6d85fe47b865e56c539f2ba5f4dad + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.2 *_0 + license: LGPL-2.1-or-later + purls: [] + size: 4020802 + timestamp: 1729191545578 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libgomp + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf + md5: 376f0e73abbda6d23c0cb749adc195ef + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 463521 + timestamp: 1729089357313 +- kind: conda + name: libgomp + version: 14.2.0 + build: he277a41_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf + md5: 376f0e73abbda6d23c0cb749adc195ef + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 463521 + timestamp: 1729089357313 +- kind: conda + name: libiconv + version: '1.17' + build: h31becfc_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + size: 705787 + timestamp: 1702684557134 +- kind: conda + name: libiconv + version: '1.17' + build: h31becfc_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705787 + timestamp: 1702684557134 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + size: 705775 + timestamp: 1702682170569 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + purls: [] + size: 705775 + timestamp: 1702682170569 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.0.0-h31becfc_1.conda + sha256: 675bc1f2a8581cd34a86c412663ec29c5f90c1d9f8d11866aa1ade5cdbdf8429 + md5: ed24e702928be089d9ba3f05618515c6 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 647126 + timestamp: 1694475003570 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hb547adb_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + sha256: a42054eaa38e84fc1e5ab443facac4bbc9d1b6b6f23f54b7bf4f1eb687e1d993 + md5: 3ff1e053dc3a2b8e36b9bfa4256a58d1 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 547541 + timestamp: 1694475104253 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hcfcfb64_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda + sha256: 4e7808e3098b4b4ed7e287f63bb24f9045cc4d95bfd39f0db870fc2837d74dff + md5: 3f1b948619c45b1ca714d60c7389092c + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 822966 + timestamp: 1694475223854 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f + md5: ea25936bb4080d843790b586850f82b8 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 618575 + timestamp: 1694474974816 +- kind: conda + name: libnsl + version: 2.0.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + size: 34501 + timestamp: 1697358973269 +- kind: conda + name: libnsl + version: 2.0.1 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 34501 + timestamp: 1697358973269 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libpng + version: 1.6.44 + build: h3ca93ac_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda + sha256: 0d3d6ff9225f6918ac225e3839c0d91e5af1da08a4ebf59cac1bfd86018db945 + md5: 639ac6b55a40aa5de7b8c1b4d78f9e81 + depends: + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: zlib-acknowledgement + purls: [] + size: 348933 + timestamp: 1726235196095 +- kind: conda + name: libpng + version: 1.6.44 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + sha256: e5b14f7a01c2db4362d8591f42f82f336ed48d5e4079e4d1f65d0c2a3637ea78 + md5: f4cc49d7aa68316213e4b12be35308d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 290661 + timestamp: 1726234747153 +- kind: conda + name: libpng + version: 1.6.44 + build: hc14010f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.44-hc14010f_0.conda + sha256: 38f8759a3eb8060deabd4db41f0f023514d853e46ddcbd0ba21768fc4e563bb1 + md5: fb36e93f0ea6a6f5d2b99984f34b049e + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 263385 + timestamp: 1726234714421 +- kind: conda + name: libpng + version: 1.6.44 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.44-hc4a20ef_0.conda + sha256: 23b5ce15cf9c6017641a8396bab00ae807dd9f662718cfa7f61de114d0c97647 + md5: 5d25802b25fcc7419fa13e21affaeb3a + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 294907 + timestamp: 1726236639270 +- kind: conda + name: libsqlite + version: 3.47.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + sha256: 4f3cd0477c831eab48fb7fa3ed91d918aeb644fad9b4014726d445339750cdcc + md5: 964bef59135d876c596ae67b3315e812 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Unlicense + size: 884970 + timestamp: 1729592254351 +- kind: conda + name: libsqlite + version: 3.47.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.0-h2466b09_0.conda + sha256: 4f3cd0477c831eab48fb7fa3ed91d918aeb644fad9b4014726d445339750cdcc + md5: 964bef59135d876c596ae67b3315e812 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Unlicense + purls: [] + size: 884970 + timestamp: 1729592254351 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + sha256: 76ffc7a5823b51735c11d535f3666b3c9c7d1519f9fbb6fa9cdff79db01960b9 + md5: 540296f0ce9d3352188c15a89b30b9ac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 874704 + timestamp: 1729591931557 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.0-hadc24fc_0.conda + sha256: 76ffc7a5823b51735c11d535f3666b3c9c7d1519f9fbb6fa9cdff79db01960b9 + md5: 540296f0ce9d3352188c15a89b30b9ac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 874704 + timestamp: 1729591931557 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hbaaea75_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + sha256: 76aa4bbbaa2334689b16048f04ac4c7406e9bfb1f225ac7107fd2a73f85329cf + md5: 5bbe4802d5460b80620411fe1da8fec3 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 837789 + timestamp: 1729592072314 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hbaaea75_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_0.conda + sha256: 76aa4bbbaa2334689b16048f04ac4c7406e9bfb1f225ac7107fd2a73f85329cf + md5: 5bbe4802d5460b80620411fe1da8fec3 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 837789 + timestamp: 1729592072314 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + sha256: 469ed05e9a1622b0204a2b6cf620c9054bf6904e2ed818a1f91ee96a7bc64517 + md5: ccbe261fb8c1f1cd1a3122592247d3c4 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 1042108 + timestamp: 1729592001716 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hc4a20ef_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.0-hc4a20ef_0.conda + sha256: 469ed05e9a1622b0204a2b6cf620c9054bf6904e2ed818a1f91ee96a7bc64517 + md5: ccbe261fb8c1f1cd1a3122592247d3c4 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 1042108 + timestamp: 1729592001716 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: h3f4de04_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 + md5: 37f489acd39e22b623d2d1e5ac6d195c + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 3816794 + timestamp: 1729089463404 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: h3f4de04_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 + md5: 37f489acd39e22b623d2d1e5ac6d195c + depends: + - libgcc 14.2.0 he277a41_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3816794 + timestamp: 1729089463404 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54105 + timestamp: 1729027780628 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54105 + timestamp: 1729027780628 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: hf1166c9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd + md5: 0e75771b8a03afae5a2c6ce71bc733f5 + depends: + - libstdcxx 14.2.0 h3f4de04_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54133 + timestamp: 1729089498541 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: hf1166c9_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd + md5: 0e75771b8a03afae5a2c6ce71bc733f5 + depends: + - libstdcxx 14.2.0 h3f4de04_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 54133 + timestamp: 1729089498541 +- kind: conda + name: libtiff + version: 4.7.0 + build: he137b08_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-he137b08_1.conda + sha256: 9890121db85f6ef463fe12eb04ef1471176e3ef3b5e2d62e8d6dac713df00df4 + md5: 63872517c98aa305da58a757c443698e + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 428156 + timestamp: 1728232228989 +- kind: conda + name: libtiff + version: 4.7.0 + build: hec21d91_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-hec21d91_1.conda + sha256: 14ecb9e129b1b5ffd6d4bee48de95cd2cd0973c712e1b965d3ef977cca23936d + md5: 1f80061f5ba6956fcdc381f34618cd8d + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 464938 + timestamp: 1728232266969 +- kind: conda + name: libtiff + version: 4.7.0 + build: hfc51747_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.0-hfc51747_1.conda + sha256: 902cb9f7f54d17dcfd54ce050b1ce2bc944b9bbd1748913342c2ea1e1140f8bb + md5: eac317ed1cc6b9c0af0c27297e364665 + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.22,<1.23.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 978865 + timestamp: 1728232594877 +- kind: conda + name: libtiff + version: 4.7.0 + build: hfce79cd_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-hfce79cd_1.conda + sha256: 97ba24c74750b6e731b3fe0d2a751cda6148b4937d2cc3f72d43bf7b3885c39d + md5: b9abf45f7c64caf3303725f1aa0e9a4d + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=17 + - libdeflate >=1.22,<1.23.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 366323 + timestamp: 1728232400072 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libuuid + version: 2.38.1 + build: hb4cce97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + size: 35720 + timestamp: 1680113474501 +- kind: conda + name: libuuid + version: 2.38.1 + build: hb4cce97_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 35720 + timestamp: 1680113474501 +- kind: conda + name: libuv + version: 1.49.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 + md5: 4bc348e3a1a74d20a3f9beb866d75e0a + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 410500 + timestamp: 1729322654121 +- kind: conda + name: libuv + version: 1.49.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 + md5: 4bc348e3a1a74d20a3f9beb866d75e0a + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 410500 + timestamp: 1729322654121 +- kind: conda + name: libuv + version: 1.49.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 + md5: 1899e1ec2be63386c41c4db31d3056af + depends: + - libgcc >=13 + license: MIT + license_family: MIT + size: 627484 + timestamp: 1729322575379 +- kind: conda + name: libuv + version: 1.49.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 + md5: 1899e1ec2be63386c41c4db31d3056af + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 627484 + timestamp: 1729322575379 +- kind: conda + name: libuv + version: 1.49.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 + md5: 070e3c9ddab77e38799d5c30b109c633 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 884647 + timestamp: 1729322566955 +- kind: conda + name: libuv + version: 1.49.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 + md5: 070e3c9ddab77e38799d5c30b109c633 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 884647 + timestamp: 1729322566955 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.4.0-h31becfc_0.conda + sha256: 10dded60f274e29c573cfacf6e96f5d0fc374ee431250374a44cbd773916ab9d + md5: 5fd7ab3e5f382c70607fbac6335e6e19 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 363577 + timestamp: 1713201785160 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda + sha256: 0d4bad713a512d79bfeb4d61821f447afab8b0792aca823f505ce6b195e9fde5 + md5: c0af0edfebe780b19940e94871f1a765 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 287750 + timestamp: 1713200194013 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hcfcfb64_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda + sha256: d0ca51cb1de9192be9a3238e71fbcca5a535619c499c4f4c9b2ed41c14d36770 + md5: abd61d0ab127ec5cd68f62c2969e6f34 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 274359 + timestamp: 1713200524021 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f + md5: b26e8aa824079e1be0294e7152ca4559 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 438953 + timestamp: 1713199854503 +- kind: conda + name: libxcb + version: '1.16' + build: h013a479_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda + sha256: abae56e12a4c62730b899fdfb82628a9ac171c4ce144fc9f34ae024957a82a0e + md5: f0b599acdc82d5bc7e3b105833e7c5c8 + depends: + - m2w64-gcc-libs + - m2w64-gcc-libs-core + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 989459 + timestamp: 1724419883091 +- kind: conda + name: libxcb + version: 1.17.0 + build: h262b8f6_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + sha256: 461cab3d5650ac6db73a367de5c8eca50363966e862dcf60181d693236b1ae7b + md5: cd14ee5cca2464a425b1dbfc24d90db2 + depends: + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 397493 + timestamp: 1727280745441 +- kind: conda + name: libxcb + version: 1.17.0 + build: h8a09558_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 395888 + timestamp: 1727278577118 +- kind: conda + name: libxcb + version: 1.17.0 + build: hdb1d25a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + sha256: bd3816218924b1e43b275863e21a3e13a5db4a6da74cca8e60bc3c213eb62f71 + md5: af523aae2eca6dfa1c8eec693f5b9a79 + depends: + - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 323658 + timestamp: 1727278733917 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + size: 114269 + timestamp: 1702724369203 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: h31becfc_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 114269 + timestamp: 1702724369203 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libzlib + version: 1.3.1 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + md5: 41fbfac52c601159df6c01f875de31b9 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 55476 + timestamp: 1727963768015 +- kind: conda + name: libzlib + version: 1.3.1 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 + md5: 41fbfac52c601159df6c01f875de31b9 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 55476 + timestamp: 1727963768015 +- kind: conda + name: libzlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: libzlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: libzlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 66657 + timestamp: 1727963199518 +- kind: conda + name: libzlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 66657 + timestamp: 1727963199518 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 60963 + timestamp: 1727963148474 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 +- kind: conda + name: m2w64-gcc-libgfortran + version: 5.3.0 + build: '6' + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 + md5: 066552ac6b907ec6d72c0ddab29050dc + depends: + - m2w64-gcc-libs-core + - msys2-conda-epoch ==20160418 + license: GPL, LGPL, FDL, custom + size: 350687 + timestamp: 1608163451316 +- kind: conda + name: m2w64-gcc-libgfortran + version: 5.3.0 + build: '6' + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 + md5: 066552ac6b907ec6d72c0ddab29050dc + depends: + - m2w64-gcc-libs-core + - msys2-conda-epoch ==20160418 + license: GPL, LGPL, FDL, custom + purls: [] + size: 350687 + timestamp: 1608163451316 +- kind: conda + name: m2w64-gcc-libs + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa + md5: fe759119b8b3bfa720b8762c6fdc35de + depends: + - m2w64-gcc-libgfortran + - m2w64-gcc-libs-core + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + size: 532390 + timestamp: 1608163512830 +- kind: conda + name: m2w64-gcc-libs + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa + md5: fe759119b8b3bfa720b8762c6fdc35de + depends: + - m2w64-gcc-libgfortran + - m2w64-gcc-libs-core + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 532390 + timestamp: 1608163512830 +- kind: conda + name: m2w64-gcc-libs-core + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 + md5: 4289d80fb4d272f1f3b56cfe87ac90bd + depends: + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + size: 219240 + timestamp: 1608163481341 +- kind: conda + name: m2w64-gcc-libs-core + version: 5.3.0 + build: '7' + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 + md5: 4289d80fb4d272f1f3b56cfe87ac90bd + depends: + - m2w64-gmp + - m2w64-libwinpthread-git + - msys2-conda-epoch ==20160418 + license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] + size: 219240 + timestamp: 1608163481341 +- kind: conda + name: m2w64-gmp + version: 6.1.0 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 + md5: 53a1c73e1e3d185516d7e3af177596d9 + depends: + - msys2-conda-epoch ==20160418 + license: LGPL3 + size: 743501 + timestamp: 1608163782057 +- kind: conda + name: m2w64-gmp + version: 6.1.0 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + sha256: 7e3cd95f554660de45f8323fca359e904e8d203efaf07a4d311e46d611481ed1 + md5: 53a1c73e1e3d185516d7e3af177596d9 + depends: + - msys2-conda-epoch ==20160418 + license: LGPL3 + purls: [] + size: 743501 + timestamp: 1608163782057 +- kind: conda + name: m2w64-jq + version: '1.6' + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + sha256: d722a8c06f44dfb5f357608e6e1d40d1f1c926316bbee5d1e71d93823554646b + md5: 209cbf1b222dc774cb29ce57796500b3 + depends: + - m2w64-gcc-libs + - m2w64-oniguruma + license: MIT + license_family: MIT + size: 424702 + timestamp: 1591860215369 +- kind: conda + name: m2w64-jq + version: '1.6' + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-jq-1.6-h301d43c_0.tar.bz2 + sha256: d722a8c06f44dfb5f357608e6e1d40d1f1c926316bbee5d1e71d93823554646b + md5: 209cbf1b222dc774cb29ce57796500b3 + depends: + - m2w64-gcc-libs + - m2w64-oniguruma + license: MIT + license_family: MIT + purls: [] + size: 424702 + timestamp: 1591860215369 +- kind: conda + name: m2w64-libwinpthread-git + version: 5.0.0.4634.697f757 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 + md5: 774130a326dee16f1ceb05cc687ee4f0 + depends: + - msys2-conda-epoch ==20160418 + license: MIT, BSD + size: 31928 + timestamp: 1608166099896 +- kind: conda + name: m2w64-libwinpthread-git + version: 5.0.0.4634.697f757 + build: '2' + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + sha256: f63a09b2cae7defae0480f1740015d6235f1861afa6fe2e2d3e10bd0d1314ee0 + md5: 774130a326dee16f1ceb05cc687ee4f0 + depends: + - msys2-conda-epoch ==20160418 + license: MIT, BSD + purls: [] + size: 31928 + timestamp: 1608166099896 +- kind: conda + name: m2w64-oniguruma + version: 6.9.5 + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + sha256: 523edeac9788aa61243bd2ceb7b8bdb1a86b68c9f7f1aeb933085893d2886cc3 + md5: 61c9b808f92724106a63dd7b50979d6b + depends: + - m2w64-gcc-libs + license: BSD-2-Clause + license_family: BSD + size: 426599 + timestamp: 1591828659130 +- kind: conda + name: m2w64-oniguruma + version: 6.9.5 + build: h301d43c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/m2w64-oniguruma-6.9.5-h301d43c_0.tar.bz2 + sha256: 523edeac9788aa61243bd2ceb7b8bdb1a86b68c9f7f1aeb933085893d2886cc3 + md5: 61c9b808f92724106a63dd7b50979d6b + depends: + - m2w64-gcc-libs + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 426599 + timestamp: 1591828659130 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + size: 64356 + timestamp: 1686175179621 +- kind: conda + name: markdown-it-py + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 + md5: 93a8e71256479c62074356ef6ebf501b + depends: + - mdurl >=0.1,<1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + size: 64356 + timestamp: 1686175179621 +- kind: conda + name: mdurl + version: 0.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 14680 + timestamp: 1704317789138 +- kind: conda + name: mdurl + version: 0.1.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping + size: 14680 + timestamp: 1704317789138 +- kind: conda + name: more-itertools + version: 10.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + sha256: 2315b7dba237e16b0e1b601725a8e03e062421e0be28d8a25dc35dd9bd93a342 + md5: 3364591bebd600979606791e1dff7cb6 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 57345 + timestamp: 1725630183289 +- kind: conda + name: more-itertools + version: 10.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.5.0-pyhd8ed1ab_0.conda + sha256: 2315b7dba237e16b0e1b601725a8e03e062421e0be28d8a25dc35dd9bd93a342 + md5: 3364591bebd600979606791e1dff7cb6 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/more-itertools?source=hash-mapping + size: 57345 + timestamp: 1725630183289 +- kind: conda + name: msys2-conda-epoch + version: '20160418' + build: '1' + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 + md5: b0309b72560df66f71a9d5e34a5efdfa + size: 3227 + timestamp: 1608166968312 +- kind: conda + name: msys2-conda-epoch + version: '20160418' + build: '1' + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 + md5: b0309b72560df66f71a9d5e34a5efdfa + purls: [] + size: 3227 + timestamp: 1608166968312 +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + size: 802321 + timestamp: 1724658775723 +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 802321 + timestamp: 1724658775723 +- kind: conda + name: ncurses + version: '6.5' + build: hcccb83c_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 + md5: 91d49c85cacd92caa40cf375ef72a25d + depends: + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + size: 924472 + timestamp: 1724658573518 +- kind: conda + name: ncurses + version: '6.5' + build: hcccb83c_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 + md5: 91d49c85cacd92caa40cf375ef72a25d + depends: + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 924472 + timestamp: 1724658573518 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: nodejs + version: 22.9.0 + build: h08fde81_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + sha256: 736a4738aba32a03401aa25c8f740e4afe4aea02bc06651b59b06f0fdc024fdf + md5: 3771a3a6abe5a8db8910d5ebf144811b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=17 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 14859715 + timestamp: 1726671037225 +- kind: conda + name: nodejs + version: 22.9.0 + build: h08fde81_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-22.9.0-h08fde81_0.conda + sha256: 736a4738aba32a03401aa25c8f740e4afe4aea02bc06651b59b06f0fdc024fdf + md5: 3771a3a6abe5a8db8910d5ebf144811b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=17 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 14859715 + timestamp: 1726671037225 +- kind: conda + name: nodejs + version: 22.9.0 + build: h57928b3_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + sha256: 6d74f0dbb91eb2049199ba801a3db67965f990aef44084f9ae51a1f70c2996f6 + md5: 6aa54ed90a643a11a005491ff316b1c4 + license: MIT + license_family: MIT + size: 25378221 + timestamp: 1726657153171 +- kind: conda + name: nodejs + version: 22.9.0 + build: h57928b3_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/nodejs-22.9.0-h57928b3_0.conda + sha256: 6d74f0dbb91eb2049199ba801a3db67965f990aef44084f9ae51a1f70c2996f6 + md5: 6aa54ed90a643a11a005491ff316b1c4 + license: MIT + license_family: MIT + purls: [] + size: 25378221 + timestamp: 1726657153171 +- kind: conda + name: nodejs + version: 22.9.0 + build: h8374285_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + sha256: ff2186a51d389c18423109af3abf6377d4ef5b1370a81ee5f8fb2e036d79cf4f + md5: 6a9739c1ce3f9714b705a655872b5a4d + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 21653106 + timestamp: 1726665120657 +- kind: conda + name: nodejs + version: 22.9.0 + build: h8374285_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/nodejs-22.9.0-h8374285_0.conda + sha256: ff2186a51d389c18423109af3abf6377d4ef5b1370a81ee5f8fb2e036d79cf4f + md5: 6a9739c1ce3f9714b705a655872b5a4d + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21653106 + timestamp: 1726665120657 +- kind: conda + name: nodejs + version: 22.9.0 + build: hf235a45_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 + md5: 40255c9ffb722d614b02ca7aaee6abcb + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + size: 21198038 + timestamp: 1726661026112 +- kind: conda + name: nodejs + version: 22.9.0 + build: hf235a45_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/nodejs-22.9.0-hf235a45_0.conda + sha256: 1bc6445b7ecb3bff478d5a11eb3504e45eb5a3cdde24c6ec7339f80c193d24c8 + md5: 40255c9ffb722d614b02ca7aaee6abcb + depends: + - __glibc >=2.28,<3.0.a0 + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libuv >=1.48.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 21198038 + timestamp: 1726661026112 +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/4c/79/73735a6a5dad6059c085f240a4e74c9270feccd2bc66e4d31b5ca01d329c/numpy-2.1.2-cp312-cp312-win_amd64.whl + sha256: 456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/9b/b4/e3c7e6fab0f77fff6194afa173d1f2342073d91b1d3b4b30b17c3fb4407a/numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/b0/29/cb48a402ea879e645b16218718f3f7d9588a77d674a9dcf22e4c43487636/numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db + requires_python: '>=3.10' +- kind: pypi + name: numpy + version: 2.1.2 + url: https://files.pythonhosted.org/packages/c4/a7/af3329fda3c3ec31d9b650e42bbcd3422fc62a765cbb1405fde4177a0996/numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0 + requires_python: '>=3.10' +- kind: conda + name: oniguruma + version: 6.9.9 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + sha256: e21b1822736959ba434ebce452ee86844a11d918c8b1c48c71f15e9a932fd571 + md5: 475018b8e0b8720c985a185427f5bf13 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 250005 + timestamp: 1697487236819 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h31becfc_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/oniguruma-6.9.9-h31becfc_0.conda + sha256: e21b1822736959ba434ebce452ee86844a11d918c8b1c48c71f15e9a932fd571 + md5: 475018b8e0b8720c985a185427f5bf13 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 250005 + timestamp: 1697487236819 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + sha256: 66632aeef5b74e15746161db8fa8b5150a191ab05823d7d2f1587bdf96674c7b + md5: 770c654e0d5bfa3aa1e6ac5440815cda + license: BSD-2-Clause + license_family: BSD + size: 223231 + timestamp: 1697485732214 +- kind: conda + name: oniguruma + version: 6.9.9 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/oniguruma-6.9.9-h93a5062_0.conda + sha256: 66632aeef5b74e15746161db8fa8b5150a191ab05823d7d2f1587bdf96674c7b + md5: 770c654e0d5bfa3aa1e6ac5440815cda + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 223231 + timestamp: 1697485732214 +- kind: conda + name: oniguruma + version: 6.9.9 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed + md5: 77dab674d16c1525ebe65e67de30de0d + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 246869 + timestamp: 1697485543293 +- kind: conda + name: oniguruma + version: 6.9.9 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.9-hd590300_0.conda + sha256: dec1c78df7670d34880f71f75ac716f082d087494b4a2c6a90d5d75a82c933ed + md5: 77dab674d16c1525ebe65e67de30de0d + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 246869 + timestamp: 1697485543293 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h0d9d63b_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.2-h0d9d63b_0.conda + sha256: d83375856601bc67c11295b537548a937a6896ede9d0a51d78bf5e921ab07c6f + md5: fd2898519e839d5ceb778343f39a3176 + depends: + - libgcc-ng >=12 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 374964 + timestamp: 1709159226478 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h3d672ee_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda + sha256: dda71cbe094234ab208f3552dec1f4ca6f2e614175d010808d6cb66ecf0bc753 + md5: 7e7099ad94ac3b599808950cec30ad4e + depends: + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 237974 + timestamp: 1709159764160 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h488ebb8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + sha256: 5600a0b82df042bd27d01e4e687187411561dfc11cc05143a08ce29b64bf2af2 + md5: 7f2e286780f072ed750df46dc2631138 + depends: + - libgcc-ng >=12 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 341592 + timestamp: 1709159244431 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h9f1df11_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.2-h9f1df11_0.conda + sha256: 472d6eaffc1996e6af35ec8e91c967f472a536a470079bfa56383cc0dbf4d463 + md5: 5029846003f0bc14414b9128a1f7c84b + depends: + - libcxx >=16 + - libpng >=1.6.43,<1.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 316603 + timestamp: 1709159627299 +- kind: conda + name: openssl + version: 3.3.2 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + sha256: a45c42f3577294e22ac39ddb6ef5a64fd5322e8a6725afefbf4f2b4109340bf9 + md5: 1dc86753693df5e3326bb8a85b74c589 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 8396053 + timestamp: 1725412961673 +- kind: conda + name: openssl + version: 3.3.2 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + sha256: a45c42f3577294e22ac39ddb6ef5a64fd5322e8a6725afefbf4f2b4109340bf9 + md5: 1dc86753693df5e3326bb8a85b74c589 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 8396053 + timestamp: 1725412961673 +- kind: conda + name: openssl + version: 3.3.2 + build: h8359307_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 + md5: 1773ebccdc13ec603356e8ff1db9e958 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + size: 2882450 + timestamp: 1725410638874 +- kind: conda + name: openssl + version: 3.3.2 + build: h8359307_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + sha256: 940fa01c4dc6152158fe8943e05e55a1544cab639df0994e3b35937839e4f4d1 + md5: 1773ebccdc13ec603356e8ff1db9e958 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2882450 + timestamp: 1725410638874 +- kind: conda + name: openssl + version: 3.3.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + sha256: 4669d26dbf81e4d72093d8260f55d19d57204d82b1d9440be83d11d313b5990c + md5: 9e1e477b3f8ee3789297883faffa708b + depends: + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + size: 3428083 + timestamp: 1725412266679 +- kind: conda + name: openssl + version: 3.3.2 + build: h86ecc28_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.3.2-h86ecc28_0.conda + sha256: 4669d26dbf81e4d72093d8260f55d19d57204d82b1d9440be83d11d313b5990c + md5: 9e1e477b3f8ee3789297883faffa708b + depends: + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3428083 + timestamp: 1725412266679 +- kind: conda + name: openssl + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + sha256: cee91036686419f6dd6086902acf7142b4916e1c4ba042e9ca23e151da012b6d + md5: 4d638782050ab6faa27275bed57e9b4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + size: 2891789 + timestamp: 1725410790053 +- kind: conda + name: openssl + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + sha256: cee91036686419f6dd6086902acf7142b4916e1c4ba042e9ca23e151da012b6d + md5: 4d638782050ab6faa27275bed57e9b4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2891789 + timestamp: 1725410790053 +- kind: pypi + name: outcome + version: 1.3.0.post0 + url: https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl + sha256: e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b + requires_dist: + - attrs>=19.2.0 + requires_python: '>=3.7' +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + size: 50290 + timestamp: 1718189540074 +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 50290 + timestamp: 1718189540074 +- kind: conda + name: pathspec + version: 0.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d + md5: 17064acba08d3686f1135b5ec1b32b12 + depends: + - python >=3.7 + license: MPL-2.0 + license_family: MOZILLA + size: 41173 + timestamp: 1702250135032 +- kind: conda + name: pathspec + version: 0.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda + sha256: 4e534e66bfe8b1e035d2169d0e5b185450546b17e36764272863e22e0370be4d + md5: 17064acba08d3686f1135b5ec1b32b12 + depends: + - python >=3.7 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/pathspec?source=hash-mapping + size: 41173 + timestamp: 1702250135032 +- kind: conda + name: pcre2 + version: '10.44' + build: h070dd5b_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + sha256: e9f4b912e48514771d477f2ee955f59d4ff4ef799c3d4d16e4d0f335ce91df67 + md5: 94022de9682cb1a0bb18a99cbc3541b3 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 884590 + timestamp: 1723488793100 +- kind: conda + name: pcre2 + version: '10.44' + build: h070dd5b_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda + sha256: e9f4b912e48514771d477f2ee955f59d4ff4ef799c3d4d16e4d0f335ce91df67 + md5: 94022de9682cb1a0bb18a99cbc3541b3 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 884590 + timestamp: 1723488793100 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 952308 + timestamp: 1723488734144 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 952308 + timestamp: 1723488734144 +- kind: conda + name: pexpect + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pexpect + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pillow + version: 10.4.0 + build: py312h381445a_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py312h381445a_1.conda + sha256: 0b52e708ac4b72e6e1608de517cd4c8e6517dd525e23163a69bf73c7261399fc + md5: c57e54ae4acca720fb3a44bee93cb5b9 + depends: + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.16,<2.0.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 42468305 + timestamp: 1726075694989 +- kind: conda + name: pillow + version: 11.0.0 + build: py312h5ab5af3_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.0.0-py312h5ab5af3_0.conda + sha256: 3cf43a5eb1f67f3a5f3ef1ec3a685f8767019cce24dbe46c4b76fee8a54fbacf + md5: 1c4bdfe659cfdedd372685ce2494e97b + depends: + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41756471 + timestamp: 1729068045876 +- kind: conda + name: pillow + version: 11.0.0 + build: py312h7b63e92_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.0.0-py312h7b63e92_0.conda + sha256: 13a464bea02c0df0199c20ef6bad24a6bc336aaf55bf8d6a133d0fe664463224 + md5: 385f46a4df6f97892503a841121a9acf + depends: + - __glibc >=2.17,<3.0.a0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41948418 + timestamp: 1729065846594 +- kind: conda + name: pillow + version: 11.0.0 + build: py312haf37ca6_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.0.0-py312haf37ca6_0.conda + sha256: 727b4c3faecdb6f6809cf20c5f32d2df4af34e0d5b9146b7588383bcba7990e8 + md5: dc9b51fbd2b6f7fea9b5123458864dbb + depends: + - __osx >=11.0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 41737424 + timestamp: 1729065920347 +- kind: conda + name: pip + version: '24.2' + build: pyh8b19718_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + sha256: d820e5358bcb117fa6286e55d4550c60b0332443df62121df839eab2d11c890b + md5: 6c78fbb8ddfd64bcb55b5cbafd2d2c43 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + size: 1237976 + timestamp: 1724954490262 +- kind: conda + name: pip + version: '24.2' + build: pyh8b19718_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pip-24.2-pyh8b19718_1.conda + sha256: d820e5358bcb117fa6286e55d4550c60b0332443df62121df839eab2d11c890b + md5: 6c78fbb8ddfd64bcb55b5cbafd2d2c43 + depends: + - python >=3.8,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=hash-mapping + size: 1237976 + timestamp: 1724954490262 +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 20625 + timestamp: 1726613611845 +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 20625 + timestamp: 1726613611845 +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/31/dc/121be574222fc74d12ac42921728fb6ba8ac17264a1fdab1993263389082/playwright-1.48.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + sha256: 8ff8303409ebed76bed4c3d655340320b768817d900ba208b394fdd7d7939a5c + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/45/88/b6459c93a8bc0b96e7a33b6744bbef2740a0b78b0534542a037d220427f0/playwright-1.48.0-py3-none-win_amd64.whl + sha256: e0e87b0c4dc8fce83c725dd851aec37bc4e882bb225ec8a96bd83cf32d4f1623 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/64/41/d77c47743800fbeb86657611e651e56a17cbb4ebfefa1da0318dc39092df/playwright-1.48.0-py3-none-macosx_11_0_arm64.whl + sha256: 7da2eb51a19c7f3b523e9faa9d98e7af92e52eb983a099979ea79c9668e3cbf7 + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: pypi + name: playwright + version: 1.48.0 + url: https://files.pythonhosted.org/packages/f9/0c/8cde1a86a9a7449a0ba95197f42156198083be1749b717831fba16ab2b5f/playwright-1.48.0-py3-none-manylinux1_x86_64.whl + sha256: 8dabb80e62f667fe2640a8b694e26a7b884c0b4803f7514a3954fc849126227b + requires_dist: + - greenlet==3.1.1 + - pyee==12.0.0 + requires_python: '>=3.8' +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 23815 + timestamp: 1713667175451 +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 23815 + timestamp: 1713667175451 +- kind: conda + name: pnpm + version: 9.12.2 + build: h6417eb3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + sha256: 0caf7ddacb1d8adb16144a93cfaf7a70bff2f83e22cbaae4d3d91b71f28f9caf + md5: 711bc7fb6b870f4b5b180c181786d710 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + size: 3466596 + timestamp: 1729713864150 +- kind: conda + name: pnpm + version: 9.12.2 + build: h6417eb3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pnpm-9.12.2-h6417eb3_0.conda + sha256: 0caf7ddacb1d8adb16144a93cfaf7a70bff2f83e22cbaae4d3d91b71f28f9caf + md5: 711bc7fb6b870f4b5b180c181786d710 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3466596 + timestamp: 1729713864150 +- kind: conda + name: pnpm + version: 9.12.2 + build: haa868a1_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + sha256: ce0c2e4268cd81308b8c069564b9f7885d9c21ddd8b83120f0fabc66d9ab58d3 + md5: c70ffc202c1f5d9223a13a12310c874d + depends: + - nodejs >=22.9.0,<23.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 3319869 + timestamp: 1729714702980 +- kind: conda + name: pnpm + version: 9.12.2 + build: haa868a1_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pnpm-9.12.2-haa868a1_0.conda + sha256: ce0c2e4268cd81308b8c069564b9f7885d9c21ddd8b83120f0fabc66d9ab58d3 + md5: c70ffc202c1f5d9223a13a12310c874d + depends: + - nodejs >=22.9.0,<23.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 3319869 + timestamp: 1729714702980 +- kind: conda + name: pnpm + version: 9.12.2 + build: hbf5023e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + sha256: aa25e9d0085be78115c5104ff905f9930d8585901a7a8d7278083f87ff4f6d25 + md5: 15d1e168a06119b34c9bd39187ce2af3 + depends: + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + size: 3516854 + timestamp: 1729713906302 +- kind: conda + name: pnpm + version: 9.12.2 + build: hbf5023e_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pnpm-9.12.2-hbf5023e_0.conda + sha256: aa25e9d0085be78115c5104ff905f9930d8585901a7a8d7278083f87ff4f6d25 + md5: 15d1e168a06119b34c9bd39187ce2af3 + depends: + - libgcc >=13 + - libstdcxx >=13 + - nodejs >=22.6.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3516854 + timestamp: 1729713906302 +- kind: conda + name: pnpm + version: 9.12.2 + build: hef028c3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + sha256: 6fd70df2e5e5a25aede2dfadd17530b2e7ecc0c41da43af89efd09dbbda8ca38 + md5: 8a157c984a8e384507438d62275868d5 + depends: + - __osx >=11.0 + - libcxx >=17 + - nodejs >=22.9.0,<23.0a0 + license: MIT + license_family: MIT + size: 3473615 + timestamp: 1729714099186 +- kind: conda + name: pnpm + version: 9.12.2 + build: hef028c3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pnpm-9.12.2-hef028c3_0.conda + sha256: 6fd70df2e5e5a25aede2dfadd17530b2e7ecc0c41da43af89efd09dbbda8ca38 + md5: 8a157c984a8e384507438d62275868d5 + depends: + - __osx >=11.0 + - libcxx >=17 + - nodejs >=22.9.0,<23.0a0 + license: MIT + license_family: MIT + purls: [] + size: 3473615 + timestamp: 1729714099186 +- kind: conda + name: pthread-stubs + version: '0.4' + build: h86ecc28_1002 + build_number: 1002 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + sha256: 977dfb0cb3935d748521dd80262fe7169ab82920afd38ed14b7fee2ea5ec01ba + md5: bb5a90c93e3bac3d5690acf76b4a6386 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8342 + timestamp: 1726803319942 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hb9d3cd8_1002 + build_number: 1002 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 8252 + timestamp: 1726802366959 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hcd874cb_1001 + build_number: 1001 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 + sha256: bb5a6ddf1a609a63addd6d7b488b0f58d05092ea84e9203283409bff539e202a + md5: a1f820480193ea83582b13249a7e7bd9 + depends: + - m2w64-gcc-libs + license: MIT + license_family: MIT + purls: [] + size: 6417 + timestamp: 1606147814351 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hd74edd7_1002 + build_number: 1002 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 + md5: 415816daf82e0b23a736a069a75e9da7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 8381 + timestamp: 1726802424786 +- kind: conda + name: ptyprocess + version: 0.7.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + size: 16546 + timestamp: 1609419417991 +- kind: conda + name: ptyprocess + version: 0.7.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 16546 + timestamp: 1609419417991 +- kind: conda + name: pycparser + version: '2.22' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 105098 + timestamp: 1711811634025 +- kind: conda + name: pycparser + version: '2.22' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=hash-mapping + size: 105098 + timestamp: 1711811634025 +- kind: pypi + name: pyee + version: 12.0.0 + url: https://files.pythonhosted.org/packages/1d/0d/95993c08c721ec68892547f2117e8f9dfbcef2ca71e098533541b4a54d5f/pyee-12.0.0-py3-none-any.whl + sha256: 7b14b74320600049ccc7d0e0b1becd3b4bd0a03c745758225e31a59f4095c990 + requires_dist: + - typing-extensions + - build ; extra == 'dev' + - flake8 ; extra == 'dev' + - flake8-black ; extra == 'dev' + - pytest ; extra == 'dev' + - black ; extra == 'dev' + - isort ; extra == 'dev' + - jupyter-console ; extra == 'dev' + - mkdocs ; extra == 'dev' + - mkdocs-include-markdown-plugin ; extra == 'dev' + - mkdocstrings[python] ; extra == 'dev' + - sphinx ; extra == 'dev' + - toml ; extra == 'dev' + - tox ; extra == 'dev' + - trio ; extra == 'dev' + - twine ; extra == 'dev' + - twisted ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + - trio ; python_full_version >= '3.7' and extra == 'dev' + - trio-typing ; python_full_version >= '3.7' and extra == 'dev' + - pytest-asyncio ; python_full_version >= '3.4' and extra == 'dev' + - pytest-trio ; python_full_version >= '3.7' and extra == 'dev' + requires_python: '>=3.8' +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + size: 879295 + timestamp: 1714846885370 +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 879295 + timestamp: 1714846885370 +- kind: pypi + name: pyodide-py + version: 0.26.3 + url: https://files.pythonhosted.org/packages/6f/ec/70457045923b005761b19f78b85b467a64808e886c10c449f7758a1ba5f7/pyodide_py-0.26.3-py3-none-any.whl + sha256: b63b6847c8906aa8f3c17df362135d0407aabf1d4b023557aed721d822e347a8 + requires_python: '>=3.12' +- kind: pypi + name: pysocks + version: 1.7.1 + url: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl + sha256: 2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: conda + name: pytest + version: 8.3.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + sha256: e99376d0068455712109d233f5790458ff861aeceb458bfda74e353338e4d815 + md5: c03d61f31f38fdb9facf70c29958bf7a + depends: + - colorama + - exceptiongroup >=1.0.0rc8 + - iniconfig + - packaging + - pluggy <2,>=1.5 + - python >=3.8 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 258293 + timestamp: 1725977334143 +- kind: pypi + name: pytest-asyncio + version: 0.24.0 + url: https://files.pythonhosted.org/packages/96/31/6607dab48616902f76885dfcf62c08d929796fc3b2d2318faf9fd54dbed9/pytest_asyncio-0.24.0-py3-none-any.whl + sha256: a811296ed596b69bf0b6f3dc40f83bcaf341b155a269052d82efa2b25ac7037b + requires_dist: + - pytest<9,>=8.2 + - sphinx>=5.3 ; extra == 'docs' + - sphinx-rtd-theme>=1.0 ; extra == 'docs' + - coverage>=6.2 ; extra == 'testing' + - hypothesis>=5.7.1 ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: pytest-pyodide + version: 0.58.3 + url: https://files.pythonhosted.org/packages/cd/98/7a2d160bd1a997c6fc422647ccf907fcc1b14b8e4a89790fa1427b8f4d16/pytest_pyodide-0.58.3-py3-none-any.whl + sha256: 6425d8ac868090da70337bdef33bd8a082a353a4ecdb89f5371bcf58ac7390e7 + requires_dist: + - hypothesis + - pexpect + - playwright + - pytest + - pytest-asyncio + - selenium + - tblib>=3 + - build ; extra == 'test' + - pytest-cov ; extra == 'test' + - requests ; extra == 'test' + requires_python: '>=3.10' +- kind: conda + name: python + version: 3.12.7 + build: h5d932e8_0_cpython + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + sha256: 25570873d92d4d9490c6db780cc85e6c28bd3ff61dc1ece79f602cf82bc73bc1 + md5: e6cab21bb5787270388939cf41cc5f43 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 13762126 + timestamp: 1728057461028 +- kind: conda + name: python + version: 3.12.7 + build: h5d932e8_0_cpython + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.7-h5d932e8_0_cpython.conda + sha256: 25570873d92d4d9490c6db780cc85e6c28bd3ff61dc1ece79f602cf82bc73bc1 + md5: e6cab21bb5787270388939cf41cc5f43 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 13762126 + timestamp: 1728057461028 +- kind: conda + name: python + version: 3.12.7 + build: h739c21a_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef + md5: e0d82e57ebb456077565e6d82cd4a323 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 12975439 + timestamp: 1728057819519 +- kind: conda + name: python + version: 3.12.7 + build: h739c21a_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.7-h739c21a_0_cpython.conda + sha256: 45d7ca2074aa92594bd2f91a9003b338cc1df8a46b9492b7fc8167110783c3ef + md5: e0d82e57ebb456077565e6d82cd4a323 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 12975439 + timestamp: 1728057819519 +- kind: conda + name: python + version: 3.12.7 + build: hc5c86c4_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d + md5: 0515111a9cdf69f83278f7c197db9807 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 31574780 + timestamp: 1728059777603 +- kind: conda + name: python + version: 3.12.7 + build: hc5c86c4_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.7-hc5c86c4_0_cpython.conda + sha256: 674be31ff152d9f0e0fe16959a45e3803a730fc4f54d87df6a9ac4e6a698c41d + md5: 0515111a9cdf69f83278f7c197db9807 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31574780 + timestamp: 1728059777603 +- kind: conda + name: python + version: 3.12.7 + build: hce54a09_0_cpython + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 + md5: 21f1f7c6ccf6b747c5086d2422c230e1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + size: 15987537 + timestamp: 1728057382072 +- kind: conda + name: python + version: 3.12.7 + build: hce54a09_0_cpython + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.7-hce54a09_0_cpython.conda + sha256: 2308cfa9ec563360d29ced7fd13a6b60b9a7b3cf8961a95c78c69f486211d018 + md5: 21f1f7c6ccf6b747c5086d2422c230e1 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 15987537 + timestamp: 1728057382072 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + sha256: 5ccdad9981753cc4a2d126e356673a21c0cd5b34e209cb8d476a3947d4ad9b39 + md5: 62b20f305498284a07dc6c45fd0e5c87 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6329 + timestamp: 1723823366253 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + sha256: 5ccdad9981753cc4a2d126e356673a21c0cd5b34e209cb8d476a3947d4ad9b39 + md5: 62b20f305498284a07dc6c45fd0e5c87 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6329 + timestamp: 1723823366253 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6278 + timestamp: 1723823099686 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6278 + timestamp: 1723823099686 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + sha256: 9486662af81a219e96d343449eff242f38d7c5128ced5ce5acf85857265058d6 + md5: e8681f534453af7afab4cd2bc1423eec + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6730 + timestamp: 1723823139725 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.12-5_cp312.conda + sha256: 9486662af81a219e96d343449eff242f38d7c5128ced5ce5acf85857265058d6 + md5: e8681f534453af7afab4cd2bc1423eec + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6730 + timestamp: 1723823139725 +- kind: conda + name: pywin32-ctypes + version: 0.2.3 + build: py312h2e8e312_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + sha256: 3e3b97740b4ec2f54debf7bfdbaa9a81a7aabd4549051b926de91d05304c4948 + md5: c5f1cb65c56ec74687801960f8a31eb5 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 57449 + timestamp: 1727282288065 +- kind: conda + name: pywin32-ctypes + version: 0.2.3 + build: py312h2e8e312_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-ctypes-0.2.3-py312h2e8e312_1.conda + sha256: 3e3b97740b4ec2f54debf7bfdbaa9a81a7aabd4549051b926de91d05304c4948 + md5: c5f1cb65c56ec74687801960f8a31eb5 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pywin32-ctypes?source=hash-mapping + size: 57449 + timestamp: 1727282288065 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: readline + version: '8.2' + build: h8fc344f_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 294092 + timestamp: 1679532238805 +- kind: conda + name: readline + version: '8.2' + build: h8fc344f_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 294092 + timestamp: 1679532238805 +- kind: conda + name: readline + version: '8.2' + build: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 250351 + timestamp: 1679532511311 +- kind: conda + name: readline + version: '8.2' + build: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 250351 + timestamp: 1679532511311 +- kind: conda + name: rich + version: 13.9.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + sha256: ec2a69babe41085a5bcec4ef80b2d5bade2ca399d971f57894dfb96cf59a18d1 + md5: 50dd5529812447e2b4e2a5dd6a6f1655 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + size: 185320 + timestamp: 1729623039134 +- kind: conda + name: rich + version: 13.9.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.3-pyhd8ed1ab_0.conda + sha256: ec2a69babe41085a5bcec4ef80b2d5bade2ca399d971f57894dfb96cf59a18d1 + md5: 50dd5529812447e2b4e2a5dd6a6f1655 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.8 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rich?source=hash-mapping + size: 185320 + timestamp: 1729623039134 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h7900ff3_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + sha256: c6d5d0bc7fb6cbfa3b8be8f2399a3c1308b3392a4e20bd1a0f29a828fda5ab20 + md5: 4840da9db2808db946a0d979603c6de4 + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 31601 + timestamp: 1725915741329 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h7900ff3_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.3.3-py312h7900ff3_3.conda + sha256: c6d5d0bc7fb6cbfa3b8be8f2399a3c1308b3392a4e20bd1a0f29a828fda5ab20 + md5: 4840da9db2808db946a0d979603c6de4 + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31601 + timestamp: 1725915741329 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h8025657_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + sha256: fd6bc45ba0c6bb097ad98037ad8d2ddf2449f28c2eedf57dfff54eeceefe90c6 + md5: 4ae02e3717828f5e92dfae068845afdd + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + size: 31394 + timestamp: 1725917363210 +- kind: conda + name: secretstorage + version: 3.3.3 + build: py312h8025657_3 + build_number: 3 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.3.3-py312h8025657_3.conda + sha256: fd6bc45ba0c6bb097ad98037ad8d2ddf2449f28c2eedf57dfff54eeceefe90c6 + md5: 4ae02e3717828f5e92dfae068845afdd + depends: + - cryptography + - dbus + - jeepney >=0.6 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 31394 + timestamp: 1725917363210 +- kind: pypi + name: selenium + version: 4.25.0 + url: https://files.pythonhosted.org/packages/aa/85/fa44f23dd5d5066a72f7c4304cce4b5ff9a6e7fd92431a48b2c63fbf63ec/selenium-4.25.0-py3-none-any.whl + sha256: 3798d2d12b4a570bc5790163ba57fef10b2afee958bf1d80f2a3cf07c4141f33 + requires_dist: + - urllib3[socks]>=1.26,<3 + - trio~=0.17 + - trio-websocket~=0.9 + - certifi>=2021.10.8 + - typing-extensions~=4.9 + - websocket-client~=1.8 + requires_python: '>=3.8' +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 777462 + timestamp: 1727249510532 +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 777462 + timestamp: 1727249510532 +- kind: conda + name: shellingham + version: 1.5.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 14568 + timestamp: 1698144516278 +- kind: conda + name: shellingham + version: 1.5.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_0.conda + sha256: 3c49a0a101c41b7cf6ac05a1872d7a1f91f1b6d02eecb4a36b605a19517862bb + md5: d08db09a552699ee9e7eec56b4eb3899 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/shellingham?source=hash-mapping + size: 14568 + timestamp: 1698144516278 +- kind: conda + name: sniffio + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + size: 15064 + timestamp: 1708953086199 +- kind: conda + name: sniffio + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping + size: 15064 + timestamp: 1708953086199 +- kind: pypi + name: sortedcontainers + version: 2.4.0 + url: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- kind: pypi + name: tblib + version: 3.0.0 + url: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + sha256: 80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129 + requires_python: '>=3.8' +- kind: conda + name: tk + version: 8.6.13 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3351802 + timestamp: 1695506242997 +- kind: conda + name: tk + version: 8.6.13 + build: h194ca79_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3351802 + timestamp: 1695506242997 +- kind: conda + name: tk + version: 8.6.13 + build: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3145523 + timestamp: 1699202432999 +- kind: conda + name: tk + version: 8.6.13 + build: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3145523 + timestamp: 1699202432999 +- kind: conda + name: tk + version: 8.6.13 + build: h5226925_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: fc048363eb8f03cd1737600a5d08aafe + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: TCL + license_family: BSD + size: 3503410 + timestamp: 1699202577803 +- kind: conda + name: tk + version: 8.6.13 + build: h5226925_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: fc048363eb8f03cd1737600a5d08aafe + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: TCL + license_family: BSD + purls: [] + size: 3503410 + timestamp: 1699202577803 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tomli + version: 2.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 18203 + timestamp: 1727974767524 +- kind: conda + name: tomli + version: 2.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 18203 + timestamp: 1727974767524 +- kind: conda + name: tomli-w + version: 1.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + sha256: 25b88bb2c4e79be642d8e5b5738781404055cd596403a20511e6fa30f0c71585 + md5: 2c5eb5b3a0fd2c4787d8162f57da2a20 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 12323 + timestamp: 1728405537678 +- kind: conda + name: tomli-w + version: 1.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-w-1.1.0-pyhd8ed1ab_0.conda + sha256: 25b88bb2c4e79be642d8e5b5738781404055cd596403a20511e6fa30f0c71585 + md5: 2c5eb5b3a0fd2c4787d8162f57da2a20 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli-w?source=hash-mapping + size: 12323 + timestamp: 1728405537678 +- kind: conda + name: tomlkit + version: 0.13.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + sha256: 2ccfe8dafdc1f1af944bca6bdf28fa97b5fa6125d84b8895a4e918a020853c12 + md5: 0062a5f3347733f67b0f33ca48cc21dd + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 37279 + timestamp: 1723631592742 +- kind: conda + name: tomlkit + version: 0.13.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_0.conda + sha256: 2ccfe8dafdc1f1af944bca6bdf28fa97b5fa6125d84b8895a4e918a020853c12 + md5: 0062a5f3347733f67b0f33ca48cc21dd + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomlkit?source=hash-mapping + size: 37279 + timestamp: 1723631592742 +- kind: pypi + name: trio + version: 0.27.0 + url: https://files.pythonhosted.org/packages/3c/83/ec3196c360afffbc5b342ead48d1eb7393dd74fa70bca75d33905a86f211/trio-0.27.0-py3-none-any.whl + sha256: 68eabbcf8f457d925df62da780eff15ff5dc68fd6b367e2dde59f7aaf2a0b884 + requires_dist: + - attrs>=23.2.0 + - sortedcontainers + - idna + - outcome + - sniffio>=1.3.0 + - cffi>=1.14 ; implementation_name != 'pypy' and os_name == 'nt' + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.8' +- kind: pypi + name: trio-websocket + version: 0.11.1 + url: https://files.pythonhosted.org/packages/48/be/a9ae5f50cad5b6f85bd2574c2c923730098530096e170c1ce7452394d7aa/trio_websocket-0.11.1-py3-none-any.whl + sha256: 520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638 + requires_dist: + - trio>=0.11 + - wsproto>=0.14 + - exceptiongroup ; python_full_version < '3.11' + requires_python: '>=3.7' +- kind: conda + name: trove-classifiers + version: 2024.10.21.16 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + sha256: 591e4ffdc95660b9e596c15b65cad35a70b36235f02dbd089ccc198dd5af0e71 + md5: 501f6d3288160a31d99a2f1321e77393 + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + size: 18429 + timestamp: 1729552033760 +- kind: conda + name: trove-classifiers + version: 2024.10.21.16 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.10.21.16-pyhd8ed1ab_0.conda + sha256: 591e4ffdc95660b9e596c15b65cad35a70b36235f02dbd089ccc198dd5af0e71 + md5: 501f6d3288160a31d99a2f1321e77393 + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/trove-classifiers?source=hash-mapping + size: 18429 + timestamp: 1729552033760 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + purls: [] + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: ucrt + version: 10.0.22621.0 + build: h57928b3_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 + constrains: + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + size: 559710 + timestamp: 1728377334097 +- kind: conda + name: ucrt + version: 10.0.22621.0 + build: h57928b3_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 + constrains: + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + purls: [] + size: 559710 + timestamp: 1728377334097 +- kind: pypi + name: urllib3 + version: 2.2.3 + url: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + sha256: ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2<5,>=4 ; extra == 'h2' + - pysocks!=1.5.7,<2.0,>=1.5.6 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- kind: conda + name: userpath + version: 1.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + sha256: c8cbddd625340e1b00b53bafabc764526ee85f7ddb91018424bab0eea057796d + md5: 5bf074c9253a3bf914becfc50757406f + depends: + - click + - python >=3.6 + license: MIT + license_family: MIT + size: 17423 + timestamp: 1632758637093 +- kind: conda + name: userpath + version: 1.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/userpath-1.7.0-pyhd8ed1ab_0.tar.bz2 + sha256: c8cbddd625340e1b00b53bafabc764526ee85f7ddb91018424bab0eea057796d + md5: 5bf074c9253a3bf914becfc50757406f + depends: + - click + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/userpath?source=hash-mapping + size: 17423 + timestamp: 1632758637093 +- kind: conda + name: uv + version: 0.4.26 + build: h0f3a69f_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + sha256: 4f05a61c3c3127ce7e487001215d20f49da0563fa4335462b2f6cc0028bb265b + md5: c4316a4c2b47ae154259fa5caffd53f1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + size: 9446110 + timestamp: 1729774270770 +- kind: conda + name: uv + version: 0.4.26 + build: h0f3a69f_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/uv-0.4.26-h0f3a69f_0.conda + sha256: 4f05a61c3c3127ce7e487001215d20f49da0563fa4335462b2f6cc0028bb265b + md5: c4316a4c2b47ae154259fa5caffd53f1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 9446110 + timestamp: 1729774270770 +- kind: conda + name: uv + version: 0.4.26 + build: h2016286_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + sha256: f63f7ab9e410899daf66e7ff343020b4bb8cf5f52413acca0dcb95ae9b04f854 + md5: f3f6ad5ca3aca4e0e5fd0f7f5f156093 + depends: + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + size: 8929757 + timestamp: 1729774724816 +- kind: conda + name: uv + version: 0.4.26 + build: h2016286_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.4.26-h2016286_0.conda + sha256: f63f7ab9e410899daf66e7ff343020b4bb8cf5f52413acca0dcb95ae9b04f854 + md5: f3f6ad5ca3aca4e0e5fd0f7f5f156093 + depends: + - libgcc >=13 + - libstdcxx >=13 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR MIT + purls: [] + size: 8929757 + timestamp: 1729774724816 +- kind: conda + name: uv + version: 0.4.26 + build: h41fe3af_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + sha256: f9530088e0a7319946c0dbc51c2e82bfa964fa3cb548e986053c7d8b6698056d + md5: 8beaeac747a7887e458e7de7e3d9fd6d + depends: + - __osx >=11.0 + - libcxx >=17 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR MIT + size: 8421278 + timestamp: 1729775629422 +- kind: conda + name: uv + version: 0.4.26 + build: h41fe3af_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uv-0.4.26-h41fe3af_0.conda + sha256: f9530088e0a7319946c0dbc51c2e82bfa964fa3cb548e986053c7d8b6698056d + md5: 8beaeac747a7887e458e7de7e3d9fd6d + depends: + - __osx >=11.0 + - libcxx >=17 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR MIT + purls: [] + size: 8421278 + timestamp: 1729775629422 +- kind: conda + name: uv + version: 0.4.26 + build: ha08ef0e_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + sha256: 57691a29d941ffbbae312c6dedccc303b6303e58487803e84db20a3304c0d269 + md5: a09f8193bdf8d1512340e8ec2432e82d + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 OR MIT + size: 10344775 + timestamp: 1729775595022 +- kind: conda + name: uv + version: 0.4.26 + build: ha08ef0e_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/uv-0.4.26-ha08ef0e_0.conda + sha256: 57691a29d941ffbbae312c6dedccc303b6303e58487803e84db20a3304c0d269 + md5: a09f8193bdf8d1512340e8ec2432e82d + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 OR MIT + purls: [] + size: 10344775 + timestamp: 1729775595022 +- kind: conda + name: vc + version: '14.3' + build: ha32ba9b_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 + depends: + - vc14_runtime >=14.38.33135 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + size: 17447 + timestamp: 1728400826998 +- kind: conda + name: vc + version: '14.3' + build: ha32ba9b_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 + depends: + - vc14_runtime >=14.38.33135 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17447 + timestamp: 1728400826998 +- kind: conda + name: vc14_runtime + version: 14.40.33810 + build: hcc2c482_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + size: 750719 + timestamp: 1728401055788 +- kind: conda + name: vc14_runtime + version: 14.40.33810 + build: hcc2c482_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + purls: [] + size: 750719 + timestamp: 1728401055788 +- kind: conda + name: virtualenv + version: 20.27.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + sha256: 18bae5ff9f02793ca56d295f0a5f1d4443623ee3be09a6805eb7d4b18245968c + md5: a6ed1227ba6ec37cfc2b25e6512f729f + depends: + - distlib <1,>=0.3.7 + - filelock <4,>=3.12.2 + - platformdirs <5,>=3.9.1 + - python >=3.8 + license: MIT + license_family: MIT + size: 2952166 + timestamp: 1729243861344 +- kind: conda + name: virtualenv + version: 20.27.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.27.0-pyhd8ed1ab_0.conda + sha256: 18bae5ff9f02793ca56d295f0a5f1d4443623ee3be09a6805eb7d4b18245968c + md5: a6ed1227ba6ec37cfc2b25e6512f729f + depends: + - distlib <1,>=0.3.7 + - filelock <4,>=3.12.2 + - platformdirs <5,>=3.9.1 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/virtualenv?source=hash-mapping + size: 2952166 + timestamp: 1729243861344 +- kind: conda + name: vs2015_runtime + version: 14.40.33810 + build: h3bf8584_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 + depends: + - vc14_runtime >=14.40.33810 + license: BSD-3-Clause + license_family: BSD + size: 17453 + timestamp: 1728400827536 +- kind: conda + name: vs2015_runtime + version: 14.40.33810 + build: h3bf8584_22 + build_number: 22 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 + depends: + - vc14_runtime >=14.40.33810 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 17453 + timestamp: 1728400827536 +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/1b/21/c0f3e031efe5f009215975eb7dbea86b55a69c4f02420965d1f45f43865e/wasmtime-25.0.0-py3-none-win_amd64.whl + sha256: f8a2a213b9179965db2d2eedececd69a37e287e902330509afae51c71a3a6842 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/5c/ba/f551b829378d65d0e0494fdb492942a0ed2dc7f40681b2438a47d1f4af86/wasmtime-25.0.0-py3-none-manylinux1_x86_64.whl + sha256: b4364e14d44e3b7afe6a40bf608e9d0d2c40b09dece441d20f4f6e31906b729c + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/b7/36/5e83b5f7858fe1003cbb89d0d5716f628b9a00fafc3762665f06ca4ef75d/wasmtime-25.0.0-py3-none-manylinux2014_aarch64.whl + sha256: a07445073cf36a6e5d1dc28246a897dcbdaa537ba8be8805be65422ecca297eb + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: wasmtime + version: 25.0.0 + url: https://files.pythonhosted.org/packages/cc/f0/d415d6b31ba69cfca04b2d5e83fbb5fc05335323712fd91948a1a53d13be/wasmtime-25.0.0-py3-none-macosx_11_0_arm64.whl + sha256: 5bdf1214ee3ee78a4a8a92da339f4c4c8c109e65af881b37f4adfc05d02af426 + requires_dist: + - importlib-resources>=5.10 + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pycparser ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - componentize-py ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: websocket-client + version: 1.8.0 + url: https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl + sha256: 17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526 + requires_dist: + - sphinx>=6.0 ; extra == 'docs' + - sphinx-rtd-theme>=1.1.0 ; extra == 'docs' + - myst-parser>=2.0.0 ; extra == 'docs' + - python-socks ; extra == 'optional' + - wsaccel ; extra == 'optional' + - websockets ; extra == 'test' + requires_python: '>=3.8' +- kind: conda + name: wheel + version: 0.44.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 58585 + timestamp: 1722797131787 +- kind: conda + name: wheel + version: 0.44.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping + size: 58585 + timestamp: 1722797131787 +- kind: pypi + name: wsproto + version: 1.2.0 + url: https://files.pythonhosted.org/packages/78/58/e860788190eba3bcce367f74d29c4675466ce8dddfba85f7827588416f01/wsproto-1.2.0-py3-none-any.whl + sha256: b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736 + requires_dist: + - h11<1,>=0.9.0 + requires_python: '>=3.7.0' +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: h86ecc28_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.11-h86ecc28_1.conda + sha256: a00c4c6054209c84fb460c5e4ae7193c335a9ee1851645c9ad59312438e853f7 + md5: c5f72a733c461aa7785518d29b997cc8 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 15690 + timestamp: 1727036097294 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + sha256: 532a046fee0b3a402db867b6ec55c84ba4cdedb91d817147c8feeae9766be3d6 + md5: 77cbc488235ebbaab2b6e912d3934bae + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 14679 + timestamp: 1727034741045 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hcd874cb_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda + sha256: 8c5b976e3b36001bdefdb41fb70415f9c07eff631f1f0155f3225a7649320e77 + md5: c46ba8712093cb0114404ae8a7582e1a + depends: + - m2w64-gcc-libs + - m2w64-gcc-libs-core + license: MIT + license_family: MIT + purls: [] + size: 51297 + timestamp: 1684638355740 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hd74edd7_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + sha256: 7113618021cf6c80831a429b2ebb9d639f3c43cf7fe2257d235dc6ae0ab43289 + md5: 7e0125f8fb619620a0011dc9297e2493 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 13515 + timestamp: 1727034783560 +- kind: conda + name: xorg-libxdmcp + version: 1.1.3 + build: hcd874cb_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 + sha256: f51205d33c07d744ec177243e5d9b874002910c731954f2c8da82459be462b93 + md5: 46878ebb6b9cbd8afcf8088d7ef00ece + depends: + - m2w64-gcc-libs + license: MIT + license_family: MIT + purls: [] + size: 67908 + timestamp: 1610072296570 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: h57736b2_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda + sha256: efcc150da5926cf244f757b8376d96a4db78bc15b8d90ca9f56ac6e75755971f + md5: 25a5a7b797fe6e084e04ffe2db02fc62 + depends: + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 20615 + timestamp: 1727796660574 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee + md5: 8035c64cb77ed555e3f150b7b3972480 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + purls: [] + size: 19901 + timestamp: 1727794976192 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + sha256: 9939a166d780700d81023546759102b33fdc2c5f11ef09f5f66c77210fd334c8 + md5: 77c447f48cab5d3a15ac224edb86a968 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 18487 + timestamp: 1727795205022 +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: xz + version: 5.2.6 + build: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + size: 235693 + timestamp: 1660346961024 +- kind: conda + name: xz + version: 5.2.6 + build: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 235693 + timestamp: 1660346961024 +- kind: conda + name: xz + version: 5.2.6 + build: h8d14728_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 + md5: 515d77642eaa3639413c6b1bc3f94219 + depends: + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + license: LGPL-2.1 and GPL-2.0 + size: 217804 + timestamp: 1660346976440 +- kind: conda + name: xz + version: 5.2.6 + build: h8d14728_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + sha256: 54d9778f75a02723784dc63aff4126ff6e6749ba21d11a6d03c1f4775f269fe0 + md5: 515d77642eaa3639413c6b1bc3f94219 + depends: + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 217804 + timestamp: 1660346976440 +- kind: conda + name: xz + version: 5.2.6 + build: h9cdd2b7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 + md5: 83baad393a31d59c20b63ba4da6592df + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + size: 440555 + timestamp: 1660348056328 +- kind: conda + name: xz + version: 5.2.6 + build: h9cdd2b7_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/xz-5.2.6-h9cdd2b7_0.tar.bz2 + sha256: 93f58a7b393adf41fa007ac8c55978765e957e90cd31877ece1e5a343cb98220 + md5: 83baad393a31d59c20b63ba4da6592df + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 440555 + timestamp: 1660348056328 +- kind: conda + name: zipp + version: 3.20.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 21409 + timestamp: 1726248679175 +- kind: conda + name: zipp + version: 3.20.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 21409 + timestamp: 1726248679175 +- kind: conda + name: zlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + size: 77606 + timestamp: 1727963209370 +- kind: conda + name: zlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + purls: [] + size: 77606 + timestamp: 1727963209370 +- kind: conda + name: zlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + sha256: b4f649aa3ecdae384d5dad7074e198bff120edd3dfb816588e31738fc6d627b1 + md5: bc230abb5d21b63ff4799b0e75204783 + depends: + - libgcc >=13 + - libzlib 1.3.1 h86ecc28_2 + license: Zlib + license_family: Other + size: 95582 + timestamp: 1727963203597 +- kind: conda + name: zlib + version: 1.3.1 + build: h86ecc28_2 + build_number: 2 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda + sha256: b4f649aa3ecdae384d5dad7074e198bff120edd3dfb816588e31738fc6d627b1 + md5: bc230abb5d21b63ff4799b0e75204783 + depends: + - libgcc >=13 + - libzlib 1.3.1 h86ecc28_2 + license: Zlib + license_family: Other + purls: [] + size: 95582 + timestamp: 1727963203597 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + size: 92286 + timestamp: 1727963153079 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + purls: [] + size: 92286 + timestamp: 1727963153079 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 330788 + timestamp: 1725305806565 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h15fbf35_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 330788 + timestamp: 1725305806565 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h7606c53_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + sha256: 3e0c718aa18dcac7f080844dbe0aea41a9cea75083019ce02e8a784926239826 + md5: a92cc3435b2fd6f51463f5a4db5c50b1 + depends: + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 320624 + timestamp: 1725305934189 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h7606c53_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py312h7606c53_1.conda + sha256: 3e0c718aa18dcac7f080844dbe0aea41a9cea75083019ce02e8a784926239826 + md5: a92cc3435b2fd6f51463f5a4db5c50b1 + depends: + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 320624 + timestamp: 1725305934189 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hb698573_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + sha256: 2681c2a249752bdc7978e59ee2f34fcdfcbfda80029b84b8e5fec8dbc9e3af25 + md5: ffcb8e97e62af42075e0e5f46bb9856e + depends: + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 392496 + timestamp: 1725305808244 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hb698573_1 + build_number: 1 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + sha256: 2681c2a249752bdc7978e59ee2f34fcdfcbfda80029b84b8e5fec8dbc9e3af25 + md5: ffcb8e97e62af42075e0e5f46bb9856e + depends: + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 392496 + timestamp: 1725305808244 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hef9b889_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b + md5: 8b7069e9792ee4e5b4919a7a306d2e67 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 419552 + timestamp: 1725305670210 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312hef9b889_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b + md5: 8b7069e9792ee4e5b4919a7a306d2e67 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 419552 + timestamp: 1725305670210 +- kind: conda + name: zstd + version: 1.5.6 + build: h02f22dd_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + sha256: 484f9d0722c77685ae379fbff3ccd662af9ead7e59eb39cd6d0c677cdf25ff6c + md5: be8d5f8cf21aed237b8b182ea86b3dd6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 539937 + timestamp: 1714723130243 +- kind: conda + name: zstd + version: 1.5.6 + build: h02f22dd_0 + subdir: linux-aarch64 + url: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + sha256: 484f9d0722c77685ae379fbff3ccd662af9ead7e59eb39cd6d0c677cdf25ff6c + md5: be8d5f8cf21aed237b8b182ea86b3dd6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 539937 + timestamp: 1714723130243 +- kind: conda + name: zstd + version: 1.5.6 + build: h0ea2cb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + md5: 9a17230f95733c04dc40a2b1e5491d74 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + size: 349143 + timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: h0ea2cb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + md5: 9a17230f95733c04dc40a2b1e5491d74 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 349143 + timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 554846 + timestamp: 1714722996770 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 554846 + timestamp: 1714722996770 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 405089 + timestamp: 1714723101397 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 405089 + timestamp: 1714723101397 diff --git a/packages/transform-io/pixi.toml b/packages/transform-io/pixi.toml new file mode 100644 index 000000000..43bfb4253 --- /dev/null +++ b/packages/transform-io/pixi.toml @@ -0,0 +1,139 @@ +[project] +authors = ["Matt McCormick "] +channels = ["conda-forge"] +description = "Input and output for scientific and medical transform file formats." +name = "transform-io" +platforms = ["win-64", "linux-64", "linux-aarch64", "osx-arm64"] +version = "0.1.0" + +[tasks] + +[dependencies] +python = "3.12.*" +pnpm = ">=9.12.1,<10" +hatch = ">=1.13.0,<2" +pip = ">=24.2,<25" + +[target.win-64.dependencies] +m2w64-jq = ">=1.6.0,<2" + +[target.unix.dependencies] +jq = ">=1.7.1,<2" + +[tasks.version-sync-typescript] +cmd = '''version=$(cat package.json | jq .version) && + jq ".version = $version" typescript/package.json > typescript/package.json.tmp && + mv typescript/package.json.tmp typescript/package.json''' + +[tasks.version-sync-python-wasi] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + echo "version is $version" && + hatch version $version''' +cwd = "python/itkwasm-transform-io-wasi" + +[tasks.version-sync-python-emscripten] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-transform-io-emscripten" + +[tasks.version-sync-python-dispatch] +cmd = '''version=$(cat ../../package.json | jq -r .version) && + hatch version $version''' +cwd = "python/itkwasm-transform-io" + +[tasks.version-sync] +depends-on = ["version-sync-typescript", "version-sync-python-wasi", "version-sync-python-emscripten", "version-sync-python-dispatch"] +description = "Synchronize package versions" + +[tasks.publish-typescript] +cmd = "pnpm publish --filter \"{typescript}\"" + +[tasks.publish-python-user-check] +cmd = "if [ -n \"$HATCH_INDEX_USER\"]; then echo \"HATCH_INDEX_USER is set\"; else echo \"HATCH_INDEX_USER is not set\"; exit 1; fi" + +[tasks.publish-python-wasi] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-transform-io-wasi" + +[tasks.publish-python-emscripten] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-transform-io-emscripten" + +[tasks.publish-python-dispatch] +cmd = '''hatch build && + hatch publish''' +cwd = "python/itkwasm-transform-io" + +[tasks.publish] +depends-on = ["publish-typescript", "publish-python-wasi", "publish-python-emscripten", "publish-python-dispatch"] +description = "Synchronize package versions" + +[feature.python.dependencies] +pytest = ">=8.3.3,<9" +pillow = ">=10.4.0,<12" + +[feature.python.pypi-dependencies] +pyodide-py = ">=0.26.3, <0.27" +pytest-pyodide = ">=0.58.3, <0.59" +itk-webassemblyinterface = ">=1.0b175, <2" +itkwasm = ">=1.0b179, <2" + +[feature.python.tasks.test-wasi] +cmd = "pytest" +cwd = "python/itkwasm-transform-io-wasi" +description = "Run tests for itkwasm-transform-io-wasi" + +[feature.python.tasks.download-pyodide] +cmd = '''curl -L https://github.com/pyodide/pyodide/releases/download/0.26.3/pyodide-0.26.3.tar.bz2 -o pyodide.tar.bz2 && + tar xjf pyodide.tar.bz2 && + rm pyodide.tar.bz2''' +outputs = ["pyodide"] +description = "Download Pyodide" + +[feature.python.tasks.test-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-transform-io-emscripten" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-transform-io-emscripten" + +[feature.python.tasks.serve-emscripten] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-transform-io-emscripten" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-transform-io-emscripten for development" + +[feature.python.tasks.test-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + cp ../itkwasm-transform-io-emscripten/dist/pyodide/itkwasm_transform_io_emscripten*.whl ./dist/pyodide/ && + pytest --dist-dir=./dist/pyodide --rt=chrome''' +cwd = "python/itkwasm-transform-io" +depends-on = ["download-pyodide"] +description = "Run tests for itkwasm-transform-io" + +[feature.python.tasks.serve-dispatch] +cmd = '''mkdir -p dist/pyodide && + cp -r ../../pyodide dist/ && + hatch build -t wheel ./dist/pyodide/ && + echo \"\nVisit http://localhost:8877/console.html\n\" && + python -m http.server --directory=./dist/pyodide 8877''' +cwd = "python/itkwasm-transform-io" +depends-on = ["download-pyodide"] +description = "Serve itkwasm-transform-io for development" + +[feature.python.tasks.test-python] +depends-on = ["test-wasi", "test-emscripten", "test-dispatch"] +description = "Run tests for all Python packages" + +[environments] +python = ["python"] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d349d33f1..b1eecaa4f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -750,9 +750,6 @@ importers: '@itk-wasm/dam': specifier: ^1.1.1 version: 1.1.1 - '@thewtex/setup-micromamba': - specifier: ^1.9.7 - version: 1.9.7 itk-wasm: specifier: workspace:^ version: link:../core/typescript/itk-wasm From d45381bbbf88a0ebcb5c8d89ae8d07b50d6d12a4 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Thu, 24 Oct 2024 16:43:40 -0400 Subject: [PATCH 32/39] chore(transform-io): bump version to 0.1.1 --- packages/transform-io/typescript/package.json | 2 +- packages/transform-io/typescript/src/version.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/transform-io/typescript/package.json b/packages/transform-io/typescript/package.json index 97ff4bd8c..10c1f2b1f 100644 --- a/packages/transform-io/typescript/package.json +++ b/packages/transform-io/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/transform-io", - "version": "0.1.0", + "version": "0.1.1", "description": "Input and output for scientific and medical coordinate transform file formats.", "type": "module", "module": "./dist/index.js", diff --git a/packages/transform-io/typescript/src/version.ts b/packages/transform-io/typescript/src/version.ts index ae00592b3..d62543923 100644 --- a/packages/transform-io/typescript/src/version.ts +++ b/packages/transform-io/typescript/src/version.ts @@ -1,3 +1,3 @@ -const version = "0.1.0" +const version = "0.1.1" export default version From 6062f750770f3baf1a6e4d251d965f99971bb266 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Sun, 27 Oct 2024 14:24:21 -0400 Subject: [PATCH 33/39] ci(javascript): build @itk-wasm/demo-app prior to build:gen:typescript To address: cp: no such file or directory: node_modules/@itk-wasm/demo-app/dist/assets --- .github/workflows/cypress.yml | 4 ++++ .github/workflows/javascript-typescript.yml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml index c7da53d74..9157b8080 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/cypress.yml @@ -45,6 +45,10 @@ jobs: run: | pnpm run --aggregate-output --filter itk-wasm build + - name: Build @itk-wasm/demo-app + run: | + pnpm run --aggregate-output --filter '@itk-wasm/demo-app' build + - name: Build build:gen:typescript run: | pnpm run --aggregate-output --filter "@itk-wasm/${{ matrix.package }}-build..." build:gen:typescript diff --git a/.github/workflows/javascript-typescript.yml b/.github/workflows/javascript-typescript.yml index a26ca4a11..b492363d5 100644 --- a/.github/workflows/javascript-typescript.yml +++ b/.github/workflows/javascript-typescript.yml @@ -46,6 +46,10 @@ jobs: run: | pnpm run --aggregate-output --filter itk-wasm build + - name: Build @itk-wasm/demo-app + run: | + pnpm run --aggregate-output --filter '@itk-wasm/demo-app' build + - name: Build build:gen:typescript run: | pnpm run --aggregate-output build:gen:typescript From 899f5eed6adae2b8245e92a2eaac7ee4db916a9d Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Sun, 27 Oct 2024 22:17:26 -0400 Subject: [PATCH 34/39] ci(cypress): build @itk-wasm/demo-app for testing itk-wasm --- .github/workflows/cypress.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml index 9157b8080..339627309 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/cypress.yml @@ -124,6 +124,10 @@ jobs: run: | pnpm run --aggregate-output --filter itk-wasm build + - name: Build @itk-wasm/demo-app + run: | + pnpm run --aggregate-output --filter '@itk-wasm/demo-app' build + - name: Build build:gen:typescript run: | pnpm run --aggregate-output build:gen:typescript From 70807ed34d2540a4d8f1330f5b2d5ef340811f60 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Sun, 27 Oct 2024 22:17:55 -0400 Subject: [PATCH 35/39] build(downsample): add missing @itk-wasm/image-io-build dep --- packages/downsample/package.json | 3 ++- pnpm-lock.yaml | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/downsample/package.json b/packages/downsample/package.json index 5d9a9ba2e..85523c431 100644 --- a/packages/downsample/package.json +++ b/packages/downsample/package.json @@ -40,6 +40,7 @@ "license": "Apache-2.0", "devDependencies": { "@itk-wasm/dam": "^1.1.0", - "itk-wasm": "workspace:^" + "itk-wasm": "workspace:^", + "@itk-wasm/image-io-build": "workspace:^" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b1eecaa4f..92fdde77b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -573,6 +573,9 @@ importers: '@itk-wasm/dam': specifier: ^1.1.0 version: 1.1.1 + '@itk-wasm/image-io-build': + specifier: workspace:^ + version: link:../image-io itk-wasm: specifier: workspace:^ version: link:../core/typescript/itk-wasm From 0a137a043afd9baa0ea25cc3092f5b47d87a536b Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Sun, 27 Oct 2024 22:19:39 -0400 Subject: [PATCH 36/39] ci(node.json): build deps in build:gen:typescript step --- .github/workflows/javascript-typescript.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/javascript-typescript.yml b/.github/workflows/javascript-typescript.yml index b492363d5..1a1fdc971 100644 --- a/.github/workflows/javascript-typescript.yml +++ b/.github/workflows/javascript-typescript.yml @@ -52,7 +52,7 @@ jobs: - name: Build build:gen:typescript run: | - pnpm run --aggregate-output build:gen:typescript + pnpm run --aggregate-output --filter "@itk-wasm/${{ matrix.package }}-build..." build:gen:typescript - name: Build typescript run: | From d094a34a72d987d14f548ea15f5e4d14c26c5594 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Mon, 28 Oct 2024 10:59:11 -0400 Subject: [PATCH 37/39] build(dicom): add missing compare-images-build dev dep --- packages/dicom/package.json | 1 + pnpm-lock.yaml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/packages/dicom/package.json b/packages/dicom/package.json index 2651bd2d9..1001740f1 100644 --- a/packages/dicom/package.json +++ b/packages/dicom/package.json @@ -41,6 +41,7 @@ "devDependencies": { "@itk-wasm/dam": "^1.1.0", "itk-wasm": "workspace:^", + "@itk-wasm/compare-images-build": "workspace:^", "@itk-wasm/image-io-build": "workspace:^" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 92fdde77b..e5da58884 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -506,6 +506,9 @@ importers: packages/dicom: devDependencies: + '@itk-wasm/compare-images-build': + specifier: workspace:^ + version: link:../compare-images '@itk-wasm/dam': specifier: ^1.1.0 version: 1.1.1 From b1aa4507bf09e747a3819d181f4ea3b8946998ab Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Mon, 28 Oct 2024 11:03:12 -0400 Subject: [PATCH 38/39] docs(development): note pixi requirement --- docs/development/hacking_itk_wasm.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/development/hacking_itk_wasm.md b/docs/development/hacking_itk_wasm.md index 491f7a9bc..9d6a2762c 100644 --- a/docs/development/hacking_itk_wasm.md +++ b/docs/development/hacking_itk_wasm.md @@ -2,7 +2,7 @@ ## TLDR -Install Podman, and +Install [Podman] and [Pixi], and ```sh npm i -g pnpm @@ -57,7 +57,7 @@ To prevent Git repository bloat, we add testing data through [CMake content link ## Build environment Docker images -Builds of the [wasm build environment Docker images](../introduction/parts.md#docker) or WebAssembly modules require [Podman](https://podman.io/docs/installation). +Builds of the [wasm build environment Docker images](../introduction/parts.md#docker) or WebAssembly modules require [Podman]. *Note*: on Linux, ensure the [`vfs` podman storage driver is not used for best performance](https://github.com/containers/podman/issues/13226#issuecomment-1555872420). To pull the `latest` the build environment Docker images, @@ -235,6 +235,8 @@ and rebuild whenever the documentation changes. [ITK]: https://docs.itk.org [ITK Software Guide]: https://itk.org/ItkSoftwareGuide.pdf [Node.js / NPM]: https://nodejs.org/en/download/ +[Podman]: https://podman.io/docs/installation +[Pixi]: https://pixi.sh/ [pnpm workspace]: https://pnpm.io/workspaces [PNPM]: https://pnpm.io/ [pnpm filters]: https://pnpm.io/filtering From 542cbeef5668e6a76b5c409d694fbd111474af7f Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Mon, 28 Oct 2024 14:12:17 -0400 Subject: [PATCH 39/39] build(downsample): add missing compare-images-build dev dep --- packages/downsample/package.json | 1 + pnpm-lock.yaml | 3 +++ 2 files changed, 4 insertions(+) diff --git a/packages/downsample/package.json b/packages/downsample/package.json index 85523c431..c665bd5d5 100644 --- a/packages/downsample/package.json +++ b/packages/downsample/package.json @@ -41,6 +41,7 @@ "devDependencies": { "@itk-wasm/dam": "^1.1.0", "itk-wasm": "workspace:^", + "@itk-wasm/compare-images-build": "workspace:^", "@itk-wasm/image-io-build": "workspace:^" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e5da58884..e4a6ea080 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -573,6 +573,9 @@ importers: packages/downsample: devDependencies: + '@itk-wasm/compare-images-build': + specifier: workspace:^ + version: link:../compare-images '@itk-wasm/dam': specifier: ^1.1.0 version: 1.1.1